[ipxe-devel] undi ipxe taking 100% cpu under vmware when boot server is offline
Michael Brown
mbrown at fensystems.co.uk
Wed Oct 19 14:12:52 UTC 2011
On Tuesday 18 Oct 2011 21:30:58 lustu.starrysky.cru at gmail.com wrote:
> I am running ipxe with UNDI driver under VmWare (don't know if the
> driver matters at all).
>
> I consistently see it taking 100% cpu under even when boot server is
> offline.
>
> Searching through the source code I see that cpu_nap() is being used
> exactly for making sure ipxe doesn't take 100% of the guest cpu while
> waiting, which would be too much of the host cpu.
>
> Is there any place where ipxe is still doing busy waiting?
At present, iPXE will only call cpu_nap() when it knows that it is idle, such
as when waiting for command line input. The reason for this is that cpu_nap()
imposes a delay of up to 1/18s (one timer tick) before the next incoming
network packet will be processed, since iPXE doesn't enable interrupts on the
network card.
The upshot of this is that if iPXE is non-idle (e.g. waiting for a DHCP
response) then it will use 100% CPU.
A proper solution to this would probably involve adding an activity counter
(similar in principle to the device usage counter device_keep_count) which is
incremented for each open TCP connection or other object that might rely upon
timely receipt of network traffic. A "sleep" process could then call cpu_nap()
only when the activity counter is at zero.
Michael
More information about the ipxe-devel
mailing list