13.2. 解决方案
使用这个部分来调查和配置仿真程序线程固定。
13.2.1. qemu-kvm Emulator Threads 复制链接链接已复制到粘贴板!
复制链接链接已复制到粘贴板!
仿真程序线程处理虚拟机硬件模拟的中断请求和非阻塞进程。未运行 vCPU 的线程是 qemu-kvm 仿真程序线程。请参见以下示例。
[root@overcloud-compute-0 ~]# ps -Tp `pgrep -f instance-00000009`
PID SPID TTY TIME CMD
364936 364936 ? 00:00:02 qemu-kvm
364936 364946 ? 00:00:00 qemu-kvm
364936 364952 ? 00:00:52 CPU 0/KVM
364936 364953 ? 00:00:26 CPU 1/KVM
364936 364954 ? 00:00:30 CPU 2/KVM
364936 364956 ? 00:00:00 vnc_worker
由于 Linux CFS(完全公平调度程序), 模拟程序线程通常会定期从一个 pCPU 移到另一个(在 libvirt 的仿真器中定义)中。
在 NFV 环境中,如果您使用 isolcpus 参数配置仿真程序线程时,您可能会遇到问题,因为这种内核配置会禁用这些 CPU 上的 CFS 调度。如果您不使用 isolcpus 参数,可以在仿真程序线程中断正在处理数据包的 CPU 时遇到数据包丢失。
仿真程序线程示例包括:
- qemu-kvm 线程
- vnc_worker 线程
- vhost-<qemu-kvm PID> 内核线程(使用 virtio-net(虚拟机监控程序上的内核网络)