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

文檔

代碼大頁

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

說明

根據(jù)實(shí)際的使用經(jīng)驗(yàn),代碼大頁在不同平臺(tái)性能提升不同,具體與應(yīng)用本身的執(zhí)行方式有關(guān)。

有關(guān)代碼大頁中一些常用名詞解釋,請(qǐng)參見附錄:名詞解釋

使用限制

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

  • Alibaba Cloud Linux 2:4.19.91-25及以上內(nèi)核版本。

  • Alibaba Cloud Linux 3:5.10.112-11及以上內(nèi)核版本。

說明

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

使用代碼大頁

啟用代碼大頁

該功能默認(rèn)是關(guān)閉的,可以使用sysfs接口進(jìn)行啟用。支持如下三種啟用方式。

  • 方式一:僅打開二進(jìn)制和動(dòng)態(tài)庫大頁

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

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

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

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

檢查是否啟用代碼大頁

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

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

<pid>需替換為您實(shí)際應(yīng)用程序進(jìn)程ID,可通過pidof sshd查看進(jìn)程ID。

關(guān)閉代碼大頁

運(yùn)行以下命令,使用sysfs接口關(guān)閉代碼大頁。

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

  • 如果一段代碼曾經(jīng)被合并為大頁,即使關(guān)閉代碼大頁功能,大頁緩存還是存在。

另外,支持在系統(tǒng)啟動(dòng)項(xiàng)中設(shè)置代碼大頁的狀態(tài):設(shè)置hugetext=0/1/2/3。系統(tǒng)啟動(dòng)項(xiàng)與您系統(tǒng)的GRUB版本以及系統(tǒng)鏡像有關(guān),請(qǐng)您根據(jù)實(shí)際情況進(jìn)行配置。

關(guān)閉代碼大頁后,同時(shí)支持以下幾種方式清理已使用的大頁。

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

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

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

    • <path>需替換為您實(shí)際應(yīng)用程序的文件路徑。

  • 方式三:清理遺留大頁

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

性能收益

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

說明

如果一段代碼曾經(jīng)被合并為大頁,即使關(guān)閉代碼大頁功能,大頁緩存還是存在。所以在測(cè)試性能時(shí)建議通過echo 3 > /proc/sys/vm/drop_caches清理系統(tǒng)的大頁緩存,以確保性能測(cè)試的準(zhǔn)確性。

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

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

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

  • 并發(fā)數(shù)為8、16時(shí),基本可以保證沒有CPU的競(jìng)爭(zhēng),代碼大頁的性能提升大約也在6.5%以上。

  • 并發(fā)數(shù)為32時(shí),可能存在其他應(yīng)用競(jìng)爭(zhēng)CPU,所以TPS較低于前面的測(cè)試結(jié)果。在系統(tǒng)受到不確定因素?cái)_動(dòng)時(shí),代碼大頁的穩(wěn)定性更好,此時(shí)相比普通代碼頁,性能提升大約11%左右。

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

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

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

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

Padding功能

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

  • 啟用Padding

    運(yùn)行以下命令,使用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'

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

  • 關(guān)閉Padding

    運(yùn)行以下命令,使用sysfs接口關(guān)閉Padding功能。

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

附錄:名詞解釋

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

名詞

說明

大頁

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

透明大頁

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

代碼大頁

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

iTLB miss

指令轉(zhuǎn)換后備緩沖區(qū)iTLB(Instruction Translation Lookaside Buffer)的不命中率,iTLB命中率低,會(huì)導(dǎo)致CPU無法高效運(yùn)行。

iTLB利用率

指令轉(zhuǎn)換后備緩沖區(qū)iTLB的利用率,利用率越高,系統(tǒng)的性能越高。

iTLB MPKI

指令轉(zhuǎn)換后備緩沖區(qū)iTLB中每千條指令的未命中數(shù)據(jù),未命中數(shù)據(jù)越小,系統(tǒng)的性能越高。

相關(guān)文檔

Alibaba Cloud Linux系統(tǒng)也可以通過透明大頁提高內(nèi)存訪問的效率。透明大頁可以自動(dòng)將小頁面(通常為4 KB)合并成大頁面(通常為2 MB或更大),可以減少內(nèi)存訪問頁表項(xiàng)PTE(Page Table Entries)大小和訪問次數(shù),從而減輕TLB緩存的壓力提升程序性能。更多信息,請(qǐng)參見Alibaba Cloud Linux系統(tǒng)中與透明大頁THP相關(guān)的性能調(diào)優(yōu)方法