发明内容
为了解决上述问题之一,本发明提出了一种存储设备硬件调试的方法,包括以下步骤:建立被调试存储设备的镜像,该镜像的存储单元与被调试存储设备的存储单元一一映射;对被调试存储设备和镜像进行读写操作;根据镜像定位被调试存储设备的缺陷。
根据本发明的实施例,对被调试存储设备和镜像进行读写操作包括:在对被调试存储设备进行写操作时,对镜像中的相应的存储单元进行相同的写操作;在对被调试存储设备中的存储单元进行读操作时,读取镜像中相应的存储单元的数据。
根据本发明的实施例,根据镜像定位被调试存储设备的缺陷的步骤包括:将被调试存储设备中读取的数据与镜像中相应的存储单元进行对比,若不一致则报错。
根据本发明的实施例,对被调试存储设备和镜像进行写操作包括:在镜像中设置位图,该位图指示被调试存储设备的相应的存储单元是否进行过写操作。
根据本发明的实施例,对被调试存储设备进行写操作包括:检查被调试存储设备相应的存储单元所对应的位图,如果位图指示存储单元未进行过写操作,则在镜像中申请一个新的存储单元,对新的存储单元进行写操作,并将对应的位图置位。
根据本发明的实施例,对被调试存储设备和镜像进行读操作包括:根据位图判断存储设备的相应的存储单元是否进行过写操作;如果存储单元进行过写操作,则读取存储设备和镜像中相对应的存储单元的数据。
根据本发明的实施例,根据镜像定位被调试存储设备的缺陷包括:如果存储单元未进行过写操作,则报错;如果存储设备和镜像中相对应的存储单元的数据不一致,则报错。
根据本发明的实施例,该方法还包括:记录读写请求的序列,并将读写请求所对应的镜像中的存储单元的数据按时间备份。
根据本发明的实施例,镜像设置于虚拟磁盘或物理磁盘上。
本发明还提出了一种存储设备硬件调试的系统,包括中央处理器、被调试存储设备和被调试存储设备的镜像,镜像的存储单元与被调试存储设备的存储单元一一映射。其中,中央处理器用于对被调试存储设备和镜像进行读写操作,并根据镜像定位被调试存储设备的缺陷。
本发明所提出的存储设备硬件调试的方法及系统,可以辅助高速设备的硬件调试,使调试难度降低,缩减硬件的开发周期。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。
本发明的一个实施例是在其他的高速存储介质(Media)上建立被调试存储设备的一个镜像,操作系统所发出来的读写请求在驱动层除了交给被调试存储设备,或称被调试磁盘处理外,也向镜像发送一份。如果设备的某个位置进行过写操作,那么再次读的时候,需要从镜像上读相应位置的数据,二者比较以确定设备上数据的正确性。作为本发明的一个实施例,可以记录之前的读写请求序列,备份特定时刻特定位置的数据,用来辅助调试。
如图1所示为本发明的一个实施例的存储设备硬件调试方法的流程图。如图1所示,该方法100包括以下步骤:
S101:建立被调试存储设备的镜像,该镜像的存储单元与被调试存储设备的存储单元一一映射。
作为本发明的一个实施例,存储设备的镜像设置于高可靠性和高速读写的设备上,例如,可以采用虚拟磁盘。被调试设备和驱动的功能正确性将以虚拟磁盘的内容作为比较和判断的基准,因此使用高可靠性的设备作为镜像能够提高调试的准确性。虚拟磁盘的读写速度优选地高于被调试设备的读写速度,特别地,如果高于一个数量级以上为最佳。这样可以尽量避免和排除虚拟磁盘读写所带来的一些干扰因素,例如延迟,从而利于问题的准确定位。
作为本发明的一个实施例,被调试存储设备为高速设备,被调试存储设备的镜像采用物理内存作为虚拟磁盘的载体,对于现有所有高速外设而言,物理内存都满足上述高可靠性和高速读写的要求。
作为本发明的一个实施例,可以以物理内存页面簇作为虚拟磁盘的基本单元,簇的大小一般为1、2、4个页面,视系统内存的资源可用性和碎片程度而定,在编译期或者运行期手工指定,例如,如果系统内存较大、碎片较少,则可以将簇的大小指定得稍大一些。
S102:对被调试存储设备和镜像进行读写操作。
作为本发明的一个实施例,驱动程序从操作系统获得读写请求,处理之后最终要发送给被调试存储设备,或称目标设备。若驱动程序发出了对设备写的命令,则对被调试存储设备和其镜像执行相同的写操作。若驱动中发出了对设备读的命令,则返回被调试存储设备和镜像中的相应位置的数据。
S103:根据镜像定位被调试存储设备的缺陷。
作为本发明的一个实施例,在中央处理器发出读命令时,将被调试存储设备和镜像中的相应位置的数据进行对比,如果不一致则报错。
作为本发明的一个实施例,还可以在镜像中设备位图(bitmap)指示某个存储单元是否被写过,例如,将被写过的存储单元对应的位图置位。
如图2所示为本发明的另一个实施例的存储设备硬件调试方法的流程图。如图2所示,该方法包括以下步骤:
S201:驱动程序从操作系统(OS)获得读写请求;
S202:将读写请求进行处理之后要发送给目标设备,即被调试存储设备;
S203:判断请求类型,如果为写请求,则转到S204,如果为读请求,则转到S205;
S204:如果为写请求,则对被调试存储设备的镜像例如虚拟磁盘进行与被调试存储设备相同的写操作,如果所对应的存储单元的位置未被写过,则申请一个页面簇,并将相应块的bitmap位置位;
S205:检查虚拟磁盘上相应块的bitmap,如果该bitmap指示所对应的存储单元被写过,则转到S206,如果未被写过,则转到S208;
S206:从虚拟磁盘中读取数据;
S207:将虚拟磁盘中读取的数据与被调试存储设备中读取的数据进行比较,如果相同,则程序结束,如果不同,则转到S208;
S208:报告缺陷(bug dump)数据。
作为本发明的一个实施例,可以在必要的时候可以记下出错的测试用例下的读写序列,并将相应块的数据按时间备份,以便于硬件调度者进行分析。
举例来说,以二元组<读写位置,读写类型(R为读,W为定)>构成的序列来来表示一个读写模式:<1,R>,<2,W>,<3,R>,<4,W>,<2,R>。此模式经过操作系统的I/O调度之后可能变为<1,R>,<3,R>,<2,W>,<4,W>,<2,R>。假设在此之前,系统对被调试设备无读写操作,那么驱动程序中将要执行的操作为:
1)获得请求<1,R>,处理完请求后直接发送至存储设备。读操作完成后检查虚拟磁盘位置1的bitmap,为0,表示之前没被写过,不做额外操作。
2)获得请求<3,R>,同1);
3)获得请求<2,W>,由于是写请求,无条件地将要写的内容写至虚拟磁盘的位置2,将将此位置的bitmap置为1;
4)获得请求<4,W>,同3),但是目标位置不同;
5)获得请求<2,R>,处理完请求后直接发送至存储设备,读操作完成后查看虚拟磁盘位置2的bitmap,为1,表示之前被写过。则从虚拟磁盘中读出位置2的内容,与存储设备读回来的内容进行比较。
这里所说的位置,通常是以磁盘块为单位,例如,采用的磁盘块大小可以为512字节。
如图3所示为根据本发明的一个实施例的存储设备硬件调试系统的结构示意图,其中该系统包括中央处理器301、被调试存储设备302和被调试存储设备的镜像303。其中,镜像303的存储单元与被调试存储设备302的存储单元一一映射,中央处理器301用于对被调试存储设备302和镜像303进行读写操作,并根据镜像303定位被调试存储设备302的缺陷。
在本发明的具体实施中,镜像用的物理内存也可以用读写速度高、可靠的存储设备来替代。
本发明所提出的存储设备硬件调试的方法及系统可以辅助高速设备的硬件调试,使调试难度降低,缩减了硬件的开发周期。
尽管已经示出和描述了本发明的实施例,对于本领域的普通技术人员而言,可以理解在不脱离本发明的原理和精神的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由所附权利要求及其等同限定。