天天看點

明明是全閃存陣列,為何存儲性能仍然不夠快

  【51cto.com原創稿件】軟體定義基礎架構,軟體定義存儲,軟體定義存儲。目前,用軟體定義超融合的方式替代專用伺服器、專用網絡、專用儲存設備等傳統基礎架構的方法,已經成為了行業的熱點。英特爾系統架構師朱海峰先生曾在某超融合大會上公開表示,未來的大型資料中心的建設,将采用标準x86硬體建構作為整個資料中心的基礎架構,通過軟體廠商比較強的軟體定義能力來實作存儲、網絡和計算等功能,并通過各種軟體定義的解決方案來實作超融合。這也就意味着,軟體定義已經成為行業的重點技術。

軟體定義的主要目的是減化部署流程,提高易用性,降低運維成本。當然,最重要的是能夠發揮硬體的全部性能,合理配置設定利用硬體資源,節省硬體開支。

不過,軟體定義的超融合雖然有着諸多的優勢,但對軟體開發商提出了非常高的要求,他們非但要精通各種語言、系統和架構,還必須要熟悉硬體本身的性能,這樣才能夠保證開發出來的軟體能夠全部發揮硬體的性能。

關于軟體定義帶來的硬體性能的損失,比較典型的例子就是軟體定義存儲導緻的磁盤性能的下降,這主要是在全閃存時代背景下,磁盤性能有了非常大的提升,如果在軟體定義的過程中還是按照傳統機械硬碟的性能還編寫系統,那就完全無法發揮閃存的性能。筆者在某超融合的大會上,就曾遇到過一家專門作軟體定義存儲解決方案的廠商,它們針對flash時代開發出了裸金屬軟體定義存儲技術,非常好的解決了軟體定義存儲無法充分發揮全閃存硬體性能的問題。

這裡,筆者與大家共同分享一下他們的解決方案和研發思路,希望對大家有所啟發。

我們知道,在flash之前,存儲性能的發展是嚴重滞後于其它硬體性能的發展的,雖然大家通過各種方法來提高磁盤的存儲性能,但相較于其它硬體的發展,存儲的性能提升并不理想。在flash時代,存儲硬體性能的問題迎刃而解。不過,很多廠商在替換全閃存陣列後,發現存儲的性能并沒有提高多少,這主要是軟體和系統出現了問題。

由于linux标準的api并沒有提供高性能的場景設計,是以作業系統成為了影響系統整體性能的瓶頸,無論你在一個裝置上插入多少硬體,調用多少資源,都會發現一個節點一二十萬iops就到了這些軟體定義存儲的上限了,這是因為linux系統的任務排程,記憶體管理,以及系統調用,都是非常緩慢,完全不适合flash時代的需求。

如何解決這一問題呢,裸金屬軟體定義存儲技術是通過以下兩種方法解決的:

一是硬體通路要繞過作業系統(stack-bypass);

二是軟體運作要繞過作業系統(os-bypass)。

對于硬體的通路要繞過作業系統(stack-bypass)這種技術業内已經有相對比較成熟了,也比較容易實作。比如英特爾提供的dpdk/spdk,mellanox的rdma,都不需要經過作業系統就可以直接通路硬體。但是,軟體運作繞過作業系統(os-bypass)的難度卻比較大。首先,要繞過作業系統的記憶體管理,直接通路實體記憶體,自己來實作記憶體管理,這中間要考慮numa,染色等問題,工程量非常大。其次,任務排程也要考慮的非常清楚,過去解決高并發問題的時候大家就會采用多線程的機制,但是多線程一般在數百并發的時候會變得比較困難,通過引入了協程技術,把任務之間的協作來配置設定時間片,每個任務處理完之後自動放棄時間片,而不是作業系統讓他強制放棄時間片。另外,在事件處理上過去通過作業系統标準來實作,每個事件都跟時間有關,包括硬體系統的時鐘中斷。但是這個技術并不是非常的高效,在這方面可以采用polling技術,沒有時間延期的。

在多核同步上,目前 cpu的核數越來越多,過去程式設計的時候大家會采用生産者、消費者模型,用線程用來處理任務,但是到現在多核同步并不是一個非常高效的方案,這主要是因為numa和cachemiss問題,雖然說numa問題cpu解決的還可以,但是仍然不夠理想,這時可以采用run-complete模型,每個cpu的核從他接受到任務,到完成任務中間不再任何跳轉,避免隐性的cpu開銷。

通過以上的方案,能夠拿掉盡可能多的環節,包括進出linux的網絡堆棧、linux的存儲堆棧,這樣就能夠讓剩下的流程全是在硬體上運作的。最後,通過這些技術的運用,能夠讓存儲的性能與硬體性能幾乎完全一緻,不帶來硬體性能的任何衰減。

以上,是某廠商針對全閃存時代在軟體定義過程中出現的影響硬體性能的解決方案,筆者分享給大家,希望提供一些參考。

 作者:zc

來源:51cto

繼續閱讀