一种Linux系统的SCSI Target模式的数据I/O写入方法技术方案

技术编号:7786226 阅读:455 留言:0更新日期:2012-09-21 07:10
本发明专利技术描述了在Linux系统下使用SCSI存储设备的数据I/O写入方法。该方法提供了一个在Target模式驱动和文件系统之间的缓冲区,缓冲区是由每个长度为4KB的Page组成的双向循环链表,链表的长度范围为1024~2048,缓冲区内设有偏移指针,数据首先被写入缓冲区,当缓冲区内的新数据达到规定长度的整数倍的时候,就调用文件系统的DirectI/O接口,直接把数据写入磁盘。当新数据写入缓冲区的时候,如果最后一个写长度无法对齐,就按照对齐的长度写入,再调用truncate文件系统内核接口,调整数据的长度到正确的值。本发明专利技术通过I/O缓冲区的设置和规则设计,实现了SCSI中I/O数据块的对齐,结合了文件系统的DirectI/O,从而提高了系统的性能。

【技术实现步骤摘要】

本专利技术涉及一种磁盘数据读写方法,特别是一种Linux文件系统下的使用SCSI存储设备的数据写入方法。
技术介绍
传统的Linux文件系统的标准I/O接口是基于数据拷贝操作的,即I/O操作会导致数据在操作系统的内核地址空间的缓冲区和应用程序用户层地址空间定义的缓冲区之间进行拷贝。在这种机制中,磁盘驱动采用了 DMA方式,可以将数据直接从磁盘读到页缓存中,或者将数据从页缓存直接写回到磁盘上,而不能直接在应用程序地址空间和磁盘之间进行数据传输,这样数据在传输过程中需要在应用程序地址空间和页缓存之间进行多次数据拷贝操作,最大的好处就是可以减少磁盘I/O的操作,因为如果所请求的数据已经存放 在操作系统的高速缓冲存储器中,那么就不需要再进行实际的物理磁盘I/O操作。但是数据传输过程中的数据拷贝操作却导致了极大的CPU开销,从而限制了系统进行数据传输的性能。这个方法实现了内核态的Direct I/O方法,不仅避免了内存的拷贝,降低了 CPU的开销,而且提高了系统的I/o性能。Direct I/O Target模式的接口,为主机提供虚拟SCSI设备,在传统的Target驱动中,对主机发出的I/O的请求,直接调用标准的文件系统接口,读写数据,导致整个Direct I/O Target接口的I/O性能无法得到提高。原因在于主机的每次I/O请求的数据大小是随机的,而Direct I/O则要求每次数据必须按照文件系统block对齐,这样就无法利用内核态Direct I/O带来的优点。而DCR作为一种嵌入式系统,性能则受到限制。
技术实现思路
本专利技术的目的是专利技术一种高效的Linux系统的Target模式的数据I/O方法。本专利技术适用于Linux系统,所述Linux系统使用Target模式驱动SCSI磁盘设备,其特征在于提供一个在Target模式驱动和文件系统之间缓冲区,所述缓冲区由每个4KB长的Page组成的双向循环链表,链表长度的值是1024到2048,所述的缓冲区内还设有偏移指针,数据首先被写入缓冲区,当缓冲区内的新数据累积到4KB的长度的整数倍的时候,调用文件系统的Direct I/O接口,把数据写入磁盘。所述的新数据写入缓冲区的时候,最后一个写长度如果无法对齐,就按照对齐的长度写入,再调用truncate文件系统内核接口,把数据长度调整成正确的值。每个链表中包括多个Page,链表顺序循环使用,在每次flush缓冲区的时候,把填满的Page写入文件系统。本专利技术的数据写入方法,通过I/O缓冲区的设置和规则设计,实现了 SCSI I/O数据块的对齐,结合文件系统的Direct 1/0,提高了系统的性能。附图说明图I模块层次模型 图2多个缓冲区填充的结构关系 图3缓冲区的流程图。具体实施例方式以下将参照附图对本专利技术的实施例进行描述 如图I所示,本专利技术应用于Linux系统,这个系统中使用Target模式驱动SCSI磁盘设备。整个系统模块层次的模型结构有4个层次,包括Targe t模块100、缓冲区速缓存CachelOl、文件系统 Filesysteml02、磁盘 Diskl03。所述的Target模块100是最终的数据存储介质,数据先通过Target模块100进行处理,然后通过缓冲区缓存CachelOl,经文件系统FileSystem再写入磁盘。整个流程中具有一个数据处理方法,这个方法就是一个数据I/O方法,系统效率由此体现。所述的Cache模块101是用来存放数据的缓存和对齐,有提高性能的作用。所述的Filesystem模块102是管理磁盘上的文件,对文件进行读写、增加、删除等操作。所述的Disk模块103是用来存放数据的磁盘。如图2所示,本专利技术的方法是提供一个在Target模式驱动和文件系统之间缓冲区,所述缓冲区由每个4KB长的Page组成的双向循环链表,链表长度的值为1024到2048,所述的缓冲区内还设有偏移指针,数据首先被写入缓冲区,当缓冲区内的新数据累积到4KB的长度的整数倍的时候,调用文件系统的D ir ec t I /O接口,把数据写入磁盘。如图2所示的缓冲区结构,包括四个Page多个缓冲区的Page可以循环顺序使用,设置一个填充标记dirty和一个清空标记clean,当数据填满一个Page的时候,就将这个Page改为dirty标记,在这个示意图中,步骤104的Pagel和步骤105的Page2已经被写满,也就是标记了 dirty,步骤106的Page3只被填满了一部分,然后下一个写命令的数据就可以继续写入;步骤107是完全空闲的Page4,可以被未来的写命令使用。在每次Flush缓冲区的时候,将标记为dirty的Page的数据写入磁盘。等操作完成以后,该Page再次被标识为clean进行下一次的使用。如图3所示的缓冲区使用流程图,步骤SI收到主机写命令以后,步骤S2判断是否为文件结束标志,如果是的话就执行步骤S3写入dirty,步骤S4是修改文件长度,然后就完成了数据写入。如果步骤S2判断文件没有结束,就执行步骤S5取得空闲的Page,步骤S6表示接受主机的数据到空闲的Page并标记为dirty,如果是普通的写命令,只要在缓冲区的链表里找到空闲的Page,将数据接受到空闲的Page中,并把Page设置为dirty标记,步骤S7判断链表里的标记为dirty的Page是否超过了阀值,如果超过的话就执行步骤S8,把标记为dirty的Page写入文件系统,步骤S9是写入完成后,就将dirty标记的Page置为clean标记,可以再次使用。本专利技术的方法设计并实现了 SCSI Target模式的I/O缓存方法,使得主机写来的随机数据在缓存中累计,到一定的block对齐长度时,再调用内核Direct I/O接口,写入数据。使得整个数据流程不需要使用CPU参与拷贝,极大地提高了系统的性能和效率。对于FC(光线卡)Target接口也同样适 用。本文档来自技高网...

【技术保护点】

【技术特征摘要】
1.一种Linux系统的SCSI Target模式的数据I/O写入方法,适用于Linux系统,所述Linux系统使用Target模式驱动SCSI磁盘设备,其特征在于包括 提供一个在Target模式驱动和文件系统之间的缓冲区,所述的缓冲区是由每个长度为4KB的Page组成的双向循环链表,链表长度范围是1024到2048,所述的缓冲区内还设有偏移指针,数据首先被写入缓冲区,当缓冲区内的新数据累积到4KB的长度的整数倍的时候,再调用文件系统的Direct I/O接口...

【专利技术属性】
技术研发人员:张庆敏张衡胡刚谢海威
申请(专利权)人:无锡众志和达存储技术有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1