Copy to ClipboardCopied!Toggle word wrapToggle overflow
Linux CFS(완전히 공정한 스케줄러)로 인해 에뮬레이터 스레드는 일반적으로 libvirt의 에뮬레이터 핀 세트에 정의된 내에서 하나의 pCPU에서 다른 pCPU로 주기적으로 이동합니다.
NFV 컨텍스트에서 isolcpus 매개변수를 사용할 때 에뮬레이터 스레드를 구성하면 문제가 발생할 수 있습니다. 이 커널 구성은 해당 CPU에서 CFS 스케줄링을 비활성화하기 때문입니다. isolcpus 매개변수 를 사용하지 않는 경우 에뮬레이터 스레드가 패킷을 처리하는 CPU를 중단하면 패킷 손실이 발생할 수 있습니다.
Valid THREAD-POLICY values are:
- ``share``: (default) The emulator threads float across the pCPUs
associated to the guest. To place a workload's emulator threads on
a set of isolated physical CPUs, set ``share``` and
``[compute]/cpu_shared_set`` configuration option to the set of
host CPUs that should be used for best-effort CPU resources.
- ``isolate``: The emulator threads are isolated on a single pCPU.
Valid THREAD-POLICY values are:
- ``share``: (default) The emulator threads float across the pCPUs
associated to the guest. To place a workload's emulator threads on
a set of isolated physical CPUs, set ``share``` and
``[compute]/cpu_shared_set`` configuration option to the set of
host CPUs that should be used for best-effort CPU resources.
- ``isolate``: The emulator threads are isolated on a single pCPU.
Copy to ClipboardCopied!Toggle word wrapToggle overflow
DPDK가 인스턴스 내에서 실행되면 패킷 처리가 전적으로 사용자 공간에서 수행됩니다. vCPU0에서 실행되도록 PMD를 예약하지 마십시오. 이는 OS 및 인터럽트 처리용으로 남아 있어야 하기 때문입니다. 인스턴스 내의 PMD CPU는 활성 루프를 실행하고 CPU의 100%가 필요하므로 선점해서는 안 됩니다. 이러한 vCPU 중 하나가 선점된 경우 패킷 손실이 발생할 수 있습니다. 따라서 emulatorpin cpuset은 1 이상 번호가 지정된 가상 CPU를 처리하는 물리적 CPU와 겹치지 않는 방식으로 구성해야 합니다.
인스턴스 내에서 DPDK 네트워킹을 사용하는 경우 에뮬레이터 스레드의 최적 위치는 vCPU 0을 처리하는 pCPU 또는 가상 CPU를 전혀 처리하지 않는 전용 물리적 CPU입니다.
인스턴스 내의 하이퍼바이저 및 DPDK에서 OVS-DPDK를 사용하는 경우 에뮬레이터 스레드를 vCPU 0에 배치합니다.
하이퍼바이저에서 커널 공간 네트워킹을 사용하면 하이퍼바이저에서 패킷 처리가 커널 내에서 실행됩니다.
인스턴스 내에서 DPDK 네트워킹을 사용하는 경우 에뮬레이터 스레드의 최적 위치는 vCPU 0을 처리하는 pCPU 또는 가상 CPU를 처리하지 않는 전용 물리적 CPU입니다.
이 시나리오에서는 vNIC 대기열에 대한 패킷 처리가 하이퍼바이저의 vhost-<qemu-kvm PID> 커널 스레드 내에서 실행됩니다. 트래픽이 많은 경우 이러한 커널 스레드는 상당한 CPU 로드를 생성할 수 있습니다. 에뮬레이터 스레드의 최적 위치는 상황에 따라 결정되어야 합니다.
ps aux | grep vhost-
root 364948 0.0 0.0 0 0 ? S 20:32 0:00 [vhost-364936]
root 364949 0.0 0.0 0 0 ? S 20:32 0:00 [vhost-364936]
root 364950 0.0 0.0 0 0 ? S 20:32 0:00 [vhost-364936]
[root@overcloud-compute-0 ~]# ps aux | grep vhost-
root 364948 0.0 0.0 0 0 ? S 20:32 0:00 [vhost-364936]
root 364949 0.0 0.0 0 0 ? S 20:32 0:00 [vhost-364936]
root 364950 0.0 0.0 0 0 ? S 20:32 0:00 [vhost-364936]
Copy to ClipboardCopied!Toggle word wrapToggle overflow