KVM存儲虛擬化
KVM存儲虛擬化
引用了網上的一些圖片,感謝沒查到名字的大神們
KVM的存儲模式有很多種,threads,dataplane,vhost等,甚至還可以利用PCI直通技術做存儲的直通。當然還有好幾種cache模式,比如None,Writeback,Writethrough等。本文不會聚焦于這些技術的實現原理,僅從實踐場景出發,總結一下這些模式的特點,和各自能夠勝任的場景。以及在實踐過程中,遇到的一些問題,尤其是性能問題,以及它們對應的解決方案。
典型KVM存儲棧
如下圖,是一個典型的KVM虛擬機的存儲棧,所有存儲模式基本上都大同小異。程序和內核與在物理機上運行沒有什么差別。Guest通過硬件仿真與Qemu通信;Qemu將IO轉化成對鏡像文件的讀寫;Host kernel處理Guest里面來的IO和其他一般程序也就沒有什么差別了。
從上見面這張圖其實就可以看出KVM甚至其他hypervisor虛擬機存儲棧的一些特點:
兩套文件系統,Guest和Host分別都有文件系統。
兩套存儲管理,比如Guest和Host都可以用LVM等做存儲管理。
兩套page cache,Guest和Host都有針對文件的Buffer。
兩套IO調度,Guest里面調度一次,Host再調度一次。
從上面描述的這幾條繼續分析,實際上這樣的存儲棧上面是有一些問題的,所有的工作,里面和外面重復了。實際上 ,在真實的業務場景下,這樣的重復工作確實會帶來一些問題,最典型的就是性能和數據可靠性的問題。
先說數據可靠性,在一些數據可靠性要求高的情況下,應用程序會使用Direct IO或者Sync等命令保證數據已經被正確地寫到了磁盤上面。還有磁盤調度,比如我們常見的電梯算法,它主要是為傳統的機械硬盤設計的,目的就是最大化地在一個周期內合并相鄰的IO,從而提升存儲性能。這兩種技術都不是誕生于虛擬化時代,所以將這兩種技術用于虛擬機時,就有可能會產生一些和預想不太一樣的結果。
調度的選擇
因為有鏡像文件,Host的存儲視角和Guest的存儲視角是不一樣的,尤其在精簡置備這種場景下,在Guest里面相鄰的兩個數據塊在Host上不一定是相鄰的。所以在Guest里面合并在一起的IO到了Host以后,又要被拆開。反而造成性能的下降。
所以,一般在虛擬機里面做存儲性能優化,都會將調度器設置成為deadline或者none,來減少Guest內部調度器做的無用功。
當然在使用一些高端存儲時,也會建議將調度器設置成為deadline或者none,具體原因會在后面的SSD存儲章節里面分析。
Cache的選擇
writethrough
這個模式是默認的,如果選擇這個模式,Host page cache會生效,但Guest中的磁盤寫cache會被禁止。這也就是說,即使Guest里面沒有做往磁盤上刷數據的操作(比如fsync之類的),數據也會被寫入到物理磁盤中。這種方式寫性能會比較差。
writeback
如果選擇這個模式,則Host page cache和Guest中的磁盤寫cache都是生效的。正因為這樣,這種模式的IO性能是最好的,但是有掉電丟失數據的風險。
none
這個模式是Host page cache不生效,但是Guest的磁盤寫cache生效。如果Guest里面用fsync之類的命令,則可以保證數據被寫入到物理存儲中。因為沒有page cache,所以讀性能會差一些。
unsafe
因為Qemu支持這種cache模式,所以我把它列了出來,但正如它的名字,這種模式不建議用在生產環境中,所以我也就偷個懶不寫了。
這些cache模式沒有說哪個是最好的,在特定的業務場景下,根據性能和數據可靠性的要求去選擇最合適的那個吧。
小結
OS運行在虛擬機里面時,它所管理的硬件不再是真正的硬件,而是hypervisor虛擬出來的硬件,所以Guest OS看到的硬件視圖和Host上的硬件視圖有一些差別。這一點,在存儲世界尤其明顯。比如在Guest里面給0扇區寫數據,對應到Host的物理存儲上就不一定是0扇區了;在Guest里面相鄰的兩個存儲數據塊,在Host上就不一定是相鄰的了。
在物理機上運行還比較好的代碼,在虛擬機里面就不一定合適了。所以在實踐過程中,一些功能重新審視,Guest和Host內外重新協調起來,才能使存儲這塊運行地更加流暢。
云計算
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。