任何人都可以向我解释为什么KSM不起作用,这意味着目前我的内核不利用KSM来降低内存使用率。
grep KSM /boot/config-3.2.0-23-generic CONFIG_KSM=y cat /sys/kernel/mm/ksm/pages_shared 0 cat /sys/kernel/mm/ksm/pages_sharing 0 cat /sys/kernel/mm/ksm/pages_unshared 0
内核:3.2.0-23generics
Ubuntu 12.04 LTS 64位桌面
免费-m
total used free shared buffers cached Mem: 1964 1883 81 0 11 228 -/+ buffers/cache: 1644 320 Swap: 2008 485 1523
ipcs -m
------ Shared Memory Segments -------- key shmid owner perms bytes nattch status 0x00000000 0 myexperiments 600 393216 2 dest 0x00000000 2490369 myexperiments 600 393216 2 dest 0x00000000 98306 myexperiments 600 393216 2 dest 0x00000000 2523139 myexperiments 600 393216 2 dest 0x00000000 13008900 myexperiments 666 262080 1 dest 0x00000000 1245189 myexperiments 666 4 2 dest 0x00000000 1277958 myexperiments 666 4 1 dest 0x00000000 6520839 myexperiments 600 393216 2 dest 0x00000000 14811144 myexperiments 666 1277760 3 dest 0x00000000 12648458 myexperiments 666 300000 1 dest 0x00000000 8060939 myexperiments 666 300000 1 dest 0x00000000 12943373 myexperiments 666 300000 2 dest 0x00000000 12976142 myexperiments 666 262080 2 dest 0x00000000 13271055 myexperiments 666 300000 2 dest
除非应用软件通过调用madvise(MADV_MERGEABLE)告诉它,否则KSMD将不会执行任何操作。 很可能,您没有使用任何使用KSMD服务的应用程序软件。
MADV_MERGEABLE (自Linux 2.6.32起):
为由addr和length指定的范围内的页面启用Kernel Samepage Merging(KSM)。 内核会定期扫描已标记为可合并的用户内存区域,以查找具有相同内容的页面。 这些被一个写保护页面(如果一个进程后来想要更新页面的内容,它会被自动复制)所取代。 KSM仅合并私人匿名页面(请参阅mmap(2))。
KSMfunction旨在用于生成相同数据的多个实例的应用程序(例如,诸如KVM的虚拟化系统)。 它会消耗大量的处理能力; 小心使用。 有关更多详细信息,请参阅内核源文件Documentation / vm / ksm.txt。 MADV_MERGEABLE和MADV_UNMERGEABLE操作仅在内核configuration了CONFIG_KSM时才可用。
除了David Schwartz所说的关于应用程序通过madvise定义哪些页面可能被授权合并的需求之外 ,还有一个设置可以在Ubuntu上激活以允许ksm执行其工作:
sudo bash -c "echo 1 > /sys/kernel/mm/ksm/run"
您可以在当前值之前检查: cat /sys/kernel/mm/ksm/run在我的Ubuntu 14.04.3 LTS和Ubuntu 15.04框中运行,值为0 。 以下是根据Kernel Samepage Merging内核文档的不同值:
如何使用Kernel Samepage Mergingfunction
run - set 0 to stop ksmd from running but keep merged pages, set 1 to run ksmd eg "echo 1 > /sys/kernel/mm/ksm/run", set 2 to stop ksmd and unmerge all pages currently merged, but leave mergeable areas registered for next run Default: 0 (must be changed to 1 to activate KSM, except if CONFIG_SYSFS is disabled)