You can check the ready time histogram of a ENS world using the following command:
sched-stats -w <ENS_WORLD_ID> -t run-state-histo
In the sample output below, the max READY time is 200 ms, which is high enough to cause packet drops.
4503184 4503184 EnsNetWorld-0-15bucket RUN READY WAIT COSTOP NEW ZOMBIE(< 3 us) 0 0 0 0 0 0(< 6 us) 0 0 0 0 0 0(< 11 us) 0 0 0 0 0 0(< 23 us) 0 0 0 0 0 0(< 45 us) 0 0 0 0 0 0(< 91 us) 0 0 0 0 0 0(< 181 us) 0 0 0 0 0 0(< 362 us) 0 0 0 0 0 0(< 725 us) 0 0 0 0 0 0(< 1450 us) 0 340 0 0 0 0(< 2899 us) 0 77 0 0 0 0(< 5799 us) 0 12 0 0 0 0(< 11598 us) 0 5 0 0 0 0(< 23195 us) 0 3 0 0 0 0(< 46391 us) 0 2 0 0 0 0(>= 46391 us) 0 31 0 0 0 0 min (us) 0 1000 0 0 0 0 max (us) 0 200022 0 0 0 0 mean (us) 0 12814 0 0 0 0 Total count: 0 470 0 0 0 0 Total time: 0.000 6.023 0.000 0.000 0.000 0.000
mean (us) 0 12814 0 0 0 0
Total count: 0 470 0 0 0 0
Total time: 0.000 6.023 0.000 0.000 0.000 0.000
When a world is placed on a busy PCPU, we rely on the vCPU migration algorithm to move it to an idle (or less contended) PCPU. However, a flaw in the current algorithm can cause it to repeatedly skip specific types of worlds. As a result, these worlds remain stuck on the busy PCPU for extended periods, causing significant scheduling delays (high READY time).
The issue will be resolved in an upcoming release. Subscribe to this KB to receive update notifications.
The problem can be mitigated by setting PcpuMigrateIdleFeedback to 0.
esxcli system settings advanced set -o /Cpu/PcpuMigrateIdleFeedback -i 0