国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

Linux系統HugePage內存功能配置詳解

2024-08-27 23:59:43
字體:
來源:轉載
供稿:網友

我相信各位做linux系統性能優(yōu)化的朋友對于 HugePage并不陌生了,今天我們來為各位分享一篇HugePage用法例子.

在Linux環(huán)境性能優(yōu)化實踐中,HugePage是一個經常提到的方法,簡單的說,HugePage就是Linux內核上一種是用內存塊的方法,作為傳統4K Page的替代,HugePage在大部分場景下可以提升Oracle實例的運行性能效率.

一、HugePage介紹

HugePage廣泛啟用開始于Kernal 2.6,一些版本下2.4內核也可以是用,在操作系統Linux環(huán)境中,內存是以頁Page的方式進行分配,默認大小為4K,如果需要比較大的內存空間,則需要進行頻繁的頁分配和管理尋址動作.

HugePage是傳統4K Page的替代方案,顧名思義,是用HugePage可以讓我們有更大的內存分頁大小,無論是HugePage還是傳統的正常Page,這個過程都涉及到OS內存尋址過程.

當一個進程訪問內存的時候,并不是直接進行內存位置訪問,是需要通過Page Table進行轉移變換,在使用HugePage的情況下,PageTable具有了額外的屬性,就是判斷該頁記錄是HugePage還是Regular Page.

在Oracle運行環(huán)境中開啟HugePage是有很多好處的,具體如下.

非Swap內存:當開啟HugePage的時候,HugePage是不會Swap的.

減少TLB(Translation Look aside Buffer)負擔:TBL是在CPU里面的一塊緩沖區(qū)域,其中包括了部分Page Table內容,使用HugePage可以減少TLB工作負載.

減少Page Table空間負載:在PageTable管理中,每條Page記錄是要占據64byte的空間的。也就是說,如果一塊50G的RAM,4k大小的PageTable要有80MB左右;

減少PageTable檢索負載:更小的PageTable意味著更快的檢索定位能力;

內存性能提升:Page數量減少、大小的增加,減少了管理過程的復雜性,進一步減少了瓶頸出現的概率;

對于Oracle而言,實例運行環(huán)境(Database和ASM)都面對一個HugePage優(yōu)化的問題。

二、基礎環(huán)境準備

我們選擇Kernel2.6下的centos版本進行實驗。

[oracle@361way ~]$ uname -r

2.6.18-128.el5

此時Oracle實例為11gR2(11.2.0.3),運行在AMM內存管理方式下,共享內存段信息如下.

  1. [oracle@361way ~]$ ipcs -m 
  2. ------ Shared Memory Segments -------- 
  3. key        shmid      owner      perms      bytes      nattch     status 
  4. 0x00000000 32768      oracle    640        4096       0 
  5. 0x00000000 65537      oracle    640        4096       0 
  6. 0x01606d30 98306      oracle    640        4096       0 
  7. [oracle@361way ~]$ grep Huge /proc/meminfo 
  8. HugePages_Total:     0 
  9. HugePages_Free:      0 
  10. HugePages_Rsvd:      0 
  11. Hugepagesize:     4096 kB 

注意兩個問題:一個是當前我們在meminfo中沒有啟用HugePage,所以沒有對應的記錄,另一個是AMM下,ipcs –m顯示出的共享內存大小只有三個每個大小4096bytes.

這個問題是比較復雜的,本篇就介紹一個開頭,在10g中,Oracle引入了sga_target系列參數,實現了ASMM(Automatic Shared Memory Management),ASMM的本質是實現SGA和PGA內部各個池之間的動態(tài)調整,但是在11g中,推出了AMM(Automatic Memory Management),實現了PGA和SGA之間的調節(jié).

AMM其實是復雜的,SGA在Linux中是通過系統共享內存實現,而PGA是通過進程私有空間實現,AMM實際上最大的功能是將SGA和PGA空間調節(jié)的通道打通,這必然帶來對原有SGA共享內存方式架構的影響,在AMM時,ipcs –m顯示的虛擬空共享段就是實際效果的一部分.

三、用戶內存配置

啟用HugePage的第一步就是進行用戶參數限制打通,當前內存大小如下:

--內存信息

  1. [root@361way ~]# free -t 
  2.              total       used       free     shared    buffers     cached 
  3. Mem:        918380     205044     713336          0      14744     152996 
  4. -/+ buffers/cache:      37304     881076 
  5. Swap:      2455788          0    2455788 
  6. Total:     3374168     205044    3169124 

修改/etc/security/limits.conf參數文件,添加數據庫實例用戶的memlock限制.

  1. [root@361way ~]# cat /etc/security/limits.conf 
  2. # /etc/security/limits.conf 
  3. (篇幅原因,有省略……) 
  4. #        - fsize - maximum filesize (KB) 
  5. #        - memlock - max locked-in-memory address space (KB) 
  6. #        - nofile - max number of open files 
  7. #ftp             hard    nproc           0 
  8. #@student        -       maxlogins       4 
  9. oracle soft nproc 2047 
  10. oracle hard nproc 16384 
  11. oracle soft nofile 1024 
  12. oracle hard nofile 65536 
  13. oracle soft memlock 918380 
  14. oracle hard memlock 918380 
  15. End of file  //Vevb.com 

這個過程中使用memlock標記,用于設置每個用戶允許的最大內存使用情況,這個取值可以設置為數據庫服務器物理內存大小,切換到指定用戶(oracle),查看設置.

  1. [oracle@361way ~]$ ulimit -l 
  2. 918380 

四、Oracle設置

如果是使用11g Oracle版本,一定需要進行額外的配置,就是將使用的AMM退化為ASMM,在早期的11.2.0.1版本中,這個步驟很重要,因為AMM是不支持HugePage的,如果強在AMM+HugePage模式下打開數據庫,是會遇到失敗信息.

在最新的11.2.0.2版本以及之后,引入了參數use_large_pages,避免了這樣的問題,但是AMM與HugePage不兼容的情況,還是存在.

當前是使用AMM的數據庫.

  1. SQL> show parameter target 
  2. NAME                                 TYPE        VALUE 
  3. ------------------------------------ ----------- ------------------------------ 
  4. archive_lag_target                   integer     0 
  5. db_flashback_retention_target        integer     1440 
  6. fast_start_io_target                 integer     0 
  7. fast_start_mttr_target               integer     0 
  8. memory_max_target                    big integer 360M 
  9. memory_target                        big integer 360M 
  10. parallel_servers_target              integer     16 
  11. pga_aggregate_target                 big integer 0 
  12. sga_target                           big integer 0 

AMM的關鍵在于兩個方面,一個是memory_target和memory_max_target設置非空,另一個是sga_target和pga_aggregate_target參數設置為空,如果要關閉AMM,退化開啟ASMM,就需要進行實例啟動參數的設置.

說明:本篇不是以修改AMM到ASMM作為重點,這部分內容略,留待其他文章進行說明,修改之后,需要重啟服務器,因為一些參數屬于靜態(tài)參數.

  1. SQL> conn / as sysdba 
  2. Connected. 
  3. SQL> show parameter target 
  4. NAME                                 TYPE        VALUE 
  5. ------------------------------------ ----------- ------------------------------ 
  6. archive_lag_target                   integer     0 
  7. db_flashback_retention_target        integer     1440 
  8. fast_start_io_target                 integer     0 
  9. fast_start_mttr_target               integer     0 
  10. memory_max_target                    big integer 0 
  11. memory_target                        big integer 0 
  12. parallel_servers_target              integer     16 
  13. pga_aggregate_target                 big integer 108M 
  14. sga_target                           big integer 252M 

注意,此時共享內存機制才真正實現,我們從ipcs –m中,可以看到真正的共享段.

  1. [oracle@361way dbs]$ ipcs -m 
  2. ------ Shared Memory Segments -------- 
  3. key        shmid      owner      perms      bytes      nattch     status 
  4. 0x00000000 327680     oracle    640        4194304    27 
  5. 0x00000000 360449     oracle    640        260046848  27 
  6. 0x01606d30 393218     oracle    640        4194304    27 

五、經驗腳本計算HugePage最大值

在MOS 401749.1中,Oracle推薦了一個Shell腳本來計算HugePage值,運行這個腳本,將計算出的取值設置在系統參數中.

  1. [oracle@361way upload]$ ls -l | grep huge 
  2. -rwxr-xr-x 1 oracle oinstall   3037 Oct 22 09:42 hugepages_settings.sh 

執(zhí)行腳本,注意這個過程中要求Oracle所有實例,包括數據庫和ASM都啟動、AMM關閉,以及SGA大小超過100M.

  1. [oracle@361way upload]$ ./hugepages_settings.sh 
  2. This script. is provided by Doc ID 401749.1 from My Oracle Support 
  3. (http://support.oracle.com) where it is intended to compute values for 
  4. the recommended HugePages/HugeTLB configuration for the current shared 
  5. memory segments. Before proceeding with the execution please note following: 
  6.  * For ASM instance, it needs to configure ASMM instead of AMM. 
  7.  * The 'pga_aggregate_target' is outside the SGA and 
  8.    you should accommodate this while calculating SGA size. 
  9.  * In case you changes the DB SGA size, 
  10.    as the new SGA will not fit in the previous HugePages configuration, 
  11.    it had better disable the whole HugePages, 
  12.    start the DB with new SGA size and run the script. again. 
  13. And make sure that: 
  14.  * Oracle Database instance(s) are up and running 
  15.  * Oracle Database 11g Automatic Memory Management (AMM) is not setup 
  16.    (See Doc ID 749851.1) 
  17.  * The shared memory segments can be listed by command: 
  18.      # ipcs -m  //Vevb.com 
  19. Press Enter to proceed... 
  20. Recommended setting: vm.nr_hugepages = 67 

將計算出的67更改參數/etc/sysctl.conf

--設置參數

[root@361way ~]# vi /etc/sysctl.conf

(添加內容如下……)

vm.nr_hugepages = 67

"/etc/sysctl.conf" 49L, 1325C written

使用sysctl –p生效設置。

[root@361way ~]# sysctl -p

net.ipv4.ip_forward = 0

(篇幅原因,有省略……)

net.core.wmem_max = 1048586

vm.nr_hugepages = 67

六、HugePage啟動檢驗

設置之后,最好重新啟動服務器,包括Oracle.

  1. [oracle@361way ~]$ ipcs -m 
  2. ------ Shared Memory Segments -------- 
  3. key        shmid      owner      perms      bytes      nattch     status 
  4. 0x00000000 32768      oracle    640        4194304    26 
  5. 0x00000000 65537      oracle    640        260046848  26 
  6. 0x01606d30 98306      oracle    640        4194304    26 
  7. [oracle@361way ~]$ grep Huge /proc/meminfo 
  8. HugePages_Total:    67 
  9. HugePages_Free:      3 
  10. HugePages_Rsvd:      0 
  11. Hugepagesize:     4096 kB 

在meminfo文件中,可以查到HugePages的信息,說明啟用成功.

七、概括

普通物理內存的塊大小是4KB,當物理內存擴展到了8GB以后,所需要管理的內存塊的數量大大增加,然而使用內存都需要花費CPU資源,也就是說程序所用到的內存塊數量越多,系統的管理效率就越低,使用的內存總量過大的情況下還可能會導致分配失敗的情況,而且在內存分配的時候就越會導致CPU資源占用率高.

在Linux系統上對于大內存(Very Large Memory)的情況,提供了Hugepages的技術,就是使用比較大的內存頁面來進行管理,這樣的話,對于現今的高端機型,16GB、32GB的內存來說也能夠比較輕易應付,在Redhat Linux系統上,一個內存頁面的尺寸是2MB.

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 靖边县| 元谋县| 乾安县| 鸡西市| 深州市| 孙吴县| 公主岭市| 石渠县| 扎鲁特旗| 双峰县| 大关县| 四会市| 玉林市| 玉环县| 瑞昌市| 安康市| 鄢陵县| 中宁县| 离岛区| 若尔盖县| 柳江县| 文化| 钟祥市| 印江| 新营市| 宕昌县| 福贡县| 谢通门县| 恭城| 潞西市| 诸暨市| 商城县| 朔州市| 密山市| 罗甸县| 金华市| 石景山区| 鹤峰县| 兴业县| 兖州市| 建水县|