web-dev-qa-db-ja.com

Ubuntu 12.04でカーネル共有メモリが0になるのはなぜですか?

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
4
Kevin Parker

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で構成されている場合にのみ使用できます。

7
David Schwartz

それに加えて 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ボックスでは、値は0Kernel 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)
1
Huygens