-
Notifications
You must be signed in to change notification settings - Fork 5.2k
Description
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;