药品质量投诉处理记录

2024-04-20

药品质量投诉处理记录(共9篇)

篇1:药品质量投诉处理记录

药品质量事故处理和报告记录册发生事故时间药品名称生产厂家批号 生产日期 供货单位 效期 购进日期事故原因

4责任人职称主任(审核签字)药品质量管理小组处理意见:

7药品质量管理小组组长签字:

篇2:药品质量投诉处理记录

接待者

****年**月**日

投诉者姓名

性别

年龄

工作单位 投诉者与患者关系

联系电话 患者姓名

科别

床号

住院号 投诉者陈诉:

整改措施:

主管院长意见:

处理结果:

篇3:自动气象站不正常记录的处理

1 自动气象站故障的避免方法

1.1 电源供电

观测场采集器配电箱应每天巡视检查, 确认供电是否正常, 市电是否对电池浮充电, 开关是否跳闸。在大风、雷雨天气过后应及时检查, 常有强雷暴导致跳闸, 应及时发现合闸。值班室计算机电源配电箱每天上班后、下班前均应检查是否跳闸, 保证蓄电池能浮充电[1]。

1.2 传感器维护

传感器应按照规范规定定期维护。巡视仪器设备及观测场应每天进行, 时间在日出前和日落前, 以确保地温传感器埋置正确, 风传感器转动灵活, 辐射表玻璃罩无污染物, 及时擦拭, 雨量传感器是否堵塞, 一般下雨前应清洁维护。

1.3 计算机维护

每正点前10 min要检查计算机显示是否正常, 包括计算机系统时间、采集器时间、各要素显示等是否正常。在连续采集运行3 d以上要重启计算机和软件, 以防死机影响资料采集上传。一般自动气象站用计算机每2年就需更换, 因自动气象站都是长期连续运行, 2年计算机损耗老化就很严重, 需及时更换。莒县气象站开始几年曾出现类似故障, 计算机死机, 无法启动, 经排查原因不明, 在更换计算机后恢复正常[2,3,4]。

2 不正常记录的处理

在自动站传感器、采集器出现故障时, 应及时排查修复, 无法修复的应及时更换备件, 最好在1 h内恢复正常。不能及时修复的应及时上报, 填报故障单。自动气象站发生故障时, 不正常记录的处理方法如下。

2.1 定时记录缺测的处理

当压、温、湿、风向风速等记录不正常时, 首先看正点前、后10 min有无正常记录, 若有, 则首选正点前最靠近正点的那分钟记录代替, 其次用正点后的记录代替。在OSSMO业务软件定时观测界面可以直接调出RTD文件的数据, 用哪分钟的那个要素直接双击就可代替。如果全部要素都需代替, 则直接点击分钟单元格。若正点前后10 min的记录都不正常或无记录, 则用备份自动站相应记录代替。若无备份站或备份站也异常时, 压、温、湿可用前后2个正点的记录内插求得, 风向风速、降水等不能内插, 水汽压、露点温度需用内插后的气温和相对湿度反查求得[5]。

0~320 cm地温有缺测, 则用备份站相应记录代替, 若无备份站或备份站异常时, 缺测1个时次, 用前后2个时次内插求取。若缺测2 h或以上, 则按缺测处理。

遇强降水时, 因溅水影响常使蒸发偏大, 失去使用价值导致缺测。若缺测1 h, 可用备份站记录代替, 无备份站或备份站记录异常, 则用前后2 h数据内插;若缺测2 h或以上, 则当日蒸发按缺测处理。数据内插的处理一般在下个小时进行, 当时正点上传数据文件中输缺测符号[6]。

雨量传感器夜间雾、露重时, 常会出现0.1 mm或0.2 mm雨量, 这时应删除分钟和小时雨量, 并在值班日记中注明情况。降水停止后2 h内又出现的滞后降水, 则将其前提到降水停止的那一分钟, 跨越定时发报记录无需修改报文, 处理情况备注在气簿-1备注栏。雨止2 h后出现的降水记录一律删除, 并在值班日记中注明。小时雨量缺测时, 应用备份站资料代替, 分钟记录缺测。

总辐射缺测时, 可以用备份站相应记录代替。正点辐照度缺测时, 可以在正点后用毫伏表测输出电压, 计算出辐照度, 然后用梯形面积法求得。缺测1 h也可以用前后2 h曝辐量内插求得。

缺测时段内本站气压、气温、地面温度最高、最低, 最大、极大风, 最小相对湿度等各时极值及出现时间, 应根据当时天气条件, 并与备份站数据对比, 灵活判断。一般按缺测处理, 出现时间也缺测, 判断时极值正常的也可以按照正常处理。

2.2 日极值的处理方法

一日中各气象要素的极值一般出现在固定的时间段内, 能判断某要素极值不出现在缺测时段内的, 则日极值不受影响, 按正常处理。无法判断的, 极值从实有自动站观测记录和其他代替的观测记录中挑选, 时间以挑选的为准。当用人工观测记录代替时, 极值的出现时间按缺测处理。

2.3 日统计资料的处理

自动站故障时, 一般会有1个或多个要素缺测, 可以用备份站及其他数据代替的, 按正常情况做日统计。涉及到日合计、日平均统计方法的, 只有降水、蒸发和地温3个气象要素。

降水记录连续缺测2 h或以上, 其日合计用人工站代替。

蒸发量连续缺测2 h或以上, 需将自动站各时段蒸发量空白, 在19:00—20:00蒸发量栏内输入人工站日蒸发量合计值;若缺测但时间不连续, 则需将缺测的时蒸发量内插, 当日按实有记录做日合计。

0~320 cm地温24次定时记录有缺测, 该日按2:00、8:00、14:00、20:00 4次定时记录做日平均;若4次定时记录缺测1次或以上、但该日各定时记录缺测5次或以下时, 按实有记录做日统计;缺测6次或以上时, 不做日统计。

以上所有缺测数据的处理方法均应在纸质值班日记及自动站值班日记中注明, 对月资料造成影响的还要摘入气簿-1和月报表的备注栏。

3 结语

在实际的工作中, 自动气象站采集器和传感器不会全部出问题, 一般电源或采集器故障时会出现多个要素异常或缺测, 应根据情况灵活处理。目前基准、基本站都是5次定时观测, 夜间不守班时段的记录在10:00前处理好上传, 定时记录在下次定时前处理好就行, 时间充裕则可以仔细考虑资料的处理, 减少错误, 提高“三率”。各站观测员应根据本站实际情况, 总结技术经验, 保证地面测报业务正常进行, 资料正确无误及时上传。

参考文献

[1]易智勇.CAWS600自动站操作中的问题及处理方法[J].青海气象, 2007 (2) :42-44.

[2]王建花.自动气象站仪器检定时数据的处理方法[J].科协论坛:下半月, 2007 (8) :7.

[3]张敏, 黄德学, 雷红兵.自动气象站不正常数据分析与处理[J].西藏科技, 2011 (2) :63-65.

[4]黄敏堂.上思站一次自动站仪器故障的诊断、排除及数据处理[J].贵州气象, 2012 (3) :52-54.

[5]杨秀勋, 张邯.浅析自动站不正常记录的处理方法[J].贵州气象, 2010 (1) :41-42.

篇4:药品质量投诉处理记录

关键词分钟数据;自记记录;替换

中图分类号P415.12文献标识码A文章编号1673-9671-(2011)012-0102-01

1工作原理及降水记录异常问题的处理方法

自动站雨量缺测或异常时,小时雨量可用虹吸式雨量计同时次的值代替,所以要保证虹吸式雨量计正常运转,且每次有大的降水以前都要试用虹吸式雨量计,以备自动站故障时用。假如分钟数据缺测,影响了年报表中“15个时段最大降水量”的挑取时,可以采用如下的方法使分钟数据连续和完整,且基本符合实际降水情况。确定降水异常的分钟时段,从虹吸式雨量自记中读出经时差訂正后的每分钟降水量,替换异常时段的分钟记录并备注。现将其总结如下:

降水停止后自动站仍有降水记录:

此类现象,除了仪器本身原因外,多是仪器维护或操作不当造成,因此观测员要认真查找原因。根据不同情况进行不同的处理。①滞后降水。传感器翻斗内剩余雨水,一般可能出现0.1、0.2、0.3mm少量降水记录。若该记录出现在降水停止后的下2个小时的时间段内,在逐日数据维护时则把该记录累加到降水停止的那个小时时段内;若记录出现在其后的第3小时或之后的时段内,则不再累加,应删除有关记录。夜间(08-20时)不守班的站,夜间出现此种情况时,可保持原记录,不修改B文件;若夜间有降水,但8—9时无降水现象而有少量的降水记录,则把降水记录累加到7—8时中。②维护不当造成降水。若是维护不当或仪器故障造成降水,应对Z文件进行修改,根据实际情况按无降水处理。③编报。使用自动站记录编报时,天气报、天气加密报中有关降水量组和天气现象组的编报必须配合一致。若无降水现象而有降水记录时,按无降水处理,对软件生成的降水量组,应人工删除。

在编报时段内原无降水现象,而临近编报的正点前开始降水,且无降水记录(即不到0.1毫米)时,则人工输入0.0按微量降水进行编报。①雾露霜形成降水记录。单纯的雾、露、霜形成的记录,一律按无降水处理。对软件生成的降水量组,应人工删除。Z文件以及由Z文件生成的J文件不作修改。②调试仪器形成降水记录。由于调试仪器、仪器故障、Z文件损坏等原因,形成错误的降水记录时,应对Z文件进行修改,根据实际情况按无降水或缺测处理。③做好雨量传感器的清洁工作。要做好雨量传感器的清洁工作,巡视仪器(尤其在降水前)时要注意清除承水器中的昆虫、树叶等杂物,防止漏斗堵塞,要注意检查传感器内部是否正常。方法是:拧开雨量筒下部的3个螺丝,取下外筒,检查内部各个漏斗是否堵塞,是否有蛛蜘网,是否有尘土,是否水平等。④定时降水量的观测。自动站A文件和月报表中定时降水量,均应采用08时和20时人工观测值。

2温、湿度异常数据的处理

1)故障现象:某基本站2005年8月20日,因风大雨猛,使温湿度传感器与电缆的接头进水,造成20时至21日14时各时正点温湿度数据出现异常。

处理方法:规范规定“一般时次不进行补测,仅在02.08.14.20时4个时次定时和规定编发气象观测报告时次,气温、湿度记录缺测或异常时,用现有人工观测仪器在正点后10分钟内进行补测。”该次传感器故障影响到20日20时至21日14时正点温湿度各要素记录,应该恢复人工站干湿球温度表进行观测,20日20时、21日02、08、14时的温湿度、水汽压、露点温度、相对湿度值用人工站数据代替。

2)故障现象:有个别站,因自动站芯片问题,湿度分钟数据时常出现跳变异常现象。

处理方法:把该明显跳变异常的数据作缺测处理。①假如该异常数据影响到日极值时,要重新挑取日极值。②假如跳变异常的数据影响到某一个正点时,把该正点数据按缺测处理,正点数据按《观测规范》综合问题解答24条规定:用正点前后10分钟接近正点的数据代替,并优先使用。

3气压数据异常的处理

处理方法:把该分钟数据按缺测处理;当气压分钟数据异常期间不影响到小时或日极值时,一般不必进行处理,当异常数据对日极值有影响时,按《观测规范》规定从“实有的自动观测记录和人工补测的定时观测记录中挑取日极值“。当气压分钟数据异常影响到某一正点时,按《规范》规定用前后10分钟数据代替,当前后10分钟数据也异常时,用前后时次数据内插求得。

4风向风速数据异常的处理

故障现象:自动站风速与人工站风速差值大于1.0 m/s时。

处理方法:要及时找出原因,排除故障。分钟数据异常的处理方法同气压的处理方法,但风向缺测或异常时,不能用前后两个时次的数据内插,应用其他风的自记记录代替。

5J文件的处理方法

J文件是分钟观测数据文件,由一个月的原始分钟观测数据构成,包括本站气压(P)、气温(T)、相对湿度(U)、降水量(R)、风(F)等5个气象要素:①以上异常数据(指各气象要素分钟数据),属于J文件的,将异常分钟数据作缺测处理。②J文件00分数据有误,自动站正点数据正常,用自动站正点数据代替J文件的00分数据。③J文件00分数据有误,自动站正点数据是由接近正点的10分钟内的正确分钟数据或人工补测代替的,则J文件00分的数据按缺测处理。

6A文件的处理方法

A文件为报表文件,是一个站的台站参数、每月的原始观测数据、数据质量控制及相应的台站附加信息构成。当月出现的异常数据,首先要在逐日地面数据(B文件)维护时完成,所以A文件维护时要着重对附加信息段的备注栏进行维护,备注时要说明故障原因、处理方法、是否影响极值等情况。

7结语

①当自动站出现故障时,要及时申报故障,值班员要在1小时内报告,在上级业务部门的指导下对自动站仪器、设备进行维修或更换。②当自动站出现故障时,又不能立即排除故障时,要及时恢复人工所有观测项目。③温湿度传感器和电缆的连接处要用胶带密封完好,以免进水。④观测员要加强责任心,要经常注意检查自动站和人工站各气象要素的对比,发现异常及时处理。⑤对于单轨运行的自动站数据出现异常,并对正点数据有影响时,正点前后10分钟数据优先使用,其次为人工补测值,最后为内插值。

考参考文献

[1]地面气象观测规范,气象出版社,2003,6.

[2]地面气象观测数据文件和记录簿表格式,气象出版社,2005,6.

[3]河南省气象局业务管理工作文件选编(1996-2006).河南:河南省气象局编,2006.

[4]李黄.自动气象站实用手册.北京:气象出版社,2007.

作者简介

篇5:记录归档及处理台账

XX/JL-006-A/0

序号 记录名称 文件编号 页数 存放处 归档人 归档日期 处理原因及方式 处理人 批准人 销毁日期 备注 1

篇6:医疗废物处理运行记录

6.8.4.3.2 医疗垃圾收集、处理记录、照片

6.8.4.3.3 污水处理运行记录、监测记录

6.8.4.3.4 污水处理系统环保认可(验收合格书)

篇7:写个批处理记录 行踪

1.认识批处理

对于批处理文件,你可以把它理解成批量完成你指定命令的文件,它的扩展名为 .bat 或 .cmd,只要在文本文件中写入一些命令,并把它保存为.bat 或 .cmd格式,然后双击该文件,系统就会按文本文件中的命令逐条执行,这样可以节省你许多的时间,

2.编写批处理文件

打开记事本,然后输入如下命令(如图4):

@echo off

date /t >>d:3389.txt

attrib +s +h d:3389.bat

attrib +s +h d:3389.txt

time /t >>d:3389.txt

netstat -an |find “ESTABLISHED” |find “:3389” >>d:3389.txt

然后把文件保存为d:3389.bat,这里我解释一下命令的意思,date和time是用于获取系统时间的,这样可以让你知道 在某天的某个时刻入侵,

“attrib +s +h d:3389.bat”和“attrib +s +h d:3389.txt”这两个命令是用来隐藏3389.bat和3389.txt这两个文件的,因为在登录时,由于会启动d:3389.bat这个文件,所以会有一个CMD窗口一闪而过,有经验的 应该能判断出这窗口是记录用的,所以他可能会到处找这个记录文件,用了以上两个命令后,即使他用系统自带的搜索功能以3389为关键字进行搜索,也找不到上面3389.bat和3389.txt这两个文件,哈哈!很棒吧!至于“netstat -an |find “ESTABLISHED” |find “:3389” >>d:3389.txt”这个命令则是记录通过终端的连结状况的,明白了吧!

篇8:药品质量投诉处理记录

自2005年Intel发布了基于x86的桌面版双核处理器后,多核处理器成为应用的主流,编写共享内存的多线程程序也随之成为挖掘多核处理器系统并行性的重要技术策略。然而,共享内存的多线程程序在执行时存在着不确定性,即在相同输入下,同一程序在同一台处理器系统上运行多次,运行的结果却可能出现不同。这种执行时的不确定性给多线程程序的编写、调试、应用等都带来了相应的实施难度和阻力。

划分为记录和重放两个阶段的确定性重演机制是解决共享内存多线程程序执行不确定性的有效手段[1]。确定性重演机制通过在记录阶段记录程序运行时存在的不确定性信息,在重放阶段使用所记录的不确定性信息操控程序再现原始的执行结果。不确定的信息多种多样,如输入信息、检查点信息、内存竞争等。由于当今处理器系统均提供高效的核间通信机制,使得共享内存的多线程程序在运行时内存竞争频发,记录的内存竞争信息量也在增加。同样,对于较长的大型程序,必须精简记录文件,因为记录的信息和要执行的并发程序共用内外存空间,且随着目标程序运行记录信息日渐增多,很大程度上会影响并发程序本身的执行,加重系统的运行负担。内存竞争记录目标就是在保证重演和原始执行一致的前提下,尽可能地减少记录的信息以控制时空消耗。内存竞争记录是实现共享内存多线程程序确定性重演的关键,已成为近年来计算机领域的研究热点。

1 内存竞争

在共享内存的多线程程序中,如果两个或多个线程访问了同一个内存地址,并且至少有一个是写操作,则会引发内存冲突。内存冲突共有3种类型:写后读(WAR—write after read)、读后写(RAW—read after write)、写后又写(WAW—write after write)。图1(a)展示了一个包含2个线程的共享内存多线程程序的部分指令执行序列,2个线程都对共享内存x进行了读写操作,线程i先写,线程j后读,则发生了写后读(WAR)内存冲突。

在编写多线程程序时,程序员通常使用同步操作来协同线程间内存冲突双方指令的执行顺序,使多个线程能够以确定顺序来访问共享内存。如果使用了正确的同步操作,线程间内存冲突的顺序是确定的,否则,线程间内存冲突的顺序是不确定的。这种不确定顺序的访问可能会引起内存竞争。程序执行的结果最终将依赖于竞争的结果。

内存竞争是共享内存型多线程程序中最常见的错误之一,是多线程程序执行不确定性的根源所在。内存竞争有一般性竞争(general race)和数据竞争(data race)之分[2]。一般性竞争指多线程程序执行过程中所表现出来的不确定性。具体地说,在多线程程序执行过程中,不同线程对共享内存(无论是否由共同的锁进行同步保护)执行顺序的差别,都可以归类为一般性竞争。数据竞争表现为不同的线程访问同一个共享内存,而对共享内存操作没有使用同一个锁变量进行保护,即临界区域违反了原子性执行,这是导致多线程程序出现并发错误的主要原因。用图示解说这两种竞争的发生过程,如图1所示。

如图1(a)中,x作为共享内存,因为线程ij都没有添加同步操作实现对x的互斥操作,使得两线程可能会同时执行对x的操作,因而会引发数据竞争,导致程序运行结果不确定。程序执行的结果,最终取决于谁“赢得”竞争。竞争的结果往往取决于机器的配置和初始状态(例如,缓存替换策略和缓存的初始内容)。在图1(b)中,线程ij都在共享内存x操作前后添加了同步操作语句,加锁(lock)和解锁(unlock)操作,可以实现两线程互斥的访问x,不会引发数据竞争。然而,没有数据竞争同样会使得程序存在不确定性。因为这种互斥的访问并没有明确排定两线程间对x的操作顺序,有可能线程i先写x,也可能线程j先读x,从而可能会引发一般性竞争,可能会导致程序多次运行得到不同的执行结果。

所有的内存竞争都属于内存冲突,反之,则不成立,只有内存冲突双方对应的内存操作的执行顺序不确定时才会引发内存竞争。

2 内存竞争记录

内存竞争记录是实现共享内存多线程程序确定性重演的关键技术,已成为近年来计算机领域的研究热点。截至目前为止,内存竞争记录的研究已经取得了丰硕成果。下面概括论述国内外内存竞争记录相关的研究进展。

2.1 软件实现的内存竞争记录机制

目前已有不少的软件系统实现了多线程程序中内存竞争的记录及重演,有的系统采用基于值的方法实现,有的采用顺序的方法实现,有的记录线程间同步操作的顺序,有的记录线程间内存交互的顺序,还有记录操作系统调度的顺序,等等方式不一而足。系统的实现方式不同,应用的场合也有所不同。下面对其进行概略性介绍。

Recap[3]在编译时对每个共享内存读操作进行插桩,在程序运行时记录每个共享内存读操作的值。这种方式记录了内存竞争的结果,能够确定性地重演多线程程序,但是却不能提供线程间共享内存操作的顺序。同时,追踪每个共享内存读操作的值,将造成性能开销增加、记录的日志庞大。

Instant replay[4]则不记录共享内存读操作的值,而是将线程间的交互看做是对共享对象的操作,记录线程中共享对象读或写的顺序。Instant replay为每个共享内存对象添加一个版本号,每个线程都将访问共享对象时的版本号信息记录到日志文件中。通过这种方式,程序在重演时,就能够确保所有线程访问到与其原始执行时相同的版本号,从而可以确定性地重演多线程程序。在这种方式下,用户要对共享对象及同步操作进行标记,以一种较粗的粒度记录对共享内存操作的顺序。Instant replay因为要跟踪所有内存的读写操作,将带来不小的开销,而且只能适用于没有数据竞争的场合。

SMP-Revirt[5]是Instant Replay对共享对象的一种概括,可记录共享内存页的状态。在记录日志阶段,一个给定的内存页只能处于并发读或互斥写的状态,这些访问控制通过改变一个线程的页的权限来实现。SMP-Revirt同样也是采用了较粗的粒度来记录操作的顺序,只能适用于没有数据竞争的场合。因为SMP-ReVirt的插桩操作和对基于页级粒度的共享内存的保护,存在伪共享和页竞争。尤其是随着处理器数目的增加,其开销也越来越大。在配置4个CPU的情况下,SMP-ReVirt中一个应用开启记录功能后的运行时间就能够达到正常运行时间的9倍之多。

RecPlay[6]通过记录同步操作的顺序,间接地记录线程间交互的顺序。同步操作的顺序用一个标量Lamport时戳[7]来识认,在重演时,可以通过重建Lamport时戳实现确定性的重放。同时为了减少存储的时戳信息,RecPlay只记录时戳的增量,而非实际的时戳。但RecPlay只能够重演不包含数据竞争的程序,而且也不能提供线程间内存操作的顺序。

Russinovich[8]通过记录线程调度顺序间接记录内存竞争,可以实现多线程程序的重演。假设多线程程序运行在一个单核处理器上,则指令执行的顺序是由调度器决定的,Russinovich记录器通过记录调度器发出的调度日志就可以记录多线程执行的顺序。采用相同的调度顺序重放程序,就可以再现竞争,实现程序的确定性的重演。然而,为了支持多线程能在单处理器上运行,Russinovich记录的调度器调度的顺序,10%的运行时间开销在记录阶段,其中一半用于追踪软件的指令计数器,而另一半则来自记录模块。而且,随着处理器数目的增加,开销则会大幅度上涨。

JaRec[9]和DejaVu[10]是在java虚拟机上实现的记录器。Jarec使用一个同RecPlay相似的方式,有效记录了JVM上共享内存操作间的顺序,但却也同样不能重演具有数据竞争的多线程程序。DejaVu则借鉴与Russinovich相近的思想,通过记录线程运行时的关键事件,为多线程创建了逻辑上的调度。DejaVu独立于系统底层的调度器,能实现与同java虚拟机的物理调度器分离,具有更好的可移植性。JaRec和DejaVu还同样都会带来较大开销。JaRec可使得宏测试用例的运行速度减缓80%,Dejavu则使得综合测试用例的运行速度减缓70%,同时使得SPLASH内核的运行速度也相应减缓了35%。

Kendo[11]通过确保同样于原始执行时获取锁的顺序而间接记录内存竞争来重演多线程程序。Kendo要求程序实现正确的同步,但却不能提供线程间内存操作的顺序,另外也不支持包含数据竞争的程序。

Netzer[12]采用点到点记录方式,为每个线程记录一个由冲突双方的指令计数值IC表示的依赖关系组成的日志。Netzer为每个线程提供一个指令计数器IC。IC标记了一个线程内指令执行的顺序。而内存冲突则用线程间的一对IC值来表示。Netzer内存竞争记录器不需要记录线程内指令执行的顺序,而只是记录线程间指令的Happen-before关系[7],即由冲突双方IC值表示的依赖关系。重演时,线程内的指令按照IC值的大小重放,线程间的指令执行顺序则按照记录的偏序重放,这样就可以重演多线程程序。冲突和程序的执行顺序构成一个有向图,两者之间还可以进行传递性的约减(Transitive Reduction),从而使得有些冲突不需要记录。这种传递性约减在Netzer中可证明是正确的,再次执行程序的过程与没有约减时执行的过程是一致的。只是运行时间开销较大,因为要跟踪所有的内存读写操作,使得重演的速度牺牲了至少1个数量级。

PinPlay[13]基于流行的动态插桩工具Pin[14],实现了一个通过易于使用的框架来捕获程序执行 信息、确定性重演程序以及在合理的时间和空间消耗范围内分析大型程序的执行过程。PinPlay主要应用于程序调试,而且只支持离线的重演。

ODR[15]记录同步操作顺序等信息,使用一种称为DRI的技术,搜索能够产生相同结果的运行空间,并推断得出竞争的结果。ODR 减少了记录阶段的信息量及开销,同时确保原始执行时的所有错误在执行时都是可见的。但是,在重放阶段,需要搜索可确定性执行的空间,由此导致了重放阶段的消耗大幅度增加,速度大尺度下降,且只能实现离线的重演。

Respec[16]支持运行在商业多核处理器上的共享内存多线程程序的确定性重演,能够实现在线的重演,即记录和重演可以并发执行。Respec采用两种策略来减少开销:可推测的日志记录和外部重演。可推测的日志记录只存留更少的能够确保重演的线程间交互信息,在重放时,如果重放过程偏离记录过程,则尝试再次重放,两次执行必须确保执行的结果和最终的状态达到一致。这两种策略可以确保不包含数据竞争的程序段记录和重放时有较低的开销,也能够确保带数据竞争的程序段的正确重放。只是重放时的速度将大大地放缓。

PRES[17]本着放宽以重现错误为第一重演目标的思想,通过只记录部分程序执行过程中的信息(PRES称为“草图”),并借助额外的诊断时间智能搜索未记录的不确定性空间来重现错误。PRES降低了记录阶段的开销,但因为在重演时搜索不确定的空间,增加了重演阶段的消耗,重演的速度为之急剧降低。而且只支持离线的重演。

DoublePlay[18]提供了一种能够确保在商业多核处理器上的重演手段,通过将线程划分为并行的epoch,在记录阶段只记录同步操作等少量的信息,在重演时使用这些信息指导程序实现epoch级并发执行。DoublePlay保证了带或不带数据竞争的程序的确定重演,但却需要一个额外的处理器核,可扩展性不好,并且只支持离线的重演。

2.2 硬件实现的内存竞争记录机制

针对软件实现内存竞争记录带来的巨大性能开销,对原有系统性能影响重大,而且软件的实现速度也不具备现实可接受性,而与之相对,硬件却只会带来很小的、几乎可以忽略的性能开销。因此,研究者纷纷提出了硬件支持的内存竞争记录器。

Goldstein[19]是第一个基于硬件的内存竞争记录器,在基于监听总线的多核处理器系统上实现,监听并记录总线上的所有事务。每次总线操作,对应指令的IC值则送往记录器,此记录器便为多线程记录了一个总线操作的全序,也就是既记录了线程间共享内存操作的偏序关系,又记录了线程内对共享内存操作的顺序。为实现这个全序记录器,Goldstein需要添加一个内存页状态表、一个指令计数器表和一个日志缓存。因为内存间交互的记录由专门硬件设计实现,对程序执行的速度影响小,但Goldstein需要追踪每一个内存访问,需要记录大约50%总线操作,记录的日志超大,内存开销也为之加大。同时,又由于其实现是基于监听总线的多处理器系统下,可扩展性较差。

ReEnact[20]使用线程级推测机制来记录和重演多线程程序。每个处理器核需要添加版本cache和支持回滚能力硬件部件。每当检测到同步操作时,结束一个chunk,而同步操作结束后,再开启一个新的chunk。通过记录固定数目的chunk,可以确定性地重演至发生内存竞争的位置。但ReEnact的硬件实现结构复杂,且只能实现离线的重演。

CORD[21]使用Lamport时钟来标记内存竞争的顺序,但是以cache块为粒度,为每个cache块添加一个时戳,并对原有的cache结构进行了修改。同时,每个处理器添加两个寄存器用于保留下一个可用内存的物理地址以及chunk结束时对应内存的物理地址。相比ReEnact,CORD硬件实现复杂度降低,但却牺牲了内存竞争检测的精度。

BugNet[22]实现了用户级的确定性重演,在记录内存竞争时,与Recap一样,记录共享内存读操作的值,但不记录所有共享内存读操作的值,而是只记录第一次读某个共享内存地址时的值。一个共享内存的值如果为外部事件所修改,其后读取这个地址的值也将得到同样的记录。BugNet实现了多线程程序的重演,记录了更小的日志,但却同样需要追踪每个共享内存读操作,因而带来较大的性能开销。

FDR[23]是一个硬件实现的全系统记录器,在进行内存竞争时,记录共享内存操作间的偏序关系,并实现了Netzer[12]提出的传递性约减算法,所记录的日志格式如图2所示。

FDR采用点到点的记录方式记录由冲突双方指令IC构成的偏序关系,需要保存每个内存操作的时戳到cache中,利用原有的cache一致性协议进行内存竞争检测。与Goldstein不同的是,FDR只记录一致性操作中很少的一部分事件,将记录信息添加到cache一致性部件中,大大降低了硬件资源消耗。而且,FDR是一种基于目录cache一致性协议的分布实现方式,具有良好的可扩展性。图3给出了FDR的硬件实现结构。FDR为系统中的每个核增加一个指令计数器,记录本线程已执行的指令数;为每个cache行增加了一个cache指令计数器(CIC),存储访问这个cache行的最后一次读指令或写指令对应的指令计数器值。当一个处理器核收到来自其他核的针对某个cache行的远程一致性请求时,就将此cache行对应的CIC和核ID号附加到与之相配的应答消息中。发出请求的处理器核记录下通过由应答方送来的ID和CIC值以及请求方ID与当前的IC形成的依赖关系。为了实现传递性优化算法,FDR还需要为每个核增加一个向量指令计数器,追踪每个核收到的最新的CIC。FDR实现了线程间的内存竞争的记录,可以实现程序的快速重演,但却因之带来了较大的硬件资源消耗。

RTR[24]是FDR的改进版本,已不再记录确切的冲突happens-before关系,而是为冲突创建一种优化的人工顺序。这种人工顺序能够获得比Netzer’TR算法性能更佳的优化,创建了更加紧凑的日志,如图4所示。与FDR相同,RTR也需要保存内存操作的时戳。但是,RTR为了减少对原有cache的影响,采用了分离的cache结构。而且,RTR也将该内存竞争机制应用在TSO存储模型中。虽然,RTR记录了更小的日志,但却因为需要为每个内存操作保存时戳,并与FDR同样地,带来了较大的硬件消耗。

Rerun[25]首先提出了chunk记录方式。chunk是指程序运行时相互独立的内存指令的集合。在chunk记录方式下,硬件资源消耗低,由此其后很多内存竞争记录研究成果中也都纷纷采用了chunk记录方式。

在Rerun中,chunk可称为episode,如图5所示。Rerun为每个处理器核增加一个读、写签名,分别用来记录此核

当前chunk中内存块的读写地址;添加一个全局的Lamport时钟,用于标记chunk的时戳,如图6所示。当cache收到一个远程请求时,就查找签名来检测冲突。如果检测到冲突,结束当前chunk,并且清空读写签名,记录刚才结束的chunk长度和时戳至内存竞争日志中,同时更新时戳值。处理器核则会将更新后的时戳附加到一致性协议的应答消息中,确保每个处理器核的chunk的顺序。这种记录方式大幅降低了硬件资源消耗,还在较弱的程度上压缩了所记录的日志,并且记录的日志容量还有良好的可扩展性,不会随着处理器数目的增加而成倍上升。然而,Rerun在重演时只能按照chunk时戳的大小顺序进行重放,重演速度则大为降低。

与Rerun相同,DeLorean[26]也使用签名实现内存竞争检测,但却只能运行在另一个不同的多处理器执行环境BulkSC[27]下。在这个环境中,处理器核不断地执行由检查点寄存器彼此分隔的chunk,在能提交一个chunk之前,其所对应的签名就要同其他chunk的签名进行比较来检测冲突。如果一个chunk检测到冲突,对应签名就会清空,chunk弹回并重新执行。虽然已经证实Delorean表现良好,但由于其只能应用在一款不同的多处理器下,执行的环境并不标准,而且还需要硬件扩展,且同硬件支持的事务内存较为类似[28],因此很难得到大范围的应用。

文献[29]在Rerun的基础上实现了基于监听总线的多核系统下chunk的记录,而且提出了并发chunk域来提高重演速度。IMMR在一个chunk结束时,会发出广播信息,使所有线程的chunk结束,具有相同时戳的chunk将构成并发chunk域。采用这种并发chunk域,重演时的速度可以提高几个数量级,但却需要记录更大的内存竞争日志。

Timetraveler[30]通过挖掘Rerun中记录的循环chunk,记录了一个无循环的内存竞争日志。Timetraveler为cache一致性部件添加了一个Time-delay缓冲区,并在二级cache中添加一个过期时戳,以检测循环的chunk。Timetraveler最大限度地减少了记录的内存竞争日志,但却改变了cache系统的结构,也没有提及如何提高重演的速度。

Karma[31]对 Rerun进行了扩展,通过将chunk记录到一个有向无循环图DAG中来标记chunk执行的先后顺序,而不再记录Lamport时戳。在每次检测到冲突后,Karma就在DAG中添加一个指向后续chunk的边,这个边由前驱chunk和后继chunk的相关信息组成。Karma这种DAG图的记录方式提高了重演的并行性,加快了重演的速度,但重演的速度性相比前面介绍的点到点的记录方式,即FDR和RTR,还有待进一步提升。

Strata[32]采用向量时钟表示访存操作间的happens-before关系,由于向量时间戳可以间接地表示多个happens-before关系,所以可以减少记录信息的数目。Strata在发生一个内存冲突时,记录一个Stratum,Stratum就将包含这一时刻的所有线程时戳。一个Stratum可以将记录内存冲突发生前和记录内存冲突后的内存操作做以有效区别,通过分析两个相邻的Stratum就可以捕获内存冲突。采用这种记录方式可以不用记录读后写类型的冲突,减小了内存竞争日志。但若要想知道共享内存间的依赖关系究竟为如何,就需要进行离线的分析。同时,随着处理器数目的增加,记录的日志会增加太多,可扩展性较差[22]。

Rainbow[33]同Strata一样,用向量时钟表示访存操作间的happens-before关系[7],但其通过建立精确的happens-before关系,有效地减小了记录信息,并采用逻辑向量时钟描述冲突访存操作间的happens-before关系,而与采用标量时钟相比,则可以避免happens-before关系的误识,同时降低重放执行过程中并行度的损失。在4核处理器上,Rainbow与Strata相对照,在记录条数上平均减少了17%。但Rainbow的可扩展性却同Strata一样,均属表现较差。

LReplay[34]提出了一种简洁的硬件辅助机制实现确定性重演。LReplay不记录内存交互的顺序,而是记录指令或指令块的延迟时间信息,虽然硬件资源消耗少,记录的日志也小,但却只能应用于一款特殊的体系结构Godson-3[35]。

现有的绝大多数的内存竞争记录器只考虑了顺序一致性模型,RTR,Karma虽然提供了对TSO储存模型的支持,但却都需要修改cache子系统的结构或cache一致性协议,这将很难在商用处理器中得到圆满实施。文献[36]给出了一个高效、低复杂度的处理器方案,支持TSO存储模型下的记录和重演,记录初始的寄存器状态和cache未命中的数据。使用这些信息,每个线程在重演时,使用离线算法推导得出线程间共享内存的TSO兼容的因果顺序。同时,这一方案也讨论了限定搜索空间的方法及降低离线分析时间的优化方法。但该记录机制只能支持离线的重演,且重演时则因为要搜索空间,重演速度也较低。

CoreRacer[37]是一个针对x86 TSO处理器核、基于chunk的内存竞争记录器,而且不需要修改cache系统和一致性协议。通过利用一个特殊x86体系结构特征—不变的时间戳,CoreRacer无需向高速缓存一致性的消息中添加消息就可以维护chunk间的顺序。CoreRacer通过记录chunk结束时写缓冲中等待提交的写操作的数目来处理TSO存储模型。另外,CoreRacer还利用所记录的信息仿真了写缓冲,但同文献[33]一样的是,只能实现离线的重演。

3 内存竞争记录面临的挑战

现有软件实现的内存竞争机制带来了较大的性能开销,虽然有些系统通过一系列举措来减小记录的开销,如RecPlay等通过减小所需记录的程序的范围来降低开销,PRES和ODR通过放松对确定性重演的定义来降低开销,DoublePlay通过转换工作从记录阶段到离线重演阶段来降低开销等等。但相比硬件实现,开销仍显巨大。而且,硬件在价格不断下降的同时,性能却在持续增强,因此,硬件实现的内存竞争记录更具发展前景,同时为越发复杂的软件系统提供内存竞争记录的技术支持也显得尤为必要。但硬件的实现的内存竞争记录机制却仍然在如下方面存在艰巨挑战,需要正视和应对。

(1)日志大小

现在的计算机支持快速的通讯机制,内存竞争频发,虽然FDR、RTR采用传递性递减方法在一定程度上减小了内存竞争日志,但如果是长时间地运行程序,仍会造成记录的日志过大。Timetraveler虽然努力减小了内存竞争日志,但却带来了一定的设计复杂度,并且其重演速度同Rerun一样也要受限。Karma虽然可以通过调节chunk的长短来减小内存竞争日志,但这种调节又会反过来影响重演速度。而实际应用中,如果长期开启内存竞争记录功能,不仅会产生大量的内存竞争日志,还会消耗大量的内存,对重演速度也会发生高度影响。LReplay显著减小了内存竞争日志,但也只能适用于特殊结果的处理器。

(2)带宽开销

除Delorean外,所有的内存竞争记录器必须附加cache一致性消息来维护系统中时间的顺序。例如,在FDR中,当前的指令计数值CIC就附加到cache一致性应答消息中,用以记录不同进程两指令间点对点的依赖关系。Rerun中的时戳则附加到每个一致性应答中,用于维护块间的因果关系。FDR和Rerun在功能仿真中会带来10%的带宽开销,并因其带宽带来了一定压力而损伤了性能。其他硬件实现的内存竞争记录机制同样存在带宽开销大的弱点,而对于一直都要开启确定性重演功能的系统来说,带宽的消耗更是不可估量。

(3)重演性能

很多应用都能得益于确定性重演,如容错、长时间间隔的调试等应用,因此需要开发实用技术来提高重演速度。Delorean、FDR和RTR均能以程序原始执行时的速度来重演一个程序。在Delorean中,通过并行的、而且以在原始执行过程中记录的提交顺序为依据地重新同步程序块才得以完成重演。FDR、RTR可以并行重演,只有在原始执行过程中记录的点到点的依赖关系处重新同步来实现重演。然而FDR、RTR和Delorean都不可能成为现实中内存竞争记录器的实际选择,因为FDR和RTR都需要增加较多的硬件资源,而硬件复杂度却是当代多核处理器的一大设计难关,而Delorean的执行环境又极不标准。Rerun中按照chunk时戳增长的顺序进行重演,几乎是串行的,因此,Rerun不能满足内存竞争记录应用对重演速度的需求,如容错处理。作为一个替代的重演方案,文献[29]提出了一种称为并发chunk域的重演策略,一定程度上提高了重演速度,但却是在牺牲日志尺寸情况下获得的速度提升。Karma采用DAG图记录chunk,脱却了全局时钟的限制,但其重演的速度相对点到点记录方式仍然有待改进。而文献[36]和CoreRacer只支持离线的重演。

(4)支持非顺序存储模型

目前提出的内存竞争记录机制,只有很少的一部分能够支持非SC存储模型,这对商用处理器来说,是一大挑战。文献[36]和CoreRacer虽然针对TSO存储模型,但只支持离线的重演。为了开拓内存竞争记录的应用场合,早日进入实际应用中,就需要开展针对非SC存储模型的内存竞争记录机制的进一步研究。

4 结束语

随着多核处理器的流行,共享内存多线程程序的应用也日益广泛。然而,共享内存多线程程序在执行时却存在着不确定性。线程在执行时内存竞争频发,是导致多线程程序执行不确定性的主要原因。要实现共享内存多线程程序的确定性重演,最大难点就在于高效实现内存竞争的记录及重演。本文对内存竞争记录的国内外研究现状进行了概括,比较和论述了现有软件实现的内存竞争记录机制和硬件实现的内存竞争记录机制,指出硬件实现的内存竞争记录更具竞争前途,并且分析了当前硬件实现的内存竞争记录在内存竞争日志大小、带宽开销、重演性能及是支持非顺序存储模型4个方面存在的挑战。

摘要:共享内存多线程编程是挖掘多核处理器并行性的重要方法,然而,共享内存的多线程程序在运行时存在不确定性,线程间的内存竞争是导致不确定性的主要来源。内存竞争信息量大,记录时带来的开销大,实现内存竞争记录是确定性重演共享内存多线程程序的关键。分别概括了现有软件实现的内存竞争记录机制和硬件实现的内存竞争记录机制,并对内存竞争记录的研究现状进行了总结,指出了当前内存竞争记录技术面临的挑战。

篇9:药品质量投诉处理记录

总结多年生产和质量管理的工作经验,笔者认为在票据生产过程中,有3个票据号码控制的过程记录最为关键,只要这3个记录得到规范控制,票据号码的印刷质量就能得到有效控制。因此,本文将对这3个记录的作用及使用方法进行介绍。

拨(排)号记录

拨(排)号记录是票据号码印制之前的作业策划记录,由实施票据号码印制工序的操作人员(一般包括印刷工序的喷码操作人员和配页打号工序的机械打码操作人员)填写,包括拨号记录和排号记录:拨号记录是指将大批量活件分批打号,每次所拨的号码组的记录;排号记录指按照印刷版面上的排版方式,把每批所拨的号码合理、准确地排列在印刷版面的每个票据上的记录。拨号记录和排号记录放在一张记录上的原因是一方面可以减少记录的个数,另一方面便于以后对票据号码的追溯。

每批次拨号的数量原则上根据每批活件的印量确定。一般来说,对于小批量(一般指2万折以下)的票据产品,印量有零有整时,应分两批拨号,第一批应拨一个整数印量,第二批将剩余的零头印量拨完,因为第一批整数印量的拨号,可以使印刷版面上每个票据号码的尾数基本相同,只是在千位或者百位上有差别,这样在进行打号过程的检查时,只要印刷版面上有一处票据号码的后几位与其他票据号码的后几位不同,就可断定是该票据号码出现了问题。

通常票据印刷企业碰到更多的是印量较大的活件,不但打号要分批次完成,甚至印刷也要分批次完成。对于折叠式票据来说,一批次一般为5万折,这主要是因为折叠式票据一般采用左右连二(或以上)的拼版方式进行印刷,按照联数不同,5万折票据大概为50~100箱,那么这5万折票据完成打号进行装箱后,这一批次的票据应该连号。但如果一次性拨完所有的号,那么左右两排票据的号码可能会出现断号,这就需要等待断号的票据印制出,这样一方面造成大批量的票据要等很长时间才能入库,不利于票据的安全存储和管理,另一方面遇到活件紧张时,势必会造成断号交货的现象,从而影响客户使用。而5万折的半成品票据大约半天就能完成配页、打号,既能满足客户的时效性要求,又能保证票据可以分批次入库保存。对于本式票据来说,一批次一般为2万折,与折叠式票据类似,这样一方面可杜绝在进行大批量票据装箱时,票据号码断号,另一方面便于装订工序的现场作业管理,特别在打包装箱时,只有每批活件连号才能进行操作,但如果批量太大,就需要大面积的场地进行打包装箱,既不利于操作人员的有序作业,也不利于装订车间的有效管理。从生产实际来看,对于一拼四或一拼六的票据来说,每批次拨号2万折最合适,可使票据装订工序的效率更高、管理更顺畅。

根据上述原则进行票据打号作业前的票据号码设置和策划,并进行详细记录,再经过自检、同工序互检、质检员或主管的专检后就可进行票据打号作业了。

打号记录

打号记录指打号作业工序各班次对本班次作业票据号码的记录,是打号作业的过程记录,同样由印刷工序的喷码操作人员或配页打号工序的机械打码操作人员来填写。由于票据产品的印量一般较大,需要分几个批次进行打号作业,只有对所有批次的票据号码进行统一打号管理,才能避免漏打号或重复打号。

此外,须注意每个班组在接班时,须与上一班组进行票据号码打号交接,即将打号记录与实物进行核实,同时与拨(排)号记录进行核对,以检查上工序的作业是否正确,在自已班组作业结束后,与下一班组也应交接清楚。每一班组应记录好自己班组作业的票据起止号码,保证整个生产过程的有序进行。

错(补)号记录

错(补)号记录是整个票据印制过程中都要用到的记录。印刷机喷码工序或配页打号工序中如果出现错误,需要补号时,即使马上进行了补号替换处理,也要将出现问题的号码记录下来,以备检验人员核对。出现错号时,就要重新拨号,这期间很容易出现问题,出现以错补错的现象。从笔者多年遇到的票据号码质量事故来看,问题往往出现在曾经发生错(补)号的地方,因此,对错(补)号的控制尤为关键,这也是检验人员检查的一个重点。

当出现错号时,打号工序操作人员应认真记录发生的错号,并将补好号的印张单独放置,在与下工序进行交接时,将错号记录和补好号的印张一起交给下工序或质检工序的数字管理人员,数字管理人员要将错号记录和补好号的印张进行一一核对,完全无误后再交给相关作业人员进行补号替换。相关作业人员在进行补号时,要将替换下来的错号印张保存,统一交由数字管理人员处,数字管理人员要按照错号记录与错号印张进行核对,确保一一对应后,再将错号印张销毁。当装订和质检过程中出现需要补号的情况时,应由操作人员记录下来交给数字管理人员,由数字管理人员进行统一补号,补完的号码印张也要重复上述的作业过程。

在该批次活件完成后,所有的错号应该有记录、有核对、有补入、有检查,这样才能确保错号和补号的准确。错(补)号记录上的错号、补号经过检查,并且由相关人员签字后,该批活件才能入库。所有错(补)号记录由数字管理人员统一收集后,应交相应管理者进行统一管理,这样当客户反映票据号码出现质量问题时,就可查看是否出现过错(补)号。

上一篇:在观察中比较教学设计下一篇:妇产科优质服务口号