Skip to content

Commit b240eab

Browse files
aotcheremergify[bot]
authored andcommitted
NetworkPkg: Increase HTTP buffer size and enable TCP window scaling
REF: https://bugzilla.tianocore.org/show_bug.cgi?id=4505 This gives something like ~3 fold throughput boost. Cc: Saloni Kasbekar <saloni.kasbekar@intel.com> Cc: Zachary Clark-williams <zachary.clark-williams@intel.com> Signed-off-by: Andrei Otcheretianski <andrei.otcheretianski@intel.com> Reviewed-by: Saloni Kasbekar <saloni.kasbekar@intel.com> Acked-by: Michael D Kinney <michael.d.kinney@intel.com>
1 parent d4ae5df commit b240eab

File tree

3 files changed

+27
-25
lines changed

3 files changed

+27
-25
lines changed

NetworkPkg/HttpBootDxe/HttpBootClient.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
1010
#ifndef __EFI_HTTP_BOOT_HTTP_H__
1111
#define __EFI_HTTP_BOOT_HTTP_H__
1212

13-
#define HTTP_BOOT_BLOCK_SIZE 1500
13+
#define HTTP_BOOT_BLOCK_SIZE 32000
1414
#define HTTP_USER_AGENT_EFI_HTTP_BOOT "UefiHttpBoot/1.0"
1515
#define HTTP_BOOT_AUTHENTICATION_INFO_MAX_LEN 255
1616

NetworkPkg/HttpDxe/HttpProto.c

Lines changed: 25 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1073,18 +1073,19 @@ HttpConfigureTcp4 (
10731073
Tcp4AP->ActiveFlag = TRUE;
10741074
IP4_COPY_ADDRESS (&Tcp4AP->RemoteAddress, &HttpInstance->RemoteAddr);
10751075

1076-
Tcp4Option = Tcp4CfgData->ControlOption;
1077-
Tcp4Option->ReceiveBufferSize = HTTP_BUFFER_SIZE_DEAULT;
1078-
Tcp4Option->SendBufferSize = HTTP_BUFFER_SIZE_DEAULT;
1079-
Tcp4Option->MaxSynBackLog = HTTP_MAX_SYN_BACK_LOG;
1080-
Tcp4Option->ConnectionTimeout = HTTP_CONNECTION_TIMEOUT;
1081-
Tcp4Option->DataRetries = HTTP_DATA_RETRIES;
1082-
Tcp4Option->FinTimeout = HTTP_FIN_TIMEOUT;
1083-
Tcp4Option->KeepAliveProbes = HTTP_KEEP_ALIVE_PROBES;
1084-
Tcp4Option->KeepAliveTime = HTTP_KEEP_ALIVE_TIME;
1085-
Tcp4Option->KeepAliveInterval = HTTP_KEEP_ALIVE_INTERVAL;
1086-
Tcp4Option->EnableNagle = TRUE;
1087-
Tcp4CfgData->ControlOption = Tcp4Option;
1076+
Tcp4Option = Tcp4CfgData->ControlOption;
1077+
Tcp4Option->ReceiveBufferSize = HTTP_BUFFER_SIZE_DEAULT;
1078+
Tcp4Option->SendBufferSize = HTTP_BUFFER_SIZE_DEAULT;
1079+
Tcp4Option->MaxSynBackLog = HTTP_MAX_SYN_BACK_LOG;
1080+
Tcp4Option->ConnectionTimeout = HTTP_CONNECTION_TIMEOUT;
1081+
Tcp4Option->DataRetries = HTTP_DATA_RETRIES;
1082+
Tcp4Option->FinTimeout = HTTP_FIN_TIMEOUT;
1083+
Tcp4Option->KeepAliveProbes = HTTP_KEEP_ALIVE_PROBES;
1084+
Tcp4Option->KeepAliveTime = HTTP_KEEP_ALIVE_TIME;
1085+
Tcp4Option->KeepAliveInterval = HTTP_KEEP_ALIVE_INTERVAL;
1086+
Tcp4Option->EnableNagle = TRUE;
1087+
Tcp4Option->EnableWindowScaling = TRUE;
1088+
Tcp4CfgData->ControlOption = Tcp4Option;
10881089

10891090
if ((HttpInstance->State == HTTP_STATE_TCP_CONNECTED) ||
10901091
(HttpInstance->State == HTTP_STATE_TCP_CLOSED))
@@ -1156,17 +1157,18 @@ HttpConfigureTcp6 (
11561157
IP6_COPY_ADDRESS (&Tcp6Ap->StationAddress, &HttpInstance->Ipv6Node.LocalAddress);
11571158
IP6_COPY_ADDRESS (&Tcp6Ap->RemoteAddress, &HttpInstance->RemoteIpv6Addr);
11581159

1159-
Tcp6Option = Tcp6CfgData->ControlOption;
1160-
Tcp6Option->ReceiveBufferSize = HTTP_BUFFER_SIZE_DEAULT;
1161-
Tcp6Option->SendBufferSize = HTTP_BUFFER_SIZE_DEAULT;
1162-
Tcp6Option->MaxSynBackLog = HTTP_MAX_SYN_BACK_LOG;
1163-
Tcp6Option->ConnectionTimeout = HTTP_CONNECTION_TIMEOUT;
1164-
Tcp6Option->DataRetries = HTTP_DATA_RETRIES;
1165-
Tcp6Option->FinTimeout = HTTP_FIN_TIMEOUT;
1166-
Tcp6Option->KeepAliveProbes = HTTP_KEEP_ALIVE_PROBES;
1167-
Tcp6Option->KeepAliveTime = HTTP_KEEP_ALIVE_TIME;
1168-
Tcp6Option->KeepAliveInterval = HTTP_KEEP_ALIVE_INTERVAL;
1169-
Tcp6Option->EnableNagle = TRUE;
1160+
Tcp6Option = Tcp6CfgData->ControlOption;
1161+
Tcp6Option->ReceiveBufferSize = HTTP_BUFFER_SIZE_DEAULT;
1162+
Tcp6Option->SendBufferSize = HTTP_BUFFER_SIZE_DEAULT;
1163+
Tcp6Option->MaxSynBackLog = HTTP_MAX_SYN_BACK_LOG;
1164+
Tcp6Option->ConnectionTimeout = HTTP_CONNECTION_TIMEOUT;
1165+
Tcp6Option->DataRetries = HTTP_DATA_RETRIES;
1166+
Tcp6Option->FinTimeout = HTTP_FIN_TIMEOUT;
1167+
Tcp6Option->KeepAliveProbes = HTTP_KEEP_ALIVE_PROBES;
1168+
Tcp6Option->KeepAliveTime = HTTP_KEEP_ALIVE_TIME;
1169+
Tcp6Option->KeepAliveInterval = HTTP_KEEP_ALIVE_INTERVAL;
1170+
Tcp6Option->EnableNagle = TRUE;
1171+
Tcp6Option->EnableWindowScaling = TRUE;
11701172

11711173
if ((HttpInstance->State == HTTP_STATE_TCP_CONNECTED) ||
11721174
(HttpInstance->State == HTTP_STATE_TCP_CLOSED))

NetworkPkg/HttpDxe/HttpProto.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
3737
//
3838
#define HTTP_TOS_DEAULT 8
3939
#define HTTP_TTL_DEAULT 255
40-
#define HTTP_BUFFER_SIZE_DEAULT 65535
40+
#define HTTP_BUFFER_SIZE_DEAULT 0x200000
4141
#define HTTP_MAX_SYN_BACK_LOG 5
4242
#define HTTP_CONNECTION_TIMEOUT 60
4343
#define HTTP_DATA_RETRIES 12

0 commit comments

Comments
 (0)