KSMが機能しない理由を誰かが私に説明できますか?それは、現在私のカーネルがRAM使用率を下げるために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-23-汎用
buntu 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
KSMDは、アプリケーションソフトウェアがmadvise(MADV_MERGEABLE)
を呼び出して指示しない限り、何もしません。ほとんどの場合、KSMDのサービスを使用するアプリケーションソフトウェアを使用していません。
MADV_MERGEABLE (Linux 2.6.32以降):
Addrとlengthで指定された範囲のページに対してKernelSamepage Merging(KSM)を有効にします。カーネルは、マージ可能としてマークされたユーザーメモリの領域を定期的にスキャンし、同じコンテンツのページを探します。これらは、単一の書き込み保護されたページに置き換えられます(プロセスが後でページのコンテンツを更新する必要がある場合は、自動的にコピーされます)。 KSMはプライベート匿名ページのみをマージします(mmap(2)を参照)。
KSM機能は、同じデータの多くのインスタンスを生成するアプリケーション(KVMなどの仮想化システムなど)を対象としています。それは多くの処理能力を消費する可能性があります。注意して使用してください。詳細については、カーネルソースファイルDocumentation/vm /ksm.txtを参照してください。 MADV_MERGEABLEおよびMADV_UNMERGEABLE操作は、カーネルが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.3LTSおよびUbuntu15.04ボックスでは、値は0
。 Kernel Samepage Merging
カーネルドキュメント :
カーネル同じページのマージ機能の使用方法
run - set 0 to stop ksmd from running but keep merged pages, set 1 to run ksmd e.g. "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)