У меня есть KVM-хост (Linux 3.14.32) с 8 виртуальными машинами. Они перегружены (выделенная для них память больше, чем доступная физическая память на хосте). Однако они потребляют только около 85% физической памяти, что должно оставлять место для кеша. Однако все на хосте работает невыносимо медленно, и бесплатные сообщает, что для кеширования почти не используется память:
total used free shared buffers cached
Mem: 32224 26767 5457 0 0 3
-/+ buffers/cache: 26762 5461
Swap: 1021 414 607
Как видите, 5,5 ГБ потрачены впустую. После закрытия виртуальных машин все возвращается в норму - ядро использует 260 МБ кеш-памяти.
/ proc / meminfo:
MemTotal: 32997976 kB
MemFree: 5543224 kB
MemAvailable: 5584332 kB
Buffers: 2612 kB
Cached: 83876 kB
SwapCached: 72524 kB
Active: 24721804 kB
Inactive: 2214632 kB
Active(anon): 24675412 kB
Inactive(anon): 2175048 kB
Active(file): 46392 kB
Inactive(file): 39584 kB
Unevictable: 0 kB
Mlocked: 0 kB
SwapTotal: 1046520 kB
SwapFree: 622068 kB
Dirty: 84 kB
Writeback: 4 kB
AnonPages: 26806104 kB
Mapped: 28436 kB
Shmem: 488 kB
Slab: 60024 kB
SReclaimable: 25076 kB
SUnreclaim: 34948 kB
KernelStack: 3232 kB
PageTables: 62212 kB
NFS_Unstable: 0 kB
Bounce: 0 kB
WritebackTmp: 0 kB
CommitLimit: 17545508 kB
Committed_AS: 53713960 kB
VmallocTotal: 34359738367 kB
VmallocUsed: 431560 kB
VmallocChunk: 34359138492 kB
HardwareCorrupted: 0 kB
DirectMap4k: 9728 kB
DirectMap2M: 33536000 kB
У меня swappiness установлено на 0. Образы дисков виртуальной машины находятся на LVM с cache = writeback.
Рекомендуется обходить кеш (cache=none
) при использовании устройств RAW. При этом используется режим O_DIRECT, поэтому кеш страницы хоста пропускается, а ввод-вывод происходит непосредственно между буферами пользовательского пространства qemu-kvm и устройством хранения.
QEMU также поддерживает широкий спектр режимов кэширования. Если вы используете необработанные тома или разделы, лучше всего полностью избегать кеширования, что уменьшает количество копий данных и трафик шины.
Ссылка: Настройка KVM
Я бы предположил, что у вас могут быть проблемы с вводом-выводом, а не с памятью. Взгляните на верхнюю часть (проверьте IO_WAIT) и посмотрите, не превышает ли оно ~ 5%.
Также, когда вы меняете местами, может случиться так, что процесс пытается выделить больше, чем он может. Загляните в KSM https://www.kernel.org/doc/Documentation/vm/ksm.txt и он мог бы вывести вас на достойный уровень или попытаться уменьшить выделение ОЗУ на несколько долей и посмотреть, имеет ли это значение.