We are facing issue of httpboot takes more time during large iso file downloading.
The issue is reported on the customer side. The HTTP/HTTPs takes long time to download the RHEL ISO image from HTTP/HTTPs servers.
Tried with different cards – Intel x810/x710/MLOM, Mellanox and Broad com adapters. But this issue is always reproducible with all the adapters.
The issue is caused due to the changes made in HttpProto.h, HttpProto.c , HttpBootClient.c file. The changes are given below,
After reverting the changes, the issue is not reproduced.
From our side we tried to reproduce the issue. With change HTTP_BOOT_BLOCK_SIZE as 32000 and HTTP_BUFFER_SIZE_DEAULT as 0x200000. It took 23minutes 40seconds to download the RHEL ISO (11.5 GB) through private network from local HTTP server. With reverted changes
HTTP_BOOT_BLOCK_SIZE as1500 and HTTP_BUFFER_SIZE_DEAULT as 65535. It took 17 minutes 15 seconds to download the RHEL ISO (11.5 GB) through private network from local HTTP server.
**CAUTION: The e-mail below is from an external source. Please exercise caution before opening attachments, clicking links, or following guidance.**
Merged:
https://nam12.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgithub.com%2Ftianocore%2Fedk2%2Fcommit%2Fb240eab03530f063ef5438497d70a731b19a201e&data=05%7C01%7Csanthoshkumarv%40ami.com%7Cc6667944c43c41e3132b08dbb0ade19d%7C27e97857e15f486cb58e86c2b3040f93%7C1%7C0%7C638298033105005252%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=bMifbtnsYEA6xpgZVDenmtSoa7%2F5%2BC4wETTwnGvxJFk%3D&reserved=0
> -----Original Message-----
> From: Kinney, Michael D <michael.d.kinney@intel.com>
> Sent: Friday, September 8, 2023 10:07 AM
> To: Kasbekar, Saloni <saloni.kasbekar@intel.com>; Li, Yi1
> <yi1.li@intel.com>; devel@edk2.groups.io
> Cc: Otcheretianski, Andrei <andrei.otcheretianski@intel.com>; Clark-
> williams, Zachary <zachary.clark-williams@intel.com>; Luo, Heng
> <heng.luo@intel.com>; Kinney, Michael D <michael.d.kinney@intel.com>
> Subject: RE: [PATCH] NetworkPkg: Increase HTTP buffer size and enable TCP
> window scaling
>
> Acked-by: Michael D Kinney <michael.d.kinney@intel.com>
>
> > -----Original Message-----
> > From: Kasbekar, Saloni <saloni.kasbekar@intel.com>
> > Sent: Wednesday, September 6, 2023 3:41 PM
> > To: Li, Yi1 <yi1.li@intel.com>; devel@edk2.groups.io; Kinney, Michael D
> > <michael.d.kinney@intel.com>
> > Cc: Otcheretianski, Andrei <andrei.otcheretianski@intel.com>; Clark-
> williams,
> > Zachary <zachary.clark-williams@intel.com>; Luo, Heng
> <heng.luo@intel.com>
> > Subject: RE: [PATCH] NetworkPkg: Increase HTTP buffer size and enable TCP
> > window scaling
> >
> > Mike,
> >
> > Could you help us merge the patch?
> >
> > Thanks,
> > Saloni
> >
> > -----Original Message-----
> > From: Li, Yi1 <yi1.li@intel.com>
> > Sent: Wednesday, September 6, 2023 1:52 AM
> > To: Kasbekar, Saloni <saloni.kasbekar@intel.com>; devel@edk2.groups.io
> > Cc: Otcheretianski, Andrei <andrei.otcheretianski@intel.com>; Clark-
> williams,
> > Zachary <zachary.clark-williams@intel.com>; Luo, Heng
> <heng.luo@intel.com>
> > Subject: RE: [PATCH] NetworkPkg: Increase HTTP buffer size and enable TCP
> > window scaling
> >
> > Hi Saloni and Zachary, can you help to merge this patch? It got
> reviewed-by
> > but not check-in, Thanks!
> >
> > -----Original Message-----
> > From: Kasbekar, Saloni <saloni.kasbekar@intel.com>
> > Sent: Tuesday, July 25, 2023 12:18 PM
> > To: Li, Yi1 <yi1.li@intel.com>; devel@edk2.groups.io
> > Cc: Otcheretianski, Andrei <andrei.otcheretianski@intel.com>; Clark-
> williams,
> > Zachary <zachary.clark-williams@intel.com>
> > Subject: RE: [PATCH] NetworkPkg: Increase HTTP buffer size and enable TCP
> > window scaling
> >
> > Reviewed-by: Saloni Kasbekar <saloni.kasbekar@intel.com>
> >
> > -----Original Message-----
> > From: Li, Yi1 <yi1.li@intel.com>
> > Sent: Thursday, July 20, 2023 10:18 PM
> > To: devel@edk2.groups.io
> > Cc: Li, Yi1 <yi1.li@intel.com>; Otcheretianski, Andrei
> > <andrei.otcheretianski@intel.com>; Kasbekar, Saloni
> > <saloni.kasbekar@intel.com>; Clark-williams, Zachary <zachary.clark-
> > williams@intel.com>
> > Subject: [PATCH] NetworkPkg: Increase HTTP buffer size and enable TCP
> window
> > scaling
> >
> > REF:
https://nam12.safelinks.protection.outlook.com/?url=https%3A%2F%2Fbugzilla.tianocore.org%2Fshow_bug.cgi%3Fid%3D4505&data=05%7C01%7Csanthoshkumarv%40ami.com%7Cc6667944c43c41e3132b08dbb0ade19d%7C27e97857e15f486cb58e86c2b3040f93%7C1%7C0%7C638298033105005252%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C3000%7C%7C%7C&sdata=xMzBMuvcaWmfXYMR3YrTDvGo6x1aCC%2F9WMDUHbeGvW4%3D&reserved=0
> > This gives something like ~3 fold throughput boost.
> >
> > Signed-off-by: Andrei Otcheretianski <andrei.otcheretianski@intel.com>
> > Cc: Saloni Kasbekar <saloni.kasbekar@intel.com>
> > Cc: Zachary Clark-williams <zachary.clark-williams@intel.com>
> > ---
> > NetworkPkg/HttpBootDxe/HttpBootClient.h | 2 +-
> > NetworkPkg/HttpDxe/HttpProto.c | 48 +++++++++++++------------
> > NetworkPkg/HttpDxe/HttpProto.h | 2 +-
> > 3 files changed, 27 insertions(+), 25 deletions(-)
> >
> > diff --git a/NetworkPkg/HttpBootDxe/HttpBootClient.h
> > b/NetworkPkg/HttpBootDxe/HttpBootClient.h
> > index 2fba713679..86a28bc91a 100644
> > --- a/NetworkPkg/HttpBootDxe/HttpBootClient.h
> > +++ b/NetworkPkg/HttpBootDxe/HttpBootClient.h
> > @@ -10,7 +10,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent #ifndef
> > __EFI_HTTP_BOOT_HTTP_H__ #define __EFI_HTTP_BOOT_HTTP_H__
> >
> > -#define HTTP_BOOT_BLOCK_SIZE 1500
> > +#define HTTP_BOOT_BLOCK_SIZE 32000
> > #define HTTP_USER_AGENT_EFI_HTTP_BOOT "UefiHttpBoot/1.0"
> > #define HTTP_BOOT_AUTHENTICATION_INFO_MAX_LEN 255
> >
> > diff --git a/NetworkPkg/HttpDxe/HttpProto.c
> b/NetworkPkg/HttpDxe/HttpProto.c
> > index 33ae622c3f..7dfb82dd2e 100644
> > --- a/NetworkPkg/HttpDxe/HttpProto.c
> > +++ b/NetworkPkg/HttpDxe/HttpProto.c
> > @@ -1073,18 +1073,19 @@ HttpConfigureTcp4 (
> > Tcp4AP->ActiveFlag = TRUE;
> > IP4_COPY_ADDRESS (&Tcp4AP->RemoteAddress, &HttpInstance->RemoteAddr);
> >
> > - Tcp4Option = Tcp4CfgData->ControlOption;
> > - Tcp4Option->ReceiveBufferSize = HTTP_BUFFER_SIZE_DEAULT;
> > - Tcp4Option->SendBufferSize = HTTP_BUFFER_SIZE_DEAULT;
> > - Tcp4Option->MaxSynBackLog = HTTP_MAX_SYN_BACK_LOG;
> > - Tcp4Option->ConnectionTimeout = HTTP_CONNECTION_TIMEOUT;
> > - Tcp4Option->DataRetries = HTTP_DATA_RETRIES;
> > - Tcp4Option->FinTimeout = HTTP_FIN_TIMEOUT;
> > - Tcp4Option->KeepAliveProbes = HTTP_KEEP_ALIVE_PROBES;
> > - Tcp4Option->KeepAliveTime = HTTP_KEEP_ALIVE_TIME;
> > - Tcp4Option->KeepAliveInterval = HTTP_KEEP_ALIVE_INTERVAL;
> > - Tcp4Option->EnableNagle = TRUE;
> > - Tcp4CfgData->ControlOption = Tcp4Option;
> > + Tcp4Option = Tcp4CfgData->ControlOption;
> > + Tcp4Option->ReceiveBufferSize = HTTP_BUFFER_SIZE_DEAULT;
> > + Tcp4Option->SendBufferSize = HTTP_BUFFER_SIZE_DEAULT;
> > + Tcp4Option->MaxSynBackLog = HTTP_MAX_SYN_BACK_LOG;
> > + Tcp4Option->ConnectionTimeout = HTTP_CONNECTION_TIMEOUT;
> > + Tcp4Option->DataRetries = HTTP_DATA_RETRIES;
> > + Tcp4Option->FinTimeout = HTTP_FIN_TIMEOUT;
> > + Tcp4Option->KeepAliveProbes = HTTP_KEEP_ALIVE_PROBES;
> > + Tcp4Option->KeepAliveTime = HTTP_KEEP_ALIVE_TIME;
> > + Tcp4Option->KeepAliveInterval = HTTP_KEEP_ALIVE_INTERVAL;
> > + Tcp4Option->EnableNagle = TRUE;
> > + Tcp4Option->EnableWindowScaling = TRUE;
> > + Tcp4CfgData->ControlOption = Tcp4Option;
> >
> > if ((HttpInstance->State == HTTP_STATE_TCP_CONNECTED) ||
> > (HttpInstance->State == HTTP_STATE_TCP_CLOSED)) @@ -1156,17
> +1157,18
> > @@ HttpConfigureTcp6 (
> > IP6_COPY_ADDRESS (&Tcp6Ap->StationAddress, &HttpInstance-
> > >Ipv6Node.LocalAddress);
> > IP6_COPY_ADDRESS (&Tcp6Ap->RemoteAddress, &HttpInstance-
> >RemoteIpv6Addr);
> >
> > - Tcp6Option = Tcp6CfgData->ControlOption;
> > - Tcp6Option->ReceiveBufferSize = HTTP_BUFFER_SIZE_DEAULT;
> > - Tcp6Option->SendBufferSize = HTTP_BUFFER_SIZE_DEAULT;
> > - Tcp6Option->MaxSynBackLog = HTTP_MAX_SYN_BACK_LOG;
> > - Tcp6Option->ConnectionTimeout = HTTP_CONNECTION_TIMEOUT;
> > - Tcp6Option->DataRetries = HTTP_DATA_RETRIES;
> > - Tcp6Option->FinTimeout = HTTP_FIN_TIMEOUT;
> > - Tcp6Option->KeepAliveProbes = HTTP_KEEP_ALIVE_PROBES;
> > - Tcp6Option->KeepAliveTime = HTTP_KEEP_ALIVE_TIME;
> > - Tcp6Option->KeepAliveInterval = HTTP_KEEP_ALIVE_INTERVAL;
> > - Tcp6Option->EnableNagle = TRUE;
> > + Tcp6Option = Tcp6CfgData->ControlOption;
> > + Tcp6Option->ReceiveBufferSize = HTTP_BUFFER_SIZE_DEAULT;
> > + Tcp6Option->SendBufferSize = HTTP_BUFFER_SIZE_DEAULT;
> > + Tcp6Option->MaxSynBackLog = HTTP_MAX_SYN_BACK_LOG;
> > + Tcp6Option->ConnectionTimeout = HTTP_CONNECTION_TIMEOUT;
> > + Tcp6Option->DataRetries = HTTP_DATA_RETRIES;
> > + Tcp6Option->FinTimeout = HTTP_FIN_TIMEOUT;
> > + Tcp6Option->KeepAliveProbes = HTTP_KEEP_ALIVE_PROBES;
> > + Tcp6Option->KeepAliveTime = HTTP_KEEP_ALIVE_TIME;
> > + Tcp6Option->KeepAliveInterval = HTTP_KEEP_ALIVE_INTERVAL;
> > + Tcp6Option->EnableNagle = TRUE;
> > + Tcp6Option->EnableWindowScaling = TRUE;
> >
> > if ((HttpInstance->State == HTTP_STATE_TCP_CONNECTED) ||
> > (HttpInstance->State == HTTP_STATE_TCP_CLOSED)) diff --git
> > a/NetworkPkg/HttpDxe/HttpProto.h b/NetworkPkg/HttpDxe/HttpProto.h index
> > 620eb39158..012f1f4b46 100644
> > --- a/NetworkPkg/HttpDxe/HttpProto.h
> > +++ b/NetworkPkg/HttpDxe/HttpProto.h
> > @@ -37,7 +37,7 @@ SPDX-License-Identifier: BSD-2-Clause-Patent //
> > #define HTTP_TOS_DEAULT 8
> > #define HTTP_TTL_DEAULT 255
> > -#define HTTP_BUFFER_SIZE_DEAULT 65535
> > +#define HTTP_BUFFER_SIZE_DEAULT 0x200000
> > #define HTTP_MAX_SYN_BACK_LOG 5
> > #define HTTP_CONNECTION_TIMEOUT 60
> > #define HTTP_DATA_RETRIES 12
> > --
> > 2.31.1.windows.1
-The information contained in this message may be confidential and proprietary to American Megatrends (AMI). This communication is intended to be read only by the individual or entity to whom it is addressed or by their designee. If the reader of this message
is not the intended recipient, you are on notice that any distribution of this message, in any form, is strictly prohibited. Please promptly notify the sender by reply e-mail or by telephone at 770-246-8600, and then delete or destroy all copies of the transmission.