Pengukuran latensi jaringan (Linux)

8

Saya ingin mengukur latensi jaringan untuk permintaan SNMP GET. Ada alat baris perintah gratis timeyang dapat digunakan untuk menemukan statistik waktu untuk berbagai perintah. Misalnya dapat digunakan dengan snmpgetcara berikut:

$ time snmpget -v 2c -c public 192.168.1.3 .1.3.6.1.2.1.2.2.1.10.2
IF-MIB::ifInOctets.2 = Counter32: 112857973

real    0m0.162s
user    0m0.069s
sys 0m0.005s

Menurut manual, statistik terdiri dari:

  • waktu nyata berlalu antara doa dan penghentian,

  • waktu CPU pengguna (jumlah nilai
    tms_utime dan tms_cutime dalam struct tms yang dikembalikan oleh
    times (2)),

  • waktu sistem CPU (jumlah nilai
    tms_stime dan tms_cstime dalam struct tms yang dikembalikan oleh
    times (2)).

Seperti yang Anda lihat, tidak ada opsi ini yang memungkinkan untuk mengukur waktu latensi jaringan nyata (dengan mengecualikan statistik waktu eksekusi program lainnya). Apakah ada cara untuk melakukannya? Mungkin tidak menggunakan alat waktu, melainkan beberapa peretasan kernel?

Saya ingin bertanya, sebelum saya mulai menulis program saya sendiri.

Terima kasih, Piotr

omnomnom
sumber

Jawaban:

5

The tcpdump(8)program -tttbendera mungkin hanya apa yang Anda butuhkan:

00:00:00.000031 IP haig.mdns > 224.0.0.251.mdns: 0 PTR (QM)? 1.0.168.192.in-addr.arpa. (42)
00:00:01.897031 IP haig.45240 > stackoverflow.com.www: Flags [F.], seq 866615166, ack 62506321, win 123, options [nop,nop,TS val 6026371 ecr 419296939], length 0
00:00:00.000030 IP haig.45242 > stackoverflow.com.www: Flags [F.], seq 853537650, ack 61102072, win 123, options [nop,nop,TS val 6026371 ecr 419296939], length 0
00:00:00.000019 IP haig.45243 > stackoverflow.com.www: Flags [F.], seq 863535366, ack 62086489, win 123, options [nop,nop,TS val 6026371 ecr 419296939], length 0

Stempel waktu di awal garis menunjukkan waktu dalam mikrodetik sejak paket sebelumnya. Dengan memberikan jumlah berbeda -tpada baris perintah, Anda bisa mendapatkan waktu absolut, waktu relatif sejak paket pertama, atau waktu relatif antar paket.

Saya baru saja menunjukkan mdns acak dan lalu lintas web karena itulah yang mudah ditemukan di sistem saya; Anda dapat dengan mudah menyaring lalu lintas SNMP dengan tcpdump(8)hanya mendapatkan paket yang Anda minati. (Ide yang bagus, karena membuang semua lalu lintas dari sistem yang sibuk dapat menghasilkan beban yang sangat besar .)

sarnold
sumber
-tttttjuga bisa bermanfaat - alih-alih menunjukkan mikrodetik sejak paket terakhir, ini menunjukkan mikrodetik sejak awal jejak.
Alex D
8

Coba ping:

$ ping -U 192.168.1.3

Dari manual ping:

-U Mencetak latensi antar pengguna (perilaku lama). Biasanya ping mencetak waktu bolak-balik jaringan, yang dapat berbeda karena kegagalan DNS.

Francisco R
sumber
Terima kasih atas jawabannya, tetapi saya ingin mengukur latensi khusus untuk permintaan SNMP.
5

Jalankan program Anda dan sementara itu tangkap lalu lintas jaringan dengan tcpdumpatau wireshark. Periksa waktu permintaan dan balasannya dan lakukan pengurangan sederhana.

Karoly Horvath
sumber