十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營(yíng)維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
二、預(yù)習(xí)下
創(chuàng)新互聯(lián)建站專注于鄲城網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠(chéng)為您提供鄲城營(yíng)銷型網(wǎng)站建設(shè),鄲城網(wǎng)站制作、鄲城網(wǎng)頁(yè)設(shè)計(jì)、鄲城網(wǎng)站官網(wǎng)定制、成都微信小程序服務(wù),打造鄲城網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供鄲城網(wǎng)站排名全網(wǎng)營(yíng)銷落地服務(wù)。
由于我們?cè)谏弦黄恼轮校枋隽吮容^高層的I/O stack的結(jié)構(gòu),接下來我們來講講底層的結(jié)構(gòu)。
這一節(jié),可能絕大多數(shù)的人在實(shí)際的工作中,并不是涉及到開發(fā),但也是linux I/O中非常重要的。
那我們就一一列舉,來講講它們都是什么。
1、Block Layer,在很多年前,我在看SCSI子系統(tǒng)的時(shí)候,我那時(shí)候就不是太確立Block Layer到底是什么,因?yàn)檫@其中要理解block device、BIO和一系列的request_fn。所以理解block layer應(yīng)該不是什么簡(jiǎn)單的事情,因?yàn)樗且粋€(gè)很抽象的概念,更不能一言能概括,但是我們能夠從圖上看出一點(diǎn),就是經(jīng)過block layer的多個(gè)bio,最終都變成了有序的request,那么我們應(yīng)該能看出來它可以排序合并bio,并且能夠make request from bios。
2、I/O scheduler和blkmq,因?yàn)榇疟P訪問數(shù)據(jù)尋道和旋轉(zhuǎn)延遲所導(dǎo)致出磁盤訪問的一個(gè)特性,linux為磁盤設(shè)計(jì)了特殊的map bios to requests的方式,就叫做I/O scheduler,從這個(gè)function的結(jié)構(gòu)來看,一個(gè)request從init到build之間的時(shí)差是用來map bios的,這個(gè)時(shí)差對(duì)于I/O scheduler是不可控的,linux i/o stack為此提供了一個(gè)專屬的方法,被叫做blk_plug和blk_unplug,即從上層來派發(fā)bios的時(shí)候,上層是知道某些bios是需要并且可以做合并和排序的,那么就需要上層來plug這個(gè)bios seq,由unplug來觸發(fā)build request,這個(gè)過程通常需要block device之間或和LIO/VFS配合實(shí)現(xiàn)。
blkmq:是linux為那些不需要做I/O scheduler的設(shè)備所設(shè)計(jì)的新的隊(duì)列模型,具有高并發(fā)的特性,適用于新型的nvme ssd等具有高h(yuǎn)ardware queue depth的設(shè)備,由于幾乎不再依賴blk_plug等增加latency的處理流程,這種I/O隊(duì)列模型的性能會(huì)非常高。
3、scsi mid layer:scsi子系統(tǒng)一直是支持存儲(chǔ)協(xié)議的big子系統(tǒng),就連其內(nèi)部也分為high layer、mid layer和low layer。這三層的特點(diǎn)就好像殖民地時(shí)期的殖民地結(jié)構(gòu),其中high layer扮演者那些殖民者,他們對(duì)當(dāng)?shù)夭⒉皇煜?,需要在?dāng)?shù)亟⒖苷?quán),來保證其統(tǒng)治地位,也就是scsi子系統(tǒng)中的high layer用來實(shí)現(xiàn)的scsi disk,scsi tape,scsi cdrom,這種scsi高級(jí)特性的設(shè)備描述,他們是不管當(dāng)?shù)厥鞘裁辞闆r,用同一的方式來發(fā)布scsi cmd。為了保證scsi high layer的命令得以執(zhí)行,那么scsi subsystem中的傀儡政權(quán),也就是scsi結(jié)構(gòu)網(wǎng)絡(luò)層,scsi mid layer構(gòu)建了一個(gè)等級(jí)森嚴(yán)的拓?fù)浞绞剑篽ost:channel:target:lun,而且必須要所有的low layer都必須遵循這種拓?fù)浞绞?,雖然說這種方式很殘忍,甚至來說在一個(gè)host被注冊(cè)的時(shí)候,它直接能和low layer通信的方式也顯得很露骨(比如:slave_configure等),但是還有事一批的喜歡當(dāng)slave的公司做出了無數(shù)的scsi low layer的產(chǎn)品,這其中比較著名的是:mpt3sas(lsi),pm8001(pmc),qla2xxx(qlogic)等吧,這些商品一般就是大家比較熟知的sas hba,raid card,fc hba等,所以沒有諂媚就沒有暴力,他們記住做硬件產(chǎn)品一定要抱個(gè)和scsi這樣粗的大腿,做出來就不愁賣。但是這些年scsi也沒有那么好過了,因?yàn)檫@充滿等級(jí)森嚴(yán)的scsi mid layer的存儲(chǔ)I/O,必須要求所有的scsi deivce去dispatch cmd都必須是一個(gè)接口到low layer,導(dǎo)致了單個(gè)scsi host沒辦法發(fā)揮新型介質(zhì)nand flash的所有性能,讓新的協(xié)議nvme大行其道,好比共產(chǎn)主義給殖民地同志們帶來的希望,大家紛紛要突破scsi host的牢籠,那么scsi的命運(yùn)如何,未來到底會(huì)不會(huì)被nvme所取代,我們拭目以待。
【本文只在51cto博客作者 “底層存儲(chǔ)技術(shù)” https://blog.51cto.com/12580077 個(gè)人發(fā)布,公眾號(hào)發(fā)布:存儲(chǔ)之谷】,如需轉(zhuǎn)載,請(qǐng)于本人聯(lián)系,謝謝。