Linux 內核 UKSM發布穩定版本0.1.1和修正版本0.1.0.1

fmms 13年前發布 | 12K 次閱讀 Linux

Linux UKSM 是國人自主研發的一個 Linux 內核相關項目,這個項目對服務器和桌面應用都可以顯著的減少 Linux 系統冗余的內存,已經在 RHEL6、CentOS 6、Ubuntu 12.04 等系統充分驗證和測試過。

Linux相同頁面合并機制(KSM)使得內存中相同的頁面,可以通過修改頁表的方式合并成一個。通常這個機制被應用在有眾多虛擬機(目前僅支持 KVM)或者有很多冗余內存數據的場景(如有很多類似數據工作集的并行科學計算)里面。但是,目前它的實現方式仍然比較簡陋,UKSM的出現,徹底消除了 KSM原本局限,真正使得這項技術能被更多的普通用戶使用。具體的來說,它有以下的亮點(原本KSM不具有的特性):

  • 全系統掃描,用戶透明。 UKSM現在自動掃描所有用戶進程的匿名映射內存區域(包括malloc分配出來的內存)。不需要修改一行應用程序的源碼,使用起來超級簡單,安裝完成以 后,重啟使用本站補丁的內核即可(有部分已編譯的二進制內核供下載)。起它幾乎什么都不需要做(除非你想通過sysfs調整其內部參數)。
  • 不無謂地浪費CPU時間。UKSM自動探測并分析得出包含豐富冗余數據的區域,并在其上全速工作。對于沒有太多冗余甚至徹底沒有冗余數據的區域,只進行速度非常低(通常情況下,用top看,CPU占用率為0)的采樣掃描。而當包含豐富冗余數據的區域出現的時候,它又能非常快速的作出響應。
  • UKSM能夠以極快的速度掃描,并合并冗余數據。 在Intel core 2 Q9300的CPU上,KSM的官方評測其內存合并速度最高在260M/s左右,而實際工作的平均速度在幾十M每秒。由于采用了全新的hash算法,相同的硬件環境下面,我們的算法的合并速度最高可達到477MB/sec ~ 923MB/sec。而對于不包含冗余數據的頁面上,UKSM的掃描速度最高是627MB/sec ~ 2445MB/sec。正因為有如此驚人的速度,全系統掃描才真正成為可能。而對于已有的KVM的冗余消除應用來說,速度上無疑是一個質的的飛躍!
  • 抖動區域避免。UKSM能實時自動地發現不友好的抖動區域,并降低其上的掃描速度,避免在此類區域上浪費時間。

 

UKSM-0.1.1 是一個新增功能特性版,主要新特性包括:

對全0內存頁面提供了特別的支持。
在掃描此類全0頁面的時候更快,對工作集影響更小。同時全0頁面可以避免像內核原本KSM實現的那樣可能被交換出去,進而導致很多沒有必要的內存拷貝。現在被合并的全0頁面頁表項數量可以通過:

cat /proc/meminfo | grep KsmZeroPages

來得出。這是當前系統當中被合并的全0的頁面的一個主要指標。其它非0頁面的合并數目由 /sys/kernel/mm/uksm/pages_sharing 提供。

UKSM作為一個獨立的機制開始進化

在此版本之前,UKSM是作為KSM的一個內嵌的補丁實現的,代碼全部在 mm/ksm.c當中。為了更好的維護和管理,并且有更多發展的靈活性。從次版本開始UKSM作為一個獨立的補丁實現在 mm/uksm.c但中,并且有獨立的編譯選項,與KSM并存。在 make menuconfig之后,菜單中:

Processor type and features-->Enable KSM for page merging-->Choose UKSM/KSM strategy

選擇 (Ultra-KSM for page merging)即可,而內核主流的 UKSM被命名成 “Legacy KSM implementation”。它們在 .config 當中的定義宏分別是 CONFIG_UKSM 和 CONFIG_KSM_LEGACY(同時依賴 CONFIG_KSM)。

UKSM開始全線跟蹤主流內核的3.0以后各個穩定分支

此版本之后UKSM會提供同步的各個主流內核的穩定分支的更新和修正,同時包括主要的一些發行版本(centos, debian, ubuntu, fedora, suse)的對應的二進制編譯。具體的不同分支的源碼,請參考項目源碼頁面

UKSM-0.1.0.1是一個0.1.0基礎上的BUG修正版本

  • 主要修正幾處缺失的頁鎖操作,這些bug可能導致罕見的內核軟死鎖狀態。
  • 此修正同時提供3.0以下內核的某些發行版本的二進制編譯,具體請參考下載頁面

 

 本文由用戶 fmms 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!