日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

代碼大頁

代碼大頁(Huge Pages)是基于透明大頁THP(Transparent Huge Pages)進行的優化擴展,支持將應用程序和動態鏈接庫的可執行部分放入到大頁(通常是2 MB或更大)中,有助于降低程序的iTLB miss,并提升CPU的2 MB iTLB利用率,避免內存碎片化或內存膨脹問題,提高內存利用效率,適用于數據庫、大型應用程序等大代碼段業務場景。本文主要介紹代碼大頁的使用方法以及性能收益等。

說明

根據實際的使用經驗,代碼大頁在不同平臺性能提升不同,具體與應用本身的執行方式有關。

有關代碼大頁中一些常用名詞解釋,請參見附錄:名詞解釋

使用限制

僅以下內核版本的Alibaba Cloud Linux鏡像支持使用代碼大頁功能:

  • Alibaba Cloud Linux 2:4.19.91-25及以上內核版本。

  • Alibaba Cloud Linux 3:5.10.112-11及以上內核版本。

說明

您可以通過uname -r命令查詢鏡像的內核版本。

使用代碼大頁

啟用代碼大頁

該功能默認是關閉的,可以使用sysfs接口進行啟用。支持如下三種啟用方式。

  • 方式一:僅打開二進制和動態庫大頁

    sudo sh -c 'echo 1 > /sys/kernel/mm/transparent_hugepage/hugetext_enabled'
  • 方式二:僅打開可執行匿名大頁

    sudo sh -c 'echo 2 > /sys/kernel/mm/transparent_hugepage/hugetext_enabled'
  • 方式三:同時打開以上兩類大頁

    sudo sh -c 'echo 3 > /sys/kernel/mm/transparent_hugepage/hugetext_enabled'
說明

打開代碼大頁功能并不意味著立即合并大頁,代碼大頁功能是異步的。

檢查是否啟用代碼大頁

運行以下命令,查看/proc/<pid>/smaps中的FilePmdMapped字段可確定是否使用了代碼大頁,FilePmdMapped字段表示進程代碼大頁的使用數量(單位kB)。

sudo cat /proc/<pid>/smaps | grep FilePmdMapped | awk '{sum+=$2}END{print"Sum= ",sum}'
說明

<pid>需替換為您實際應用程序進程ID,可通過pidof sshd查看進程ID。

關閉代碼大頁

運行以下命令,使用sysfs接口關閉代碼大頁。

sudo sh -c 'echo 0 > /sys/kernel/mm/transparent_hugepage/hugetext_enabled'
說明
  • 關閉代碼大頁功能并不意味著立即拆散大頁,代碼大頁功能是異步的。

  • 如果一段代碼曾經被合并為大頁,即使關閉代碼大頁功能,大頁緩存還是存在。

另外,支持在系統啟動項中設置代碼大頁的狀態:設置hugetext=0/1/2/3。系統啟動項與您系統的GRUB版本以及系統鏡像有關,請您根據實際情況進行配置。

關閉代碼大頁后,同時支持以下幾種方式清理已使用的大頁。

  • 方式一:清理整個系統的page cache(文件緩存)

    sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
  • 方式二:清理單個文件的page cache(文件緩存)

    sudo vmtouch -e /<path>/target
    說明
    • vmtouch是一個用于檢查文件是否已經加載到內存中,并且可以將文件鎖定到內存或者從內存中卸載的工具。如果您沒有安裝vmtouch,需先執行sudo yum install vmtouch命令安裝。

    • <path>需替換為您實際應用程序的文件路徑。

  • 方式三:清理遺留大頁

    sudo sh -c 'echo 1 > /sys/kernel/debug/split_huge_pages'

性能收益

該功能在不同平臺優化效果不同,主要原因在于平臺轉譯后備緩沖器TLB(Translation Lookaside Buffer)模塊的設計。當前已知較適用場景包括數據庫類業務(例如MySQL、PostgreSQL等)和Java類業務,物理機上優化效果約為5%~8%,虛擬機環境收益更佳。下面以MySQL為例,驗證Arm平臺上代碼大頁的性能收益。

說明

如果一段代碼曾經被合并為大頁,即使關閉代碼大頁功能,大頁緩存還是存在。所以在測試性能時建議通過echo 3 > /proc/sys/vm/drop_caches清理系統的大頁緩存,以確保性能測試的準確性。

假設vCPU總核數為32,測試過程中MySQL并發數分別是1、8(25%)、16(50%)、32(100%)。2 MB代碼大頁與普通4 KB代碼頁性能指標TPS(Transaction Per Second)數據對比如下:TPS數據

通過上圖TPS數據對比可以看出,代碼大頁的性能始終高于普通代碼頁。詳細說明如下:

  • 并發數為1時,外在的影響因素較小。此時代碼大頁相比普通代碼頁,性能提升大約6.9%。

  • 并發數為8、16時,基本可以保證沒有CPU的競爭,代碼大頁的性能提升大約也在6.5%以上。

  • 并發數為32時,可能存在其他應用競爭CPU,所以TPS較低于前面的測試結果。在系統受到不確定因素擾動時,代碼大頁的穩定性更好,此時相比普通代碼頁,性能提升大約11%左右。

iTLB數據上圖展示的是代碼大頁與普通4 KB代碼頁的iTLB數據,左圖是iTLB miss數據,右圖是iTLB MPKI數據。MySQL使用代碼大頁后:

  • iTLB miss大約下降了10倍左右,數值大小從原來的0.09%左右下降到0.08%左右。

  • iTLB MPKI大約下降了6倍左右。

除MySQL外,代碼大頁在PostgreSQL上也存在7%左右的性能提升。

Padding功能

Padding功能是對代碼大頁特性的優化,主要解決應用加載后的代碼段未完全使用代碼大頁導致的不是最佳性能效果(未使用代碼大頁部分屬于熱點)的問題。該特性需要在啟用代碼大頁的基礎上使用,不可獨立使用。例如,當二進制文件末尾剩余text段由于不足2 MB而無法使用大頁時,當剩余text大小超過hugetext_pad_threshold值,可將其填充為2MB text,保證可使用上大頁。

  • 啟用Padding

    運行以下命令,使用sysfs接口啟用Padding功能。

    sudo sh -c 'echo [0~2097151] >  /sys/kernel/mm/transparent_hugepage/hugetext_pad_threshold'
    說明

    建議一般情況寫4096即可,即sudo sh -c 'echo 4096 > /sys/kernel/mm/transparent_hugepage/hugetext_pad_threshold'

    一般情況下,應用的代碼段映射地址一般是2MB對齊(代碼大頁同時也做了地址對齊的優化),但緊跟的rw-p或r--p部分不一定為2 MB對齊,這種情況可能會導致hugetext_pad_threshold不能理想填充,存在部分代碼段使用4 KB頁。建議您在使用Padding功能時,將代碼段和數據段2 MB對齊。對齊方法:修改默認的lds文件,在代碼和數據段前加上. = ALIGN(0x200000);即可。

  • 關閉Padding

    運行以下命令,使用sysfs接口關閉Padding功能。

    sudo sh -c 'echo 0 >  /sys/kernel/mm/transparent_hugepage/hugetext_pad_threshold'

附錄:名詞解釋

代碼大頁功能中一些常用名詞解釋如下所示。

名詞

說明

大頁

大頁(HugePages),也稱為大內存頁。是指操作系統以大于4 KB的頁大小為管理單元的一種內存分配和管理方式,大頁可以提高硬件TLB利用率進而提升性能。

透明大頁

透明大頁(Transparent Huge Pages)是一種隱式使用大頁的方式,在用戶進程無感知的情況下,系統后臺通過啟動內核線程異步掃描每一個進程的虛擬地址空間,整合合適的虛擬地址空間VMA(Virtual Memory Area)為2 MB大頁。

代碼大頁

代碼大頁(Hugetext)利用透明大頁相同的整合機制,僅將代碼部分整合為大頁,性能提升效果明顯。

iTLB miss

指令轉換后備緩沖區iTLB(Instruction Translation Lookaside Buffer)的不命中率,iTLB命中率低,會導致CPU無法高效運行。

iTLB利用率

指令轉換后備緩沖區iTLB的利用率,利用率越高,系統的性能越高。

iTLB MPKI

指令轉換后備緩沖區iTLB中每千條指令的未命中數據,未命中數據越小,系統的性能越高。

相關文檔

Alibaba Cloud Linux系統也可以通過透明大頁提高內存訪問的效率。透明大頁可以自動將小頁面(通常為4 KB)合并成大頁面(通常為2 MB或更大),可以減少內存訪問頁表項PTE(Page Table Entries)大小和訪問次數,從而減輕TLB緩存的壓力提升程序性能。更多信息,請參見Alibaba Cloud Linux系統中與透明大頁THP相關的性能調優方法