欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種Linux系統(tǒng)的SCSITarget模式的數(shù)據(jù)I/O寫(xiě)入方法

文檔序號(hào):6368877閱讀:283來(lái)源:國(guó)知局
專(zhuān)利名稱(chēng):一種Linux系統(tǒng)的SCSI Target模式的數(shù)據(jù)I/O寫(xiě)入方法
技術(shù)領(lǐng)域
本發(fā)明涉及一種磁盤(pán)數(shù)據(jù)讀寫(xiě)方法,特別是一種Linux文件系統(tǒng)下的使用SCSI存儲(chǔ)設(shè)備的數(shù)據(jù)寫(xiě)入方法。
背景技術(shù)
傳統(tǒng)的Linux文件系統(tǒng)的標(biāo)準(zhǔn)I/O接口是基于數(shù)據(jù)拷貝操作的,即I/O操作會(huì)導(dǎo)致數(shù)據(jù)在操作系統(tǒng)的內(nèi)核地址空間的緩沖區(qū)和應(yīng)用程序用戶(hù)層地址空間定義的緩沖區(qū)之間進(jìn)行拷貝。在這種機(jī)制中,磁盤(pán)驅(qū)動(dòng)采用了 DMA方式,可以將數(shù)據(jù)直接從磁盤(pán)讀到頁(yè)緩存中,或者將數(shù)據(jù)從頁(yè)緩存直接寫(xiě)回到磁盤(pán)上,而不能直接在應(yīng)用程序地址空間和磁盤(pán)之間進(jìn)行數(shù)據(jù)傳輸,這樣數(shù)據(jù)在傳輸過(guò)程中需要在應(yīng)用程序地址空間和頁(yè)緩存之間進(jìn)行多次數(shù)據(jù)拷貝操作,最大的好處就是可以減少磁盤(pán)I/O的操作,因?yàn)槿绻?qǐng)求的數(shù)據(jù)已經(jīng)存放 在操作系統(tǒng)的高速緩沖存儲(chǔ)器中,那么就不需要再進(jìn)行實(shí)際的物理磁盤(pán)I/O操作。但是數(shù)據(jù)傳輸過(guò)程中的數(shù)據(jù)拷貝操作卻導(dǎo)致了極大的CPU開(kāi)銷(xiāo),從而限制了系統(tǒng)進(jìn)行數(shù)據(jù)傳輸?shù)男阅?。這個(gè)方法實(shí)現(xiàn)了內(nèi)核態(tài)的Direct I/O方法,不僅避免了內(nèi)存的拷貝,降低了 CPU的開(kāi)銷(xiāo),而且提高了系統(tǒng)的I/o性能。Direct I/O Target模式的接口,為主機(jī)提供虛擬SCSI設(shè)備,在傳統(tǒng)的Target驅(qū)動(dòng)中,對(duì)主機(jī)發(fā)出的I/O的請(qǐng)求,直接調(diào)用標(biāo)準(zhǔn)的文件系統(tǒng)接口,讀寫(xiě)數(shù)據(jù),導(dǎo)致整個(gè)Direct I/O Target接口的I/O性能無(wú)法得到提高。原因在于主機(jī)的每次I/O請(qǐng)求的數(shù)據(jù)大小是隨機(jī)的,而Direct I/O則要求每次數(shù)據(jù)必須按照文件系統(tǒng)block對(duì)齊,這樣就無(wú)法利用內(nèi)核態(tài)Direct I/O帶來(lái)的優(yōu)點(diǎn)。而DCR作為一種嵌入式系統(tǒng),性能則受到限制。

發(fā)明內(nèi)容
本發(fā)明的目的是發(fā)明一種高效的Linux系統(tǒng)的Target模式的數(shù)據(jù)I/O方法。本發(fā)明適用于Linux系統(tǒng),所述Linux系統(tǒng)使用Target模式驅(qū)動(dòng)SCSI磁盤(pán)設(shè)備,其特征在于提供一個(gè)在Target模式驅(qū)動(dòng)和文件系統(tǒng)之間緩沖區(qū),所述緩沖區(qū)由每個(gè)4KB長(zhǎng)的Page組成的雙向循環(huán)鏈表,鏈表長(zhǎng)度的值是1024到2048,所述的緩沖區(qū)內(nèi)還設(shè)有偏移指針,數(shù)據(jù)首先被寫(xiě)入緩沖區(qū),當(dāng)緩沖區(qū)內(nèi)的新數(shù)據(jù)累積到4KB的長(zhǎng)度的整數(shù)倍的時(shí)候,調(diào)用文件系統(tǒng)的Direct I/O接口,把數(shù)據(jù)寫(xiě)入磁盤(pán)。所述的新數(shù)據(jù)寫(xiě)入緩沖區(qū)的時(shí)候,最后一個(gè)寫(xiě)長(zhǎng)度如果無(wú)法對(duì)齊,就按照對(duì)齊的長(zhǎng)度寫(xiě)入,再調(diào)用truncate文件系統(tǒng)內(nèi)核接口,把數(shù)據(jù)長(zhǎng)度調(diào)整成正確的值。每個(gè)鏈表中包括多個(gè)Page,鏈表順序循環(huán)使用,在每次flush緩沖區(qū)的時(shí)候,把填滿的Page寫(xiě)入文件系統(tǒng)。本發(fā)明的數(shù)據(jù)寫(xiě)入方法,通過(guò)I/O緩沖區(qū)的設(shè)置和規(guī)則設(shè)計(jì),實(shí)現(xiàn)了 SCSI I/O數(shù)據(jù)塊的對(duì)齊,結(jié)合文件系統(tǒng)的Direct 1/0,提高了系統(tǒng)的性能。


圖I模塊層次模型 圖2多個(gè)緩沖區(qū)填充的結(jié)構(gòu)關(guān)系 圖3緩沖區(qū)的流程圖。
具體實(shí)施例方式以下將參照附圖對(duì)本發(fā)明的實(shí)施例進(jìn)行描述
如圖I所示,本發(fā)明應(yīng)用于Linux系統(tǒng),這個(gè)系統(tǒng)中使用Target模式驅(qū)動(dòng)SCSI磁盤(pán)設(shè)備。整個(gè)系統(tǒng)模塊層次的模型結(jié)構(gòu)有4個(gè)層次,包括Targe t模塊100、緩沖區(qū)速緩存CachelOl、文件系統(tǒng) Filesysteml02、磁盤(pán) Diskl03。所述的Target模塊100是最終的數(shù)據(jù)存儲(chǔ)介質(zhì),數(shù)據(jù)先通過(guò)Target模塊100進(jìn)行處理,然后通過(guò)緩沖區(qū)緩存CachelOl,經(jīng)文件系統(tǒng)FileSystem再寫(xiě)入磁盤(pán)。整個(gè)流程中具有一個(gè)數(shù)據(jù)處理方法,這個(gè)方法就是一個(gè)數(shù)據(jù)I/O方法,系統(tǒng)效率由此體現(xiàn)。所述的Cache模塊101是用來(lái)存放數(shù)據(jù)的緩存和對(duì)齊,有提高性能的作用。所述的Filesystem模塊102是管理磁盤(pán)上的文件,對(duì)文件進(jìn)行讀寫(xiě)、增加、刪除等操作。所述的Disk模塊103是用來(lái)存放數(shù)據(jù)的磁盤(pán)。如圖2所示,本發(fā)明的方法是提供一個(gè)在Target模式驅(qū)動(dòng)和文件系統(tǒng)之間緩沖區(qū),所述緩沖區(qū)由每個(gè)4KB長(zhǎng)的Page組成的雙向循環(huán)鏈表,鏈表長(zhǎng)度的值為1024到2048,所述的緩沖區(qū)內(nèi)還設(shè)有偏移指針,數(shù)據(jù)首先被寫(xiě)入緩沖區(qū),當(dāng)緩沖區(qū)內(nèi)的新數(shù)據(jù)累積到4KB的長(zhǎng)度的整數(shù)倍的時(shí)候,調(diào)用文件系統(tǒng)的D ir ec t I /O接口,把數(shù)據(jù)寫(xiě)入磁盤(pán)。如圖2所示的緩沖區(qū)結(jié)構(gòu),包括四個(gè)Page多個(gè)緩沖區(qū)的Page可以循環(huán)順序使用,設(shè)置一個(gè)填充標(biāo)記dirty和一個(gè)清空標(biāo)記clean,當(dāng)數(shù)據(jù)填滿一個(gè)Page的時(shí)候,就將這個(gè)Page改為dirty標(biāo)記,在這個(gè)示意圖中,步驟104的Pagel和步驟105的Page2已經(jīng)被寫(xiě)滿,也就是標(biāo)記了 dirty,步驟106的Page3只被填滿了一部分,然后下一個(gè)寫(xiě)命令的數(shù)據(jù)就可以繼續(xù)寫(xiě)入;步驟107是完全空閑的Page4,可以被未來(lái)的寫(xiě)命令使用。在每次Flush緩沖區(qū)的時(shí)候,將標(biāo)記為dirty的Page的數(shù)據(jù)寫(xiě)入磁盤(pán)。等操作完成以后,該P(yáng)age再次被標(biāo)識(shí)為clean進(jìn)行下一次的使用。如圖3所示的緩沖區(qū)使用流程圖,步驟SI收到主機(jī)寫(xiě)命令以后,步驟S2判斷是否為文件結(jié)束標(biāo)志,如果是的話就執(zhí)行步驟S3寫(xiě)入dirty,步驟S4是修改文件長(zhǎng)度,然后就完成了數(shù)據(jù)寫(xiě)入。如果步驟S2判斷文件沒(méi)有結(jié)束,就執(zhí)行步驟S5取得空閑的Page,步驟S6表示接受主機(jī)的數(shù)據(jù)到空閑的Page并標(biāo)記為dirty,如果是普通的寫(xiě)命令,只要在緩沖區(qū)的鏈表里找到空閑的Page,將數(shù)據(jù)接受到空閑的Page中,并把Page設(shè)置為dirty標(biāo)記,步驟S7判斷鏈表里的標(biāo)記為dirty的Page是否超過(guò)了閥值,如果超過(guò)的話就執(zhí)行步驟S8,把標(biāo)記為dirty的Page寫(xiě)入文件系統(tǒng),步驟S9是寫(xiě)入完成后,就將dirty標(biāo)記的Page置為clean標(biāo)記,可以再次使用。本發(fā)明的方法設(shè)計(jì)并實(shí)現(xiàn)了 SCSI Target模式的I/O緩存方法,使得主機(jī)寫(xiě)來(lái)的隨機(jī)數(shù)據(jù)在緩存中累計(jì),到一定的block對(duì)齊長(zhǎng)度時(shí),再調(diào)用內(nèi)核Direct I/O接口,寫(xiě)入數(shù)據(jù)。使得整個(gè)數(shù)據(jù)流程不需要使用CPU參與拷貝,極大地提高了系統(tǒng)的性能和效率。對(duì)于FC(光線卡)Target接口也同樣適 用。
權(quán)利要求
1.一種Linux系統(tǒng)的SCSI Target模式的數(shù)據(jù)I/O寫(xiě)入方法,適用于Linux系統(tǒng),所述Linux系統(tǒng)使用Target模式驅(qū)動(dòng)SCSI磁盤(pán)設(shè)備,其特征在于包括 提供一個(gè)在Target模式驅(qū)動(dòng)和文件系統(tǒng)之間的緩沖區(qū),所述的緩沖區(qū)是由每個(gè)長(zhǎng)度為4KB的Page組成的雙向循環(huán)鏈表,鏈表長(zhǎng)度范圍是1024到2048,所述的緩沖區(qū)內(nèi)還設(shè)有偏移指針,數(shù)據(jù)首先被寫(xiě)入緩沖區(qū),當(dāng)緩沖區(qū)內(nèi)的新數(shù)據(jù)累積到4KB的長(zhǎng)度的整數(shù)倍的時(shí)候,再調(diào)用文件系統(tǒng)的Direct I/O接口,把數(shù)據(jù)寫(xiě)入磁盤(pán)。
2.根據(jù)權(quán)利要求I所述的一種Linux系統(tǒng)的SCSITarget模式的數(shù)據(jù)I/O寫(xiě)入方法,其特征在于所述的新數(shù)據(jù)寫(xiě)入緩沖區(qū)的時(shí)候,如果最后一個(gè)寫(xiě)長(zhǎng)度無(wú)法對(duì)齊,就按照對(duì)齊的長(zhǎng)度寫(xiě)入,再調(diào)用truncate模塊,調(diào)整數(shù)據(jù)長(zhǎng)度到正確的值。
3.根據(jù)權(quán)利要求I所述的一種Linux系統(tǒng)的SCSITarget模式的數(shù)據(jù)I/O寫(xiě)入方法,其特征在于所述的每個(gè)鏈表中包括多個(gè)Page,鏈表順序可以循環(huán)使用,在每次flush緩沖區(qū)的時(shí)候,把填滿的Page寫(xiě)入文件系統(tǒng)。
全文摘要
本發(fā)明描述了在Linux系統(tǒng)下使用SCSI存儲(chǔ)設(shè)備的數(shù)據(jù)I/O寫(xiě)入方法。該方法提供了一個(gè)在Target模式驅(qū)動(dòng)和文件系統(tǒng)之間的緩沖區(qū),緩沖區(qū)是由每個(gè)長(zhǎng)度為4KB的Page組成的雙向循環(huán)鏈表,鏈表的長(zhǎng)度范圍為1024~2048,緩沖區(qū)內(nèi)設(shè)有偏移指針,數(shù)據(jù)首先被寫(xiě)入緩沖區(qū),當(dāng)緩沖區(qū)內(nèi)的新數(shù)據(jù)達(dá)到規(guī)定長(zhǎng)度的整數(shù)倍的時(shí)候,就調(diào)用文件系統(tǒng)的DirectI/O接口,直接把數(shù)據(jù)寫(xiě)入磁盤(pán)。當(dāng)新數(shù)據(jù)寫(xiě)入緩沖區(qū)的時(shí)候,如果最后一個(gè)寫(xiě)長(zhǎng)度無(wú)法對(duì)齊,就按照對(duì)齊的長(zhǎng)度寫(xiě)入,再調(diào)用truncate文件系統(tǒng)內(nèi)核接口,調(diào)整數(shù)據(jù)的長(zhǎng)度到正確的值。本發(fā)明通過(guò)I/O緩沖區(qū)的設(shè)置和規(guī)則設(shè)計(jì),實(shí)現(xiàn)了SCSI中I/O數(shù)據(jù)塊的對(duì)齊,結(jié)合了文件系統(tǒng)的DirectI/O,從而提高了系統(tǒng)的性能。
文檔編號(hào)G06F3/06GK102681795SQ201210131288
公開(kāi)日2012年9月19日 申請(qǐng)日期2012年5月2日 優(yōu)先權(quán)日2012年5月2日
發(fā)明者張慶敏, 張衡, 胡剛, 謝海威 申請(qǐng)人:無(wú)錫眾志和達(dá)存儲(chǔ)技術(shù)有限公司
網(wǎng)友詢(xún)問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
贺兰县| 政和县| 门源| 新源县| 临颍县| 新竹县| 梅州市| 永新县| 南郑县| 紫阳县| 湘乡市| 宁南县| 赤城县| 宁强县| 丽江市| 汉阴县| 冕宁县| 紫阳县| 冷水江市| 内江市| 敖汉旗| 乐清市| 五台县| 清苑县| 九龙城区| 湘潭市| 巩义市| 浦东新区| 满洲里市| 沈阳市| 太和县| 康平县| 留坝县| 望奎县| 莆田市| 桃园县| 巨鹿县| 沐川县| 六枝特区| 和龙市| 阳朔县|