[syslinux] Problem with 90MB Initrd
Patrick Masotta
masottaus at yahoo.com
Sat Sep 26 10:36:16 PDT 2015
>>>>>
>>>>
>
> > BTW if you take a minute and read the first report
> > https://communities.vmware.com/message/2536774
> > You'll realize that VMWare TFTP "surprisingly" does not present slow TFTP transfers
> > when they are driven by MS "bootmgfw.efi"; instead the problem is only shown when
> > transfers are driven by syslinux.efi; At the moment, despite probably VMware not handling
> > the net driver "polling" correctly, I started to wonder if "we" are really handling the EFI Event
> > engine correctly when performing TFTP transfers within syslinux.efi
> >
>
> It might be a difference
> between using the TFTP and using the UDP
> interfaces, or somesuch.
>
> -hpa
> <<<
>
> Sure "bootmgfw.efi" is doing something better than we do about TFTP transfers.
> They:
> 1) do not rely on Service Binding Protocols then old EFI firmware PCs do not complain.
> 2) I think they do better when handling EFI Events and Timers.
>
> The key to see how they do what they do is this bootmgfw.efi function:
> TftppGetImageRegular
> but the task is time consuming; efi environment functions are only referenced by an index
> on a pointer table then knowing what functions they are really calling is not very easy
> to see.
My current inclination is that there's a bug in Syslinux's TFTP+UDP
implementation. If it's in the TFTP implementation, lpxelinux.0
should also exhibit issues with larger files (which I seem to recall
but can't be certain at the moment).
-Gene
<<<<<
It seems today most of the EFI FW producers test their stuff
mainly against MS bootmgfw.efi. If everything works well with it
then no deeper testing is performed.
If this is really the case it would be very difficult to determine if the
problem is located in syslinux.efi or in some not compliant firmware
(i.e. HP, VMware, etc).
For all of the above I think we should really understand what bootmgfw.efi
does and avoid (when possible) other experiments in the EFI arena.
In the past few days I have been comparing bootmgfw.efi and syslinux.efi
TFTP strategies and these are differences I've found so far:
1) bootmgfw.efi uses the UDP capabilities of EFI_PXE_BASE_CODE_PROTOCOL (PXEbc
is layered on top of an EFI_MANAGED_NETWORK_PROTOCOL protocol in order to
perform packet level transactions)
_UdpFunctionTable
_UdpOpen()
_UdpClose()
_UdpRead()
_UdpWrite()
_UdpGetInformation()
_UdpSetInformation()
on the other hand syslinux.efi uses EFI_UDP4_SERVICE_BINDING_PROTOCOL/EFI_UDP4_PROTOCOL instead.
About PXEbc Peter has recently said:
> The problem with the pxebc is that it only supports one concurrent TFTP
> connection, and Syslinux expects to be able to keep multiple files open
> at the same time.
> http://www.syslinux.org/archives/2015-August/024025.html
I wonder why should syslinux.efi ever need to TFTP transfer more than one file simultaneously?
2) when receiving TFTP blocks bootmgfw.efi uses asynchronous "timers" per block without "any"
callback function and the timeout seems to be constant; always 2 seconds.
On the other hand syslinux.efi uses a combination of synchronous timers (TimerPeriodic)
with callback function to calculate "jiffies" which is used to determine the increasing
receive timeout (based on a table).
The reception of every block also creates an event triggered by EFI_EVENT_NOTIFY which calls
a callback function (udp4_cb()) just to change a status (cb_status). Next we keep polling the
cb_status variable while calling EFI_UDP4_PROTOCOL.Poll()to speed things up.
So far I have been focusing my analysis on the EFI/UDP side of things because Wireshark
traffic captures shown a pretty constant heavy delay (under VMware) between the reception of a data
block and the corresponding ACK hitting the wire; that doesn't look like a problem on the TFTP algorithm.
I think we should probably reconsider the EFI/UDP approach of syslinux.efi.
What do you guys think?
Best,
Patrick
More information about the Syslinux
mailing list