1、如何讓linux伺服器磁碟io性能翻倍
如何讓CentOS伺服器磁碟io性能翻倍
這一期我們來看一下有哪些辦法可以減少linux下的文件碎片。主要是針對磁碟長期滿負荷運轉的使用場景(例如http代理伺服器);另外有一個小技巧,針對互聯網圖片伺服器,可以將io性能提升數倍。如果為伺服器訂制一個專用文件系統,可以完全解決文件碎片的問題,將磁碟io的性能發揮至極限。對於我們的代理伺服器,相當於把io性能提升到3-5倍。
在現有文件系統下進行優化linux內核和各個文件系統採用了幾個優化方案來提升磁碟訪問速度。但這些優化方案需要在我們的伺服器設計中進行配合才能得到充分發揮。
文件系統緩存linux內核會將大部分空閑內存交給虛擬文件系統,來作為文件緩存,叫做page cache。在內存不足時,這部分內存會採用lru演算法進行淘汰。通過free命令查看內存,顯示為cached的部分就是文件緩存了。
如果能找到當前使用場景下,文件被訪問的統計特徵,針對性的寫一個淘汰演算法,可以大幅提升文件緩存的命中率。對於http正向代理來說,一個好的淘汰演算法可以用1GB內存達到lru演算法100GB內存的緩存效果。如果不打算寫一個新的淘汰演算法,一般不需要在應用層再搭一個文件cache程序來做緩存。
2、為什麼伺服器磁碟io會這么慢
電腦FLASH插件問題,建議升級或者重新安裝。
3、磁碟IO 每秒多少位元組 網路IO 每秒
你說這個問題,提得不夠准確。磁碟是指什麼,IO又是什麼。別人難以把握你的問題精華,難以處理你的提問。我這樣認為:
磁碟現在大多是指硬碟,以前有1.44MB軟盤,亦可講為磁碟;每秒多少次IO這種提法是錯誤的。因為磁碟,最主要是指硬碟參數,它有它的參數標準的,好像硬碟轉速、硬碟介面是IDE口的還是SATA口、是機械或固態硬碟的,是容量大的小,還是容量小的,現在單個硬碟指機械硬碟已經去3TB,容量是非常大。如果將北京最的圖書館的全部藏書文字轉為電腦的文字,它所佔的容量大概是5-10GB,當是10GB,你說3000GB可以容量多少北京圖書館藏書,大約是300個。你說大不大?
其實你提的問題,應該是說硬碟的轉速是怎樣的?我可以告訴你啦。比較早期的硬碟,以及現在大多的硬碟是機械硬碟,有碟片的,是可以轉動的。至於磁碟碟片轉動的講法,是以每分鍾多少轉來計算的。早期的硬碟轉速有5400轉\分,後來的硬碟轉速有7200轉\分,如果是伺服器的硬碟轉速可以達10000轉\分。現在因為有些硬碟生產面向固態硬碟,它是有大量的集成IC,沒有碟片,亦是沒有轉速的,但它的運行速度比較快,讀取數據、寫入數據相當的快,缺點是價錢相當的昂貴。
4、如何提高Linux伺服器磁碟io性能
您好,很高興為您解答。
在現有文件系統下進行優化:
linux內核和各個文件系統採用了幾個優化方案來提升磁碟訪問速度。但這些優化方案需要在我們的伺服器設計中進行配合才能得到充分發揮。
文件系統緩存
linux內核會將大部分空閑內存交給虛擬文件系統,來作為文件緩存,叫做page cache。在內存不足時,這部分內存會採用lru演算法進行淘汰。通過free命令查看內存,顯示為cached的部分就是文件緩存了。
如何針對性優化:
lru並不是一個優秀淘汰演算法,lru最大的優勢是普適性好,在各種使用場景下都能起到一定的效果。如果能找到當前使用場景下,文件被訪問的統計特徵,針 對性的寫一個淘汰演算法,可以大幅提升文件緩存的命中率。對於http正向代理來說,一個好的淘汰演算法可以用1GB內存達到lru演算法100GB內存的緩存 效果。如果不打算寫一個新的淘汰演算法,一般不需要在應用層再搭一個文件cache程序來做緩存。
最小分配:
當文件擴大,需要分配磁碟空間時,大部分文件系統不會僅僅只分配當前需要的磁碟空間,而是會多分配一些磁碟空間。這樣下次文件擴大時就可以使用已經分配好的空間,而不會頻繁的去分配新空間。
例如ext3下,每次分配磁碟空間時,最小是分配8KB。
最小分配的副作用是會浪費一些磁碟空間(分配了但是又沒有使用)
如何針對性優化:
我們在reiserfs下將最小分配空間從8KB改大到128K後提升了30%的磁碟io性能。如果當前使用場景下小文件很多,把預分配改大就會浪費很多 磁碟空間,所以這個數值要根據當前使用場景來設定。似乎要直接改源代碼才能生效,不太記得了,09年的時候改的,有興趣的同學自己google吧。
io訪問調度:
在同時有多個io訪問時,linux內核可以對這些io訪問按LBA進行合並和排序,這樣磁頭在移動時,可以「順便」讀出移動過程中的數據。
SATA等磁碟甚至在磁碟中內置了io排序來進一步提升性能,一般需要在主板中進行配置才能啟動磁碟內置io排序。linux的io排序是根據LBA進行的,但LBA是一個一維線性地址,無法完全反應出二維的圓形磁碟,所以磁碟的內置io排序能達到更好的效果。
如何針對性優化:
io訪問調度能大幅提升io性能,前提是應用層同時發起了足夠的io訪問供linux去調度。
怎樣才能從應用層同時向內核發起多個io訪問呢?
方案一是用aio_read非同步發起多個文件讀寫請求。
方案二是使用磁碟線程池同時發起多個文件讀寫請求。
對我們的http正向代理來說,採用16個線程讀寫磁碟可以將性能提升到2.5倍左右。具體開多少個線程/進程,可以根據具體使用場景來決定。
小提示:
將文件句柄設置為非阻塞時,進程還是會睡眠等待磁碟io,非阻塞對於文件讀寫是不生效的。在正常情況下,讀文件只會引入十幾毫秒睡眠,所以不太明顯;而在磁碟io極大時,讀文件會引起十秒以上的進程睡眠。
預讀取:
linux內核可以預測我們「將來的讀請求」並提前將數據讀取出來。通過預讀取可以減少讀io的次數,並且減小讀請求的延時。
如何針對性優化:
預讀取的預測准確率是有限的,與其依賴預讀取,不如我們直接開一個較大的緩沖區,一次性將文件讀出來再慢慢處理;盡量不要開一個較小的緩沖區,循環讀文件/處理文件。
雖然說「預讀取」和「延遲分配」能起到類似的作用,但是我們自己擴大讀寫緩沖區效果要更好。
延遲分配:
當文件擴大,需要分配磁碟空間時,可以不立即進行分配,而是暫存在內存中,將多次分配磁碟空間的請求聚合在一起後,再進行一次性分配。
延遲分配的目的也是減少分配次數,從而減少文件不連續。
延遲分配的副作用有幾個:
1、如果應用程序每次寫數據後都通過fsync等介面進行強制刷新,延遲分配將不起作用
2、延遲分配有可能間歇性引入一個較大的磁碟IO延時(因為要一次性向磁碟寫入較多數據)
只有少數新文件系統支持這個特性
如何針對性優化:
如果不是對安全性(是否允許丟失)要求極高的數據,可以直接在應用程序里緩存起來,積累到一定大小再寫入,效果比文件系統的延遲分配更好。如果對安全性要求極高,建議經常用fsync強制刷新。
在線磁碟碎片整理:
Ext4提供了一款碎片整理工具,叫e4defrag,主要包含三個功能:
1、讓每個文件連續存儲
2、盡量讓每個目錄下的文件連續存儲
3、通過整理空閑磁碟空間,讓接下來的分配更不容易產生碎片
如何針對性優化:
「讓每個目錄下的文件連續存儲」是一個極有價值的功能。
傳統的做法是通過拼接圖片來將這10張圖片合並到一張大圖中,再由前端將大圖切成10張小圖。
有了e4defrag後,可以將需連續訪問的文件放在同一個文件夾下,再定期使用e4defrag進行磁碟整理。
實現自己的文件系統:
在大部分伺服器上,不需要支持「修改文件」這個功能。一旦文件創建好,就不能再做修改操作,只支持讀取和刪除。在這個前提下,我們可以消滅所有文件碎片,把磁碟io效率提升到理論極限。
有一個公式可以衡量磁碟io的效率:
磁碟利用率 = 傳輸時間/(平均尋道時間+傳輸時間)
如若滿意,請點擊回答右側【採納答案】,如若還有問題,請點擊【追問】
~ O(∩_∩)O~
5、伺服器磁碟io與磁碟容量有關系嗎
無關,IO是輸入與輸出的縮寫,一般指速度,容量是儲存空間。
6、怎麼去測試物理伺服器和虛擬機的磁碟I/O的讀寫性能。
一般的磁碟檢查工具就可以了,像 HD Tune 之類的,有的優化軟體也集成了硬碟檢測的組件,可以做內讀寫測試的,比如「容軟媒魔方」集成的「磁碟大師」組件等等。
如果還不清楚,就直接百度搜索「磁碟性能測試」吧,會有你想要的。
7、如何讓CentOS伺服器磁碟io性能翻倍centos
如何讓CentOS伺服器磁碟io性能翻倍
這一期我們來看一下有哪些辦法可以減少linux下的文件碎片。主要是針對磁碟長期滿負荷運轉的使用場景(例如http代理伺服器);另外有一個小技巧,針對互聯網圖片伺服器,可以將io性能提升數倍。如果為伺服器訂制一個專用文件系統,可以完全解決文件碎片的問題,將磁碟io的性能發揮至極限。對於我們的代理伺服器,相當於把io性能提升到3-5倍。
在現有文件系統下進行優化linux內核和各個文件系統採用了幾個優化方案來提升磁碟訪問速度。但這些優化方案需要在我們的伺服器設計中進行配合才能得到充分發揮。
文件系統緩存linux內核會將大部分空閑內存交給虛擬文件系統,來作為文件緩存,叫做page cache。在內存不足時,這部分內存會採用lru演算法進行淘汰。通過free命令查看內存,顯示為cached的部分就是文件緩存了。
如果能找到當前使用場景下,文件被訪問的統計特徵,針對性的寫一個淘汰演算法,可以大幅提升文件緩存的命中率。對於http正向代理來說,一個好的淘汰演算法可以用1GB內存達到lru演算法100GB內存的緩存效果。如果不打算寫一個新的淘汰演算法,一般不需要在應用層再搭一個文件cache程序來做緩存。
8、雲伺服器 ecs磁碟io到底是多少
要看你選擇的什麼磁碟
阿里雲選擇IO優化後,IO和大小有關系,如果是100G的磁碟,3000的IOPS能做到。
如果非IO優化,一般500以上的IO。
9、關於linux伺服器上磁碟io性能問題
hdparm沒有考慮到緩存和物理讀的區分,讀取緩沖區的當然速度快
10、如何讓CentOS伺服器磁碟io性能翻倍
如何讓CentOS伺服器磁碟io性能翻倍
這一期我們來看一下有哪些辦法可以減少linux下的文件碎片。主要是針對磁碟長期滿負荷運轉的使用場景(例如http代理伺服器);另外有一個小技巧,針對互聯網圖片伺服器,可以將io性能提升數倍。如果為伺服器訂制一個專用文件系統,可以完全解決文件碎片的問題,將磁碟io的性能發揮至極限。對於我們的代理伺服器,相當於把io性能提升到3-5倍。
在現有文件系統下進行優化linux內核和各個文件系統採用了幾個優化方案來提升磁碟訪問速度。但這些優化方案需要在我們的伺服器設計中進行配合才能得到充分發揮。
文件系統緩存linux內核會將大部分空閑內存交給虛擬文件系統,來作為文件緩存,叫做page cache。在內存不足時,這部分內存會採用lru演算法進行淘汰。通過free命令查看內存,顯示為cached的部分就是文件緩存了。
如果能找到當前使用場景下,文件被訪問的統計特徵,針對性的寫一個淘汰演算法,可以大幅提升文件緩存的命中率。對於http正向代理來說,一個好的淘汰演算法可以用1GB內存達到lru演算法100GB內存的緩存效果。如果不打算寫一個新的淘汰演算法,一般不需要在應用層再搭一個文件cache程序來做緩存。
最小分配
最小分配的副作用是會浪費一些磁碟空間(分配了但是又沒有使用)
如果當前使用場景下小文件很多,把預分配改大就會浪費很多磁碟空間,所以這個數值要根據當前使用場景來設定。似乎要直接改源代碼才能生效,不太記得了,09年的時候改的,有興趣的同學自己google吧。
io訪問調度
如何針對性優化:io訪問調度能大幅提升io性能,前提是應用層同時發起了足夠的io訪問供linux去調度。怎樣才能從應用層同時向內核發起多個io訪問呢?方案一是用aio_read非同步發起多個文件讀寫請求。
小提示:將文件句柄設置為非阻塞時,進程還是會睡眠等待磁碟io,非阻塞對於文件讀寫是不生效的。在正常情況下,讀文件只會引入十幾毫秒睡眠,所以不太明顯;而在磁碟io極大時,讀文件會引起十秒以上的進程睡眠。詳見內核源代碼do_generic_file_read會調用lock_page_killable進入睡眠,但是不會判斷句柄的非阻塞標志。
預讀取linux內核可以預測我們「將來的讀請求」並提前將數據讀取出來。通過預讀取可以減少讀io的次數,並且減小讀請求的延時。
當文件擴大,需要分配磁碟空間時,可以不立即進行分配,而是暫存在內存中,將多次分配磁碟空間的請求聚合在一起後,再進行一次性分配。
延遲分配的副作用有幾個:1 如果應用程序每次寫數據後都通過fsync等介面進行強制刷新,延遲分配將不起作用2 延遲分配有可能間歇性引入一個較大的磁碟IO延時(因為要一次性向磁碟寫入較多數據)
如何針對性優化:
「讓每個目錄下的文件連續存儲」是一個極有價值的功能。假設一個網頁上有10張圖片,這10張圖片雖然存在10個文件中,但其實是幾乎同時被用戶訪問的。如果能讓這10張圖片存儲在連續的磁碟空間中,就能把io性能提升10倍(一次尋道就可以讀10個文件了)傳統的做法是通過拼接圖片來將這10張圖片合並到一張大圖中,再由前端將大圖切成10張小圖。有了e4defrag後,可以將需連續訪問的文件放在同一個文件夾下,再定期使用e4defrag進行磁碟整理。
實現自己的文件系統我們曾經寫過一款專用文件系統,針對代理伺服器,將磁碟io性能提升到3-5倍。在大部分伺服器上,不需要支持「修改文件」這個功能。一旦文件創建好,就不能再做修改操作,只支持讀取和刪除。在這個前提下,我們可以消滅所有文件碎片,把磁碟io效率提升到理論極限。
大於16MB的文件,伺服器創建文件時告訴文件系統分配16MB磁碟空間。後續每次擴大文件大小時,要麼是16MB,要麼就是文件終結。不允許在文件未終結的情況下分配非16MB的空間。讀寫文件時,每次讀寫16MB或者直到文件末尾。
在我們的文件系統中,小文件完全無碎片,一次尋道就能搞定一個文件,達到了理論上最佳的性能。大文件每次磁頭定位讀寫16MB,性能沒有達到100%,但已經相當好了。有一個公式可以衡量磁碟io的效率:磁碟利用率 = 傳輸時間/(平均尋道時間+傳輸時間)對我們當時採用的磁碟來說(1T 7200轉sata),16MB連續讀寫已經可以達到98%以上的磁碟利用率。