WDS TFTP Maximum Block Size and Variable Window Extension

This is a quick post to show the performance benefits of TFTP block sizes and Variable Window Extensions. Please note that my tests were brief and not scientific at all but the results were good enough for me! ūüôā

Our WDS server is running on a 2012 R2 VM. Client connected via ethernet cable and PXE booting over UEFI.

The boot image was about 1.6GB in size and I timed the tests from the moment the image started loading to the moment the screen went black (so basically the entire image download)

Before I share the results it’s worth knowing what happens when you change the TFTP block size and variable window extension options.

TFTP (trivial file transfer protocol) is the protocol used to download the boot image on the client from the WDS server.

Imagine making a delivery of a thousand boxes from A to B. You either have a choice of carrying one block at a time which means a thousand trips OR you can carry 100 blocks at a time which means you only need to make ten trips Рthis balance is essentially what you change when tweaking the maximum block size option (how many bytes the client will download for each request). The default was 0 on my Server 2012 R2 installation.

The variable window extension (if enabled) allows the client and server to negotiate larger or smaller windows for transfers. If the line quality is good and packets are getting through okay then a larger window size (larger window = faster transfer) is negotiated. If the line quality is bad and a lot of packets are dropped then the window size is decreased which means the transfer takes longer but is more stable. The default was enabled on my Server 2012 R2 installation.

So here are the results:

Maximum Block Size 0 (default) with Variable Window Extension Enabled (default): 2 minutes, 56 seconds

Maximum Block Size 8192 with Variable Window Extension Enabled (default): 2 minutes, 56 seconds

Maximum Block Size 0/8192 with Variable Window Extension Disabled: 9 minutes, 28 seconds

So as you can see, the variable window extension makes a BIG difference when downloading the boot image. The maximum block size for me was negligible – I assume 0 means what ever the client requests will be allowed. I suspect for networks with Jumbo frames enabled will be able to play with this to get a faster transfer but I have not tried with Jumbo frames.