主頁 > 知識庫 > Linux關于透明大頁的使用與禁用介紹

Linux關于透明大頁的使用與禁用介紹

熱門標簽:遼寧電銷平臺外呼系統(tǒng)軟件 coreldraw地圖標注 百應電銷機器人靠譜嗎 信陽銷售外呼系統(tǒng)招商 如何在各種地圖標注自己的地址 營銷電銷機器人招商 物超所值的400電話申請 菏澤crm外呼系統(tǒng)價格 申請400電話號碼多少錢

引言

隨著計算需求規(guī)模的不斷增大,應用程序?qū)?nèi)存的需求也越來越大。為了實現(xiàn)虛擬內(nèi)存管理機制,操作系統(tǒng)對內(nèi)存實行分頁管理。自內(nèi)存“分頁機制”提出之始,內(nèi)存頁面的默認大小便被設置為 4096 字節(jié)(4KB),雖然原則上內(nèi)存頁面大小是可配置的,但絕大多數(shù)的操作系統(tǒng)實現(xiàn)中仍然采用默認的 4KB 頁面。 4KB 大小的頁面在“分頁機制”提出的時候是合理的,因為當時的內(nèi)存大小不過幾十兆字節(jié),然而當物理內(nèi)存容量增長到幾 G 甚至幾十 G 的時候,操作系統(tǒng)仍然以 4KB 大小為頁面的基本單位,是否依然合理呢?

在 Linux 操作系統(tǒng)上運行內(nèi)存需求量較大的應用程序時,由于其采用的默認頁面大小為 4KB,因而將會產(chǎn)生較多 TLB Miss 和缺頁中斷,從而大大影響應用程序的性能。當操作系統(tǒng)以 2MB 甚至更大作為分頁的單位時,將會大大減少 TLB Miss 和缺頁中斷的數(shù)量,顯著提高應用程序的性能。這也正是 Linux 內(nèi)核引入大頁面支持的直接原因。好處是很明顯的,假設應用程序需要 2MB 的內(nèi)存,如果操作系統(tǒng)以 4KB 作為分頁的單位,則需要 512 個頁面,進而在 TLB 中需要 512 個表項,同時也需要 512 個頁表項,操作系統(tǒng)需要經(jīng)歷至少 512 次 TLB Miss 和 512 次缺頁中斷才能將 2MB 應用程序空間全部映射到物理內(nèi)存;然而,當操作系統(tǒng)采用 2MB 作為分頁的基本單位時,只需要一次 TLB Miss 和一次缺頁中斷,就可以為 2MB 的應用程序空間建立虛實映射,并在運行過程中無需再經(jīng)歷 TLB Miss 和缺頁中斷(假設未發(fā)生 TLB 項替換和 Swap)。

為了能以最小的代價實現(xiàn)大頁面支持,Linux 操作系統(tǒng)采用了基于 hugetlbfs 特殊文件系統(tǒng) 2M 字節(jié)大頁面支持。這種采用特殊文件系統(tǒng)形式支持大頁面的方式,使得應用程序可以根據(jù)需要靈活地選擇虛存頁面大小,而不會被強制使用 2MB 大頁面。

Redis在Linux中啟動時通常會報“WARNING you have Transparent Huge Pages (THP) support enabled in your kernel”的警告信息,意思是:你使用的是透明大頁,可能導致redis延遲和內(nèi)存使用問題。

關于透明大頁,我們看看官方的介紹

Transparent Huge Pages (THP) are enabled by default in RHEL 6 for all applications. The kernel attempts to allocate hugepages whenever possible and any Linux process will receive 2MB pages if the mmap region is 2MB naturally aligned. The main kernel address space itself is mapped with hugepages, reducing TLB pressure from kernel code. For general information on Hugepages, see: What are Huge Pages and what are the advantages of using them?

The kernel will always attempt to satisfy a memory allocation using hugepages. If no hugepages are available (due to non availability of physically continuous memory for example) the kernel will fall back to the regular 4KB pages. THP are also swappable (unlike hugetlbfs). This is achieved by breaking the huge page to smaller 4KB pages, which are then swapped out normally.

But to use hugepages effectively, the kernel must find physically continuous areas of memory big enough to satisfy the request, and also properly aligned. For this, a khugepaged kernel thread has been added. This thread will occasionally attempt to substitute smaller pages being used currently with a hugepage allocation, thus maximizing THP usage.

In userland, no modifications to the applications are necessary (hence transparent). But there are ways to optimize its use. For applications that want to use hugepages, use of posix_memalign() can also help ensure that large allocations are aligned to huge page (2MB) boundaries.

Also, THP is only enabled for anonymous memory regions. There are plans to add support for tmpfs and page cache. THP tunables are found in the /sys tree under /sys/kernel/mm/redhat_transparent_hugepage.

查看是否啟用透明大頁

1:命令cat /sys/kernel/mm/redhat_transparent_hugepage/enabled 該命令適用于Red Hat Enterprise Linux系統(tǒng)

[root@getlnx06 ~]# more /etc/issue
 
Red Hat Enterprise Linux Server release 6.6 (Santiago)
 
Kernel \r on an \m
 
[root@getlnx06 ~]# cat /sys/kernel/mm/redhat_transparent_hugepage/enabled
 
[always] madvise never

2:命令cat /sys/kernel/mm/transparent_hugepage/enabled 該命令適用于其它Linux系統(tǒng)

[root@getlnx06 ~]# cat /sys/kernel/mm/transparent_hugepage/enabled
 
always madvise [never]
 
[root@getlnx06 ~]# 

使用命令查看時,如果輸出結果為[always]表示透明大頁啟用了。[never]表示透明大頁禁用、[madvise]表示

3:如何HugePages_Total返回0,也意味著透明大頁禁用了

[root@getlnx06 ~]# grep -i HugePages_Total /proc/meminfo 
 
HugePages_Total: 0

4:cat /proc/sys/vm/nr_hugepages返回0也意味著透明大頁禁用了。

[root@getlnx06 ~]# cat /proc/sys/vm/nr_hugepages 

0

禁用、啟用透明大頁功能

方法1:設置/etc/grub.conf文件,在系統(tǒng)啟動是禁用。

[root@getlnx06 ~]# vi /etc/grub.conf
# grub.conf generated by anaconda
#
# Note that you do not have to rerun grub after making changes to this file
# NOTICE: You have a /boot partition. This means that
#     all kernel and initrd paths are relative to /boot/, eg.
#     root (hd0,0)
#     kernel /vmlinuz-version ro root=/dev/mapper/VolGroup--LogVol0-LogVol01
#     initrd /initrd-[generic-]version.img
#boot=/dev/sda
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title Red Hat Enterprise Linux 6 (2.6.32-504.el6.x86_64)
    root (hd0,0)
    kernel /vmlinuz-2.6.32-504.el6.x86_64 ro root=/dev/mapper/VolGroup--LogVol0-LogVol01 rd_NO_LUKS LANG=en_US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto rd_LVM_LV=VolGroup-LogVol0/LogVol01 rd_LVM_LV=VolGroup-LogVol0/LogVol00 KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
    initrd /initramfs-2.6.32-504.el6.x86_64.img
transparent_hugepage=never

方法2:設置/etc/rc.local文件

[root@getlnx06 ~]# vi /etc/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
if test -f /sys/kernel/mm/redhat_transparent_hugepage/enabled; then
  echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled
fi

使用上面的配置后必須重啟操作系統(tǒng)才能生效,你也可以運行下面命令不用重啟操作系統(tǒng)。

[root@getlnx06 ~]# echo never > /sys/kernel/mm/redhat_transparent_hugepage/enabled
[root@getlnx06 ~]# cat /sys/kernel/mm/redhat_transparent_hugepage/enabled
always madvise [never]
[root@getlnx06 ~]# 

小知識點:

1:從RedHat 6, OEL 6, SLES 11 and UEK2 kernels 開始,系統(tǒng)缺省會啟用 Transparent HugePages :用來提高內(nèi)存管理的性能透明大頁(Transparent HugePages )和之前版本中的大頁功能上類似。主要的區(qū)別是:Transparent HugePages 可以實時配置,不需要重啟才能生效配置;

2:Transparent Huge Pages在32位的RHEL 6中是不支持的。

3: ORACLE官方不建議我們使用RedHat 6, OEL 6, SLES 11 and UEK2 kernels 時的開啟透明大頁(Transparent HugePages ), 因為透明大頁(Transparent HugePages ) 存在一些問題:

  • 在RAC環(huán)境下 透明大頁(Transparent HugePages )會導致異常節(jié)點重啟,和性能問題
  • 在單機環(huán)境中,透明大頁(Transparent HugePages ) 也會導致一些異常的性能問題

總結

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。如果你想了解更多相關內(nèi)容請查看下面相關鏈接

標簽:瀘州 廈門 內(nèi)江 泰安 江西 玉樹 江門 湖北

巨人網(wǎng)絡通訊聲明:本文標題《Linux關于透明大頁的使用與禁用介紹》,本文關鍵詞  Linux,關于,透明,大頁,的,;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Linux關于透明大頁的使用與禁用介紹》相關的同類信息!
  • 本頁收集關于Linux關于透明大頁的使用與禁用介紹的相關信息資訊供網(wǎng)民參考!
  • 推薦文章