
Hi Jerome,
On Thu, 25 Jul 2024 at 15:59, Jerome Forissier jerome.forissier@linaro.org wrote:
Add support for setting the TFTP block size. The default value (1468) is fine for Ethernet and allows a better throughput than the TFTP default (512), if the server supports the blksize option of course.
I tested this change with qemu_arm64_lwip_defconfig. The throughput is now 875 KiB/s vs. 313 KiB/s before. That is still a low number, but I think we can't expect more without implementing the windowsize option.
Signed-off-by: Jerome Forissier jerome.forissier@linaro.org
net/Kconfig | 20 ++++++++++---------- net/lwip/tftp.c | 2 ++ 2 files changed, 12 insertions(+), 10 deletions(-)
diff --git a/net/Kconfig b/net/Kconfig index 952690d677d..7e5406bb923 100644 --- a/net/Kconfig +++ b/net/Kconfig @@ -69,16 +69,6 @@ config SYS_FAULT_ECHO_LINK_DOWN this option is active, then CONFIG_SYS_FAULT_MII_ADDR also needs to be configured.
-config TFTP_BLOCKSIZE
int "TFTP block size"
default 1468
help
Default TFTP block size.
The MTU is typically 1500 for ethernet, so a TFTP block of
1468 (MTU minus eth.hdrs) provides a good throughput with
almost-MTU block sizes.
You can also activate CONFIG_IP_DEFRAG to set a larger block.
Why do you have to move the config option?
Cheers /Ilias
config TFTP_PORT bool "Set TFTP UDP source/destination ports via the environment" help @@ -263,4 +253,14 @@ config SYS_RX_ETH_BUFFER since all buffers can be full shortly after enabling the interface on high Ethernet traffic.
+config TFTP_BLOCKSIZE
int "TFTP block size"
default 1468
help
Default TFTP block size.
The MTU is typically 1500 for ethernet, so a TFTP block of
1468 (MTU minus eth.hdrs) provides a good throughput with
almost-MTU block sizes.
You can also activate CONFIG_IP_DEFRAG to set a larger block.
endif # if NET || NET_LWIP diff --git a/net/lwip/tftp.c b/net/lwip/tftp.c index 78de0bd0dba..1fe948c84ec 100644 --- a/net/lwip/tftp.c +++ b/net/lwip/tftp.c @@ -136,6 +136,8 @@ static int tftp_loop(struct udevice *udev, ulong addr, char *fname, if (!(err == ERR_OK || err == ERR_USE)) log_err("tftp_init_client err: %d\n", err);
tftp_client_set_blksize(CONFIG_TFTP_BLOCKSIZE);
ctx.start_time = get_timer(0); err = tftp_get(&ctx, &srvip, srvport, fname, TFTP_MODE_OCTET); /* might return different errors, like routing problems */
-- 2.40.1