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