Skip to content

Log timings from SocketsHttpHandler #827

@bkatms

Description

@bkatms

As part of a running a high scale service detailed network performance metrics are required in order to understand the complete end-2-end latency profile of requests and where delays are occurring in the network stack.

Currently these metrics are available from WinHttp, the ask is to improve the instrumentation in the .Net Core stack to get the equivalent timings.

The intent is to get these timings as low down in the stack and close as possible to the point that actual bytes are sent and received over the network so that accurate pictures can be developed.

Taking numbers too high in the application stack measures all sorts of variables outside of the network behavior itself.

Here are the timings being sought in priority order.

P0
startTime (implicit TZero)
readonly attribute unsigned long long requestStart;
readonly attribute unsigned long long responseStart;
readonly attribute unsigned long long responseEnd;

P1
readonly attribute unsigned long long connectStart;
readonly attribute unsigned long long connectEnd;

P2
readonly attribute unsigned long long fetchStart;
readonly attribute unsigned long long domainLookupStart;

readonly attribute unsigned long long domainLookupEnd;
readonly attribute unsigned long long secureConnectionStart;

All else in the list below which is based on the W3 Resource Timing at https://www.w3.org/TR/resource-timing-2/

Implementation Notes
All start timings occur before sending or initiating ( as opposed to a callback which async informs that the action has started and could occur after the actual start)
All end timings occur immediately after receiving event

readonly        attribute DOMHighResTimeStamp redirectStart;
readonly        attribute DOMHighResTimeStamp redirectEnd;
readonly        attribute DOMHighResTimeStamp fetchStart;
readonly        attribute DOMHighResTimeStamp domainLookupStart;
readonly        attribute DOMHighResTimeStamp domainLookupEnd;
readonly        attribute DOMHighResTimeStamp connectStart;
readonly        attribute DOMHighResTimeStamp connectEnd;
readonly        attribute DOMHighResTimeStamp secureConnectionStart;
readonly        attribute DOMHighResTimeStamp requestStart;
readonly        attribute DOMHighResTimeStamp responseStart;
readonly        attribute DOMHighResTimeStamp responseEnd;

Metadata

Metadata

Assignees

Labels

area-System.Net.HttpenhancementProduct code improvement that does NOT require public API changes/additions

Type

No type

Projects

No projects

Milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions