在Linux系统上保留hugepages
我的VMWare来宾系统详细信息:在Linux系统上保留hugepages,linux,linux-kernel,dpdk,huge-pages,Linux,Linux Kernel,Dpdk,Huge Pages,我的VMWare来宾系统详细信息: Linux 2.6.32-358.el6.x86_64 (RH 6.4 - Santiago) # cat /proc/meminfo MemTotal: 8058796 kB MemFree: 5145692 kB Buffers: 32320 kB Cached: 291312 kB SwapCached: 0 kB Active: 152465
Linux 2.6.32-358.el6.x86_64 (RH 6.4 - Santiago)
# cat /proc/meminfo
MemTotal: 8058796 kB
MemFree: 5145692 kB
Buffers: 32320 kB
Cached: 291312 kB
SwapCached: 0 kB
Active: 1524652 kB
Inactive: 192444 kB
Active(anon): 1393628 kB
Inactive(anon): 1196 kB
Active(file): 131024 kB
Inactive(file): 191248 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 4063224 kB
SwapFree: 4063224 kB
Dirty: 144 kB
Writeback: 0 kB
AnonPages: 1393488 kB
Mapped: 47288 kB
Shmem: 1364 kB
Slab: 52080 kB
SReclaimable: 18572 kB
SUnreclaim: 33508 kB
KernelStack: 3776 kB
PageTables: 15864 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 4063224 kB
Committed_AS: 3101408 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 160248 kB
VmallocChunk: 34359572656 kB
HardwareCorrupted: 0 kB
AnonHugePages: 0 kB
HugePages_Total: 512
HugePages_Free: 240
HugePages_Rsvd: 240
HugePages_Surp: 0
Hugepagesize: 2048 kB
DirectMap4k: 10240 kB
DirectMap2M: 8378368 kB
grub contents:
transparent_hugepage=never default_hugepagesz=2M hugepagesz=2M hugepages=512
# sysctl -a | grep vm
vm.overcommit_memory = 0
vm.panic_on_oom = 0
vm.oom_kill_allocating_task = 0
vm.extfrag_threshold = 500
vm.oom_dump_tasks = 1
vm.would_have_oomkilled = 0
vm.overcommit_ratio = 0
vm.page-cluster = 3
vm.dirty_background_ratio = 10
vm.dirty_background_bytes = 0
vm.dirty_ratio = 20
vm.dirty_bytes = 0
vm.dirty_writeback_centisecs = 500
vm.dirty_expire_centisecs = 3000
vm.nr_pdflush_threads = 0
vm.swappiness = 60
vm.nr_hugepages = 512
vm.nr_hugepages_mempolicy = 512
vm.hugetlb_shm_group = 0
vm.hugepages_treat_as_movable = 0
vm.nr_overcommit_hugepages = 0
vm.lowmem_reserve_ratio = 256 256 32
vm.drop_caches = 0
vm.min_free_kbytes = 2048
vm.extra_free_kbytes = 0
vm.percpu_pagelist_fraction = 0
vm.max_map_count = 65530
vm.laptop_mode = 0
vm.block_dump = 0
vm.vfs_cache_pressure = 100
vm.legacy_va_layout = 0
vm.zone_reclaim_mode = 0
vm.min_unmapped_ratio = 1
vm.min_slab_ratio = 5
vm.stat_interval = 1
vm.mmap_min_addr = 4096
vm.numa_zonelist_order = default
vm.scan_unevictable_pages = 0
vm.memory_failure_early_kill = 0
vm.memory_failure_recovery = 1
我的应用程序需要在启动时抓取尽可能多的大页面,但HugePages_Free等于HugePages_Rsvd这一事实意味着它无法保留任何页面
原因是什么?如果有其他应用程序,我如何禁用对hugepages的保留
谢谢
原因是什么?如果有其他应用程序,我如何禁用对hugepages的保留
原因是Linux使用巨大的页面进行分配和内存映射。请查看mmmap(2)(MAP_HUGETLB标志)、madvice(2)(MADV_HUGEPAGE标志)和透明巨型页面:
因此,基本上这是因为在您的系统上运行的任何应用程序都可能会要求系统使用巨大的页面,甚至Linux本身可能会透明地将您的分配分配给巨大的页面
因此,要禁用所有这些隐式用法,可以查看/sys/kernel/mm/transparent\u hugepage/enabled
另一方面,您可能会考虑在应用程序启动前分配大页面。在没有任何大型页面的情况下运行系统,然后使用以下配置:
echo 512 > /proc/sys/vm/nr_hugepages
并立即运行应用程序。这将增加巨大页面仅可用于您的应用程序的可能性。在我的grub配置中,如上所述,THP被禁用:transparent_hugepage=neveraldo,为什么空闲页面的数量等于保留页面的数量?