لینوکس ۳۰۵؛ شب ۳: CPU flags و مجازیسازی تودرتو
فهرست نوشته
دیدن vmx یا svm بهتنهایی تضمین اجرای KVM نیست. امشب مسیر CPU تا /dev/kvm را بررسی میکنیم و محدودیت nested virtualization را ثبت میکنیم.
این جلسه بخشی از دورهٔ لینوکس ۳۰۵ در ۶۰ شب است.
جایگاه در دوره: هدفهای 351.1، 351.3 آزمون 305-300.
محیط: hv-a با x86_64؛ اگر خودش VM است، hypervisor بیرونی باید nested را پشتیبانی و expose کند. تغییر تنظیم بیرونی با console و VM خاموش انجام میشود.
lscpu
rg -m 1 'vmx|svm' /proc/cpuinfo
lsmod
ls -l /dev/kvm
vmx معمولاً قابلیت Intel و svm قابلیت AMD را نشان میدهد. moduleها kvm و بسته به CPU، kvm_intel یا kvm_amd هستند؛ نامهای با خط تیره نیز در واژگان آزمون دیده میشوند.
سه شرط جدا#
CPU/firmware باید قابلیت را بدهد، kernel module باید کار کند و حساب اجراکننده باید /dev/kvm را باز کند. نبود flag در host داخل VM میتواند ناشی از policy بیرونی باشد؛ نصب دوبارهٔ QEMU آن را اصلاح نمیکند.
test -r /dev/kvm && test -w /dev/kvm
id
sudo journalctl -k -b --no-pager
test موفق خروجی ندارد. گروه kvm به device مربوط است؛ گروه libvirt به مدیریت daemon مربوط میشود و قدرت بیشتری میدهد. بعد از تغییر گروه نشست تازه لازم است؛ chmod 666 راه حل نیست.
فایل parameter nested مربوط به CPU را فقط اگر وجود دارد بخوان. مقدار آن تضمین پشتیبانی همهٔ featureها نیست. تغییر module/boot با مستندات همان kernel انجام میشود؛ KVM را هنگام اجرای VMها unload نکن.
آزمون و بازگشت: در شب ۱۲ اجرای -accel kvm را واقعاً بسنج. اگر فقط TCG ممکن است، آن شاخه را کندتر و بدون نتیجهٔ migration سختافزاری ثبت کن. تنظیم nested را در hypervisor بیرونی برگردان.
منبع: KVM nested ، API دستگاه KVM .