<div dir="ltr">Thanks for the help. It worked out with the client setting keepalive=true.<div>Though curl is pre-enabled with keepalive=true. Below curl command worked out to avoid TLS handshake in subsequent calls.</div><div><span style="color:rgb(80,0,80)">curl -k -H "X-Auth-Token: $token" -H "Content-Type: application/json" -X GET https://${bmc}/redfish/v1/Syst</span><span style="color:rgb(80,0,80)">ems/system </span><span style="color:rgb(80,0,80)">https://${bmc}/redfish/v1/Syst</span><span style="color:rgb(80,0,80)">ems/system</span><br></div><div><br></div><div>Thanks,</div><div>Sharad</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, 6 Oct 2021 at 00:23, Ed Tanous <<a href="mailto:edtanous@google.com">edtanous@google.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Tue, Oct 5, 2021 at 11:48 AM John Broadbent <<a href="mailto:jebr@google.com" target="_blank">jebr@google.com</a>> wrote:<br>
><br>
><br>
><br>
> On Tue, Oct 5, 2021 at 1:42 AM sharad yadav <<a href="mailto:sharad.openbmc@gmail.com" target="_blank">sharad.openbmc@gmail.com</a>> wrote:<br>
>><br>
>> Hi All,<br>
>><br>
>> We have tried to measure redfish APIs performance benchmarking on AST2600.<br>
>> On redfish GET request there is a penalty added for ~100ms on TLS handshake at<br>
<br>
This is a little higher than I would've expected, but not outside the<br>
realm of reasonable.  Can you triage what cipher suite you're<br>
negotiating between the client and server?  Are you using a DH+EC key<br>
cipher?  That should be faster than RSA.<br>
<br>
>> <a href="https://github.com/openbmc/bmcweb/blob/master/http/http_connection.hpp#L297" rel="noreferrer" target="_blank">https://github.com/openbmc/bmcweb/blob/master/http/http_connection.hpp#L297</a><br>
>><br>
>> On trying below all methods, each request calls `async_handshake` which adds 100ms delay<br>
>> before the actual redfish handler code gets called.<br>
>> Method 1:<br>
>> curl --insecure -X POST -D headers.txt https://${bmc}/redfish/v1/SessionService/Sessions -d    '{"UserName":"root", "Password":"0penBmc"}'<br>
>> export token=<Read X-Auth-Token from the headers.txt><br>
>> curl -k -H "X-Auth-Token: $token" -H "Content-Type: application/json" -X GET https://${bmc}/redfish/v1/Systems/system<br>
>><br>
>> Method 2:<br>
>> export token=`curl -k -H "Content-Type: application/json" -X POST https://${bmc}/login -d '{"username" : "root", "password" : "0penBmc"}' | grep token | awk '{print $2;}' | tr -d '"'`<br>
>> curl -k -H "X-Auth-Token: $token" -H "Content-Type: application/json" -X GET https://${bmc}/redfish/v1/Systems/system<br>
>><br>
>> Method 3:<br>
>> curl https://${bmc}/redfish/v1/Systems/system --insecure -u root:0penBmc -L<br>
>><br>
>> We want to avoid this ~100ms delay for better performance.<br>
>> Please suggest if there is a way to skip the `async_handshake` call by modifying the requests method?<br>
>><br>
>> Thanks,<br>
>> Sharad<br>
><br>
><br>
><br>
><br>
> There is logic in the crow::connection object that should allow you to use tcp keep-alive and avoid the handshake in start.<br>
> <a href="https://github.com/openbmc/bmcweb/blob/master/http/http_connection.hpp#L694" rel="noreferrer" target="_blank">https://github.com/openbmc/bmcweb/blob/master/http/http_connection.hpp#L694</a><br>
><br>
> I have looked at the connection class in bmcweb before, and found it difficult to understand.<br>
> However, this is a simplified version of the states within the connection class:<br>
><br>
> start->doReadHeaders->doRead->handle->completeRequest->doWrite[if keep alive]->doReadHeaders<br>
><br>
> The async_handshake is in the start, so if you are able to use the same connection, you should only pay for the handshake once.<br>
> Ed Tanous and Gunnar Mills are the definitive experts.<br>
<br>
Yep, John got this exactly right.  Make sure whatever client you're<br>
using is taking advantage of keepalive, and you will only take this<br>
TLS performance hit for the first request.<br>
<br>
><br>
><br>
> Let us know what you find.<br>
> Thank you<br>
</blockquote></div>