Linux 內核 UKSM發布穩定版本0.1.1和修正版本0.1.0.1
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以下內核的某些發行版本的二進制編譯,具體請參考下載頁面