熱門(mén)關(guān)鍵詞: 聯(lián)樂(lè) 宇瞻工業(yè)級(jí)TF卡 工業(yè)閃存卡品牌 固態(tài)硬盤(pán)品牌
線程指的是同時(shí)有多少個(gè)讀或?qū)懭蝿?wù)在并行執(zhí)行,一般來(lái)說(shuō),CPU里面的一個(gè)核心同一時(shí)間只能運(yùn)行一個(gè)線程。如果只有一個(gè)核心,要想運(yùn)行多線程,只能使用時(shí)間切片。每個(gè)線程跑一段時(shí)間片,所有線程輪流使用這個(gè)核心。Linux使用Jiffies 來(lái)代表一秒鐘被劃分過(guò)了多少個(gè)時(shí)間片,一般來(lái)說(shuō)Jiffies是1000或100,所以時(shí)間片就是毫秒或10毫秒。
一般電腦發(fā)送一個(gè)讀寫(xiě)命令到SSD只需要幾微秒。但是SSD要花幾百微秒甚至幾毫秒才能執(zhí)行完這個(gè)命令。如果發(fā)一個(gè)讀寫(xiě)命令,然后線程一直休眠,等待結(jié)果回來(lái)才喚醒處結(jié)果,這叫作同步模式。可以想象,同步模式是很浪費(fèi)SSD性能的,因?yàn)镾SD 里面有很多并行單元,比如一般企業(yè)級(jí)SSD內(nèi)部有8~16個(gè)數(shù)據(jù)通道,每個(gè)通道內(nèi)部有4~16個(gè)行邏輯單元(LUN,Plane),所以同一時(shí)間可以執(zhí)行32~256個(gè)讀寫(xiě)命令。同步模式就味著,只有其中一個(gè)并行單元在工作,暴殄天物。
為了提高并行性,大部分情況下SSD讀寫(xiě)采用的是異步模式。就是用幾微秒發(fā)送命令,發(fā)完線程不會(huì)傻傻地在那里等,而是繼續(xù)發(fā)后面的命令。如果前面的命令執(zhí)行完了,SSD通知會(huì)通過(guò)中斷或者輪詢等方式告訴CPU,由CPU來(lái)調(diào)用該命令的回調(diào)函數(shù)來(lái)處理結(jié)果。這樣的好處是,SSD里面幾十上百個(gè)并行單元都能分到活干,效率暴增。
不過(guò),在異步模式下,CPU不能一直無(wú)限地發(fā)命令到SSD。比如SSD 執(zhí)行讀寫(xiě)如果發(fā)生了卡頓。那有可能系統(tǒng)會(huì)一直不停地發(fā)命令。幾千個(gè),甚至幾萬(wàn)個(gè),這樣一方面 SSD扛住,另一方面這么多命令會(huì)很占內(nèi)存,系統(tǒng)也要掛掉了。這樣,就帶來(lái)一個(gè)參數(shù)叫作隊(duì)列深度。舉個(gè)例子,隊(duì)列深度64就是說(shuō),系統(tǒng)發(fā)的命令都發(fā)到一個(gè)大小為64的隊(duì)列,如果填滿了就不能再發(fā)。等前面的讀寫(xiě)命令執(zhí)行完了,隊(duì)列里面空出位置來(lái),才能繼續(xù)填命令。
一個(gè) SSD 或者文件有大小,測(cè)試讀寫(xiě)的時(shí)候設(shè)置 Offset 就可以從某個(gè)偏移地址開(kāi)始測(cè)試。比如從 offset=4G 的偏移地址開(kāi)始。
Linux 讀寫(xiě)SSD 等塊設(shè)備使用的是BIO(Block-IO),這是個(gè)數(shù)據(jù)結(jié)構(gòu),包含了數(shù)據(jù)塊邏輯地址 LBA,數(shù)據(jù)大小和內(nèi)存地址等。一般Linux系統(tǒng)是自帶FIO的,如果沒(méi)有或者版本太老,要自己從https://github.com/axboe/fio下載安裝,F(xiàn)IO功能非常強(qiáng)大,可以通過(guò)man來(lái)查看每一個(gè)功能,也有網(wǎng)頁(yè)版。
咨詢熱線
400-888-2720