나는 이제 qemu-kvm 메모리 오버헤드를 이해하려고 노력하고 있습니다. 호스트 OS에서 -m 8192를 찾을 수 있습니다. 이는 게스트에 8GB의 메모리를 할당했음을 의미합니다.
qemu 2813877 0.5 0.2 30472752 1103620 ? Sl Jan05 1178:13 /usr/libexec/qemu-kvm -name instance-000003db -S -machine pc-i440fx-rhel7.1.0,accel=kvm,usb=off -cpu Haswell,+abm,+pdpe1gb,+rdrand,+f16c,+osxsave,+dca,+pdcm,+xtpr,+tm2,+est,+smx,+vmx,+ds_cpl,+dtes64,+pbe,+tm,+ht,+ss,+acpi,+ds,+vme,-rtm,-hle -m 8192 -realtime mlock=off -smp 4,sockets=4,cores=1,threads=1 -uuid 886db7b2-79b6-4a8a-8b34-4e7001377da9 -smbios type=1,manufacturer=Fedora Project,product=OpenStack Nova,version=12.0.5-2.el7.centos.ustack,serial=168f720b-7801-453d-8d2e-99aed5ade6cd,uuid=886db7b2-79b6-4a8a-8b34-4e7001377da9,family=Virtual Machine -no-user-config -nodefaults -chardev socket,id=charmonitor,path=/var/lib/libvirt/qemu/domain-instance-000003db/monitor.sock,server,nowait -mon chardev=charmonitor,id=monitor,mode=control -rtc base=utc,driftfix=slew -global kvm-pit.lost_tick_policy=discard -no-hpet -no-shutdown -boot strict=on -device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 -drive file=rbd:openstack-00/886db7b2-79b6-4a8a-8b34-4e7001377da9_disk.config:id=admin:key=AQD7kyJQQGoOBhAAqrPAqSopSwPrrfMMomzVdw==:auth_supported=cephx\;none:mon_host=55.3.52.1\:6789\;55.3.52.11\:6789\;55.3.52.21\:6789,if=none,id=drive-ide0-1-1,readonly=on,format=raw,cache=writeback -device ide-cd,bus=ide.1,unit=1,drive=drive-ide0-1-1,id=ide0-1-1 -drive file=rbd:openstack-00/volume-beeea3a3-44c8-4c36-835c-08bfdc9f61db:id=admin:key=AQD7kyJQQGoOBhAAqrPAqSopSwPrrfMMomzVdw==:auth_supported=cephx\;none:mon_host=55.3.52.1\:6789\;55.3.52.11\:6789\;55.3.52.21\:6789,if=none,id=drive-virtio-disk0,format=raw,serial=beeea3a3-44c8-4c36-835c-08bfdc9f61db,cache=writeback -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x4,drive=drive-virtio-disk0,id=virtio-disk0,bootindex=1 -drive file=rbd:openstack-00/volume-3be22eb0-6847-4366-a1ac-fcc8ddd87761:id=admin:key=AQD7kyJQQGoOBhAAqrPAqSopSwPrrfMMomzVdw==:auth_supported=cephx\;none:mon_host=55.3.52.1\:6789\;55.3.52.11\:6789\;55.3.52.21\:6789,if=none,id=drive-virtio-disk1,format=raw,serial=3be22eb0-6847-4366-a1ac-fcc8ddd87761,cache=writeback -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x5,drive=drive-virtio-disk1,id=virtio-disk1 -drive file=rbd:openstack-00/volume-4630e604-d404-4492-b861-44785274595f:id=admin:key=AQD7kyJQQGoOBhAAqrPAqSopSwPrrfMMomzVdw==:auth_supported=cephx\;none:mon_host=55.3.52.1\:6789\;55.3.52.11\:6789\;55.3.52.21\:6789,if=none,id=drive-virtio-disk2,format=raw,serial=4630e604-d404-4492-b861-44785274595f,cache=writeback -device virtio-blk-pci,scsi=off,bus=pci.0,addr=0x6,drive=drive-virtio-disk2,id=virtio-disk2 -netdev tap,fd=31,id=hostnet0,vhost=on,vhostfd=32 -device virtio-net-pci,netdev=hostnet0,id=net0,mac=fa:16:3e:43:9b:d4,bus=pci.0,addr=0x3 -chardev file,id=charserial0,path=/var/lib/nova/instances/886db7b2-79b6-4a8a-8b34-4e7001377da9/console.log -device isa-serial,chardev=charserial0,id=serial0 -chardev pty,id=charserial1 -device isa-serial,chardev=charserial1,id=serial1 -device usb-tablet,id=input0 -vnc 0.0.0.0:2 -k en-us -device cirrus-vga,id=video0,bus=pci.0,addr=0x2 -device virtio-balloon-pci,id=balloon0,bus=pci.0,addr=0x7 -msg timestamp=on
또한 ;; 아래에서 이 메모리 부분을 찾았는데 /proc/pid/smaps
, 이를 통해 8192MB와 동일하다는 것을 알 수 있습니다.
7f6714000000-7f6914000000 rw-p 00000000 00:00 0
Size: 8388608 kB ===>8192MB
Rss: 953304 kB
Pss: 953304 kB
Shared_Clean: 0 kB
Shared_Dirty: 0 kB
Private_Clean: 8508 kB
Private_Dirty: 944796 kB
Referenced: 927352 kB
Anonymous: 953304 kB
AnonHugePages: 839680 kB
Swap: 455556 kB
KernelPageSize: 4 kB
MMUPageSize: 4 kB
Locked: 0 kB
그런데 "free"를 사용하여 게스트 OS에서 메모리 크기를 확인해 보니, 게스트 OS에서는 7872MB밖에 남지 않았습니다.
[root@host-10-3-0-221 ~]# free -m
total used free shared buffers cached
Mem: 7872 950 6921 0 220 303
-/+ buffers/cache: 426 7446
Swap: 8191 0 8191
게스트의 전체 크기가 8192MB 미만인 이유를 알고 싶습니다.
답변1
KVM과 VMWare에서 모두 본 적이 있는데, 그 이유는 하이퍼바이저가 메모리 오버커밋, 동적 할당, 공유 메모리 작동 등 가상 머신의 메모리 오버헤드를 처리하는 데 사용되기 때문입니다.
kvm 관련 문서를 찾지 못했지만 vmware 포럼에 이 문제에 대한 좋은 스레드가 있습니다.https://communities.vmware.com/message/1994605