tech_memo / linux / memory / hugepage


tech_memo/linux

HugePage?設定方法

  • /etc/sysctl.confに記述。vm.hugetlb_shm_groupにはHugePage?を有効化したいユーザのGroupId?を指定。(sysctl -pは下記の設定の後。要注意)
    vm.nr_hugepages = 8500
    
    #  Need to set JBoss Process User Group
    vm.hugetlb_shm_group = 1004
  • /etc/security/limits.confに以下を記述。指定したサイズだけなるべくmemoryのswap-in-outをさせないようにする。サイズは vm.nr_hugepages × Hugepagesizeよりちょっとだけ小さいサイズを指定する。
  • ユーザ名は上記のvm.hugetlb_shm_groupに属するユーザ。
    testuser soft memlock 17408000
    testuser hard memlock 17408000
  • 上記二つを設定した後に
    #sync
    #echo 3 > /proc/sys/vm/drop_caches
    #sysctl -p
  • 設定確認
    • cat /proc/meminfoでHugePages_Totalが/etc/sysctl.confで指定したvm.nr_hugepagesの値になっているかを確認する。

JVM HugePage? Option

  • -XX:+UseLargePages?を付加

HugePage?見方

  • /proc/meminfoからHugepagesizeがわかる。(Hugepageの設定がされているいないにかかわらず、表示される。Redhat5.5は。6系はまた別のお話。)
    Hugepagesize:     2048 kB
  • /proc/meminfoからLargePage?設定が行われているか判断できる
    HugePages_Total:  6144
  • LargePage?設定をするとここの数値が使われる。(defaultは0)
  • HugePage_Total x page size = HugePage?で確保されてるメモリ量
  • HugePages_Total - HugePages_Free = 使用済みHugePage?
  • LargePage?設定有と無の/proce/meminfoの違い
    • LargePage?有(testserver11)
      MemTotal:     51518628 kB
      MemFree:      28269784 kB
      Buffers:        366400 kB
      Cached:        9812284 kB
      SwapCached:          0 kB
      Active:        6831612 kB
      Inactive:      3400868 kB
      HighTotal:           0 kB
      HighFree:            0 kB
      LowTotal:     51518628 kB
      LowFree:      28269784 kB
      SwapTotal:    16777208 kB
      SwapFree:     16777208 kB
      Dirty:             240 kB
      Writeback:           0 kB
      AnonPages:       53684 kB
      Mapped:          18288 kB
      Slab:           393824 kB
      PageTables:       5644 kB
      NFS_Unstable:        0 kB
      Bounce:              0 kB
      CommitLimit:  36245064 kB
      Committed_AS:   221804 kB
      VmallocTotal: 34359738367 kB
      VmallocUsed:    270988 kB
      VmallocChunk: 34359466871 kB
      HugePages_Total:  6144
      HugePages_Free:   6144
      HugePages_Rsvd:      0
      Hugepagesize:     2048 kB 
  • LargePage?無(testserver12)
    MemTotal:     51518628 kB
    MemFree:      39516360 kB
    Buffers:        290040 kB
    Cached:        8259856 kB
    SwapCached:          0 kB
    Active:        7153216 kB
    Inactive:      4445184 kB
    HighTotal:           0 kB
    HighFree:            0 kB
    LowTotal:     51518628 kB
    LowFree:      39516360 kB
    SwapTotal:    16777208 kB
    SwapFree:     16777208 kB
    Dirty:            3984 kB
    Writeback:           0 kB
    AnonPages:     3048860 kB
    Mapped:         880692 kB
    Slab:           330420 kB
    PageTables:      33304 kB
    NFS_Unstable:        0 kB 
    Bounce:              0 kB
    CommitLimit:  42536520 kB
    Committed_AS:  7934784 kB
    VmallocTotal: 34359738367 kB
    VmallocUsed:    270988 kB
    VmallocChunk: 34359466871 kB
    HugePages_Total:     0
    HugePages_Free:      0
    HugePages_Rsvd:      0
    Hugepagesize:     2048 kB

HugePage?解除方法

  • 一時解除
    [root@testserver13 ~]# sysctl -w vm.nr_hugepages=0
    vm.nr_hugepages = 0
    [root@testserver13 ~]# tail -4 /proc/meminfo
    HugePages_Total:     0
    HugePages_Free:      0
    HugePages_Rsvd:      0
    Hugepagesize:     2048 kB
  • 永続解除は上記+sysctl.confの値を書き換え。(再起動後戻らないように)

Transparent Hugepage