Curl – network performance stats


Curl is a tool commonly used with transferring data from or to a client/server. Its portability has allowed it to present in most OS installations by default, and thus making as a standard tool for troubleshooting and debugging network or server connectivity issues.

Here you will see some Curl features to gather network connectivity performance metrics, all exposed with -w flag.

-w, --write-out <format>
Make curl display information on stdout after a completed transfer.

time_namelookup
 The time, in seconds, it took from the start until the name resolving was completed.

time_connect
 The time, in seconds, it took from the start until the TCP connect to the remote host  (or  proxy)  was completed.

time_pretransfer
 The  time, in seconds, it took from the start until the file transfer was just about to begin.

time_starttransfer
  The  time,  in  seconds,  it took from the start until the first byte was just about to be transferred.

time_total
  The total time, in seconds, that the full operation lasted.

With the above 5 options, we can get a decent amount of information on the culprit for network issue. Is it DNS resolution delay? Or delay in TCP 3 way handshake? etc


Examples

On first run –

$ curl -s -w '\nLookup time:\t%{time_namelookup}\nConnect time:\t%{time_connect}\nPreXfer time:\t%{time_pretransfer}\nStartXfer time:\t%{time_starttransfer}\n\nTotal time:\t%{time_total}\n' -o /dev/null https://www.fifa.com

Lookup time:	0.062836
Connect time:	0.078382
PreXfer time:	0.123689
StartXfer time:	0.155934

Total time:	0.182570

Second run –

$ curl -s -w '\nLookup time:\t%{time_namelookup}\nConnect time:\t%{time_connect}\nPreXfer time:\t%{time_pretransfer}\nStartXfer time:\t%{time_starttransfer}\n\nTotal time:\t%{time_total}\n' -o /dev/null https://www.fifa.com

Lookup time:	0.022473
Connect time:	0.036173
PreXfer time:	0.087416
StartXfer time:	0.134248

Total time:	0.171503

On second run, the dns look up time is lower, as it is coming from cache. Let us flush dns cache –

$ sudo systemd-resolve --flush-caches

$ curl -s -w '\nLookup time:\t%{time_namelookup}\nConnect time:\t%{time_connect}\nPreXfer time:\t%{time_pretransfer}\nStartXfer time:\t%{time_starttransfer}\n\nTotal time:\t%{time_total}\n' -o /dev/null https://www.fifa.com

Lookup time:	0.072109
Connect time:	0.086815
PreXfer time:	0.141417
StartXfer time:	0.185936

Total time:	0.227121

As expected the look up time is higher posed dns cache clear.

Additional information

You can get additional information by reading the manual pages for curl or even use curl to get information about curl –

$ curl cheat.sh/curl
 cheat.sheets:curl 
# curl
# Command-line tool for transferring data with URL syntax

# Process a single GET request, and show its output on stdout.
curl http://path.to.the/file

# Download a file and specify a new filename.
curl http://example.com/file.zip -o new_file.zip

# Download multiple files.
curl -O URLOfFirstFile -O URLOfSecondFile

# Download all sequentially-numbered files (1-24).
curl http://example.com/pic[1-24].jpg

# Download a file and follow redirects.
curl -L http://example.com/file
....