如何讓linux服務(wù)器磁盤(pán)io性能翻倍
假設一個(gè)網(wǎng)頁(yè)上有10張圖片,這10張圖片雖然存在10個(gè)文件中,但其實(shí)是幾乎同時(shí)被用戶(hù)訪(fǎng)問(wèn)的。
如果能讓這10張圖片存儲在連續的磁盤(pán)空間中,就能把io性能提升10倍(一次尋道就可以讀10個(gè)文件了)
傳統的做法是通過(guò)拼接圖片來(lái)將這10張圖片合并到一張大圖中,再由前端將大圖切成10張小圖。
有了e4defrag后,可以將需連續訪(fǎng)問(wèn)的文件放在同一個(gè)文件夾下,再定期使用e4defrag進(jìn)行磁盤(pán)整理。
實(shí)現自己的文件系統
我們曾經(jīng)寫(xiě)過(guò)一款專(zhuān)用文件系統,針對代理服務(wù)器,將磁盤(pán)io性能提升到3-5倍。
在大部分服務(wù)器上,不需要支持“修改文件”這個(gè)功能。一旦文件創(chuàng )建好,就不能再做修改操作,只支持讀取和刪除。在這個(gè)前提下,我們可以消滅所有文件碎片,把磁盤(pán)io效率提升到理論極限。
在我們服務(wù)器中,每個(gè)文件的緩沖區最大值設定為16MB
小于16MB的文件,在服務(wù)器準備好整個(gè)文件內容后,再創(chuàng )建文件。創(chuàng )建文件時(shí)服務(wù)器給出文件大小,文件系統保證為文件分配連續的空間。
讀寫(xiě)文件時(shí),服務(wù)器一次性讀寫(xiě)整個(gè)文件。
大于16MB的文件,服務(wù)器創(chuàng )建文件時(shí)告訴文件系統分配16MB磁盤(pán)空間。后續每次擴大文件大小時(shí),要么是16MB,要么就是文件終結。不允許在文件未終結的情況下分配非16MB的空間。
讀寫(xiě)文件時(shí),每次讀寫(xiě)16MB或者直到文件末尾。
在我們的文件系統中,小文件完全無(wú)碎片,一次尋道就能搞定一個(gè)文件,達到了理論上最佳的性能。
大文件每次磁頭定位讀寫(xiě)16MB,性能沒(méi)有達到100%,但已經(jīng)相當好了。
有一個(gè)公式可以衡量磁盤(pán)io的效率:
磁盤(pán)利用率 = 傳輸時(shí)間/(平均尋道時(shí)間+傳輸時(shí)間)
對我們當時(shí)采用的磁盤(pán)來(lái)說(shuō)(1T 7200轉sata),16MB連續讀寫(xiě)已經(jīng)可以達到98%以上的磁盤(pán)利用率。
評論