pikesaku’s blog

個人的な勉強メモです。記載内容について一切の責任は持ちません。

ネットワークレイヤで遅延が発生する仕組みについて

推測含みます!

遅延

NWレイヤでの遅延の種類


項目 説明
伝搬遅延 (Propagation Delay) 伝搬する電気や光が、媒体 (メタルケーブルや光ケーブル) を進むために必要な時間
処理時間はケーブルの長さ / 伝搬速度
伝搬速度例)ガラスの中の光は一般に190,000 km/s 前後
処理遅延 (Processing Delay) NW 機器の NIC に入ってきたパケットのヘッダを書き換え、出力 NIC 用の Output Queueに格納するまでに掛かる時間
キューイング遅延 (Queuing Delay) Output Queue (ソフトウェアキュー) に格納されたパケットが tx-ring (ハードウェアキュー) に到達するまで待つ時間
シリアル化遅延 (Serialization Delay) 出力用 NIC がパケットを出力し始めてから出力し終わるまでに掛かる時間(電気信号に変換)
処理時間はパケットサイズ / インタフェース速度

tx-ring(送信)とrx-ring(受信)について

NICは小型プロセッサとDMAコントローラを持つ。
 ※DMA=Direct Memory Accessの略。メモリにCPU経由でなくデバイスが直接アクセスする仕組み。
 ※DMAコントローラ経由でメモリにアクセス。CPU負荷を下げる効果あり。
・メモリ空間内の各 NIC 用のバッファメモリがハードウェアキュー

補足情報

伝搬遅延の理論値

ネットワークでなぜ遅延が生じるのか
より引用

ジッタ(jitter)

・ジッタは遅延時間の変化度合い
・リアルタイムの音声・動画通信で影響大
 リアルタイムの音声・動画通信システムは、音声/動画パケットを一定時間バッファに溜め、それから出力 (再生) することで遅延の影響を吸収する。
 遅延が大きい場合→レスポンスは遅くなるが、音声/動画自体は品質良い(クリア)
 ジッタが大きい場合→バッファが最適に制御できず音声/動画自体は品質悪化

シリアル化遅延

最大フレーム(1518バイト)の場合

帯域(Mb/s) 遅延(ms)
1 12.304
10 1.2304
100 0.12304
1000 0.012304
10000 0.0012304

※計算式は以下
1518バイト+8バイト(プリアンブル)+12バイト(最小フレーム間隔)=1538バイト
1538÷(帯域[Mb/s]÷8×1000×1000)×1000

検証してみる!

10Mb/s,100Mb/s,1Gb/sで直結のサーバA,B間のPINGのRTTを確認する。PINGサイズを703バイトと1472バイトで確認する。
シリアル化遅延は以下の通り。

速度 703バイト 1472バイト
10Mb/s 0.615233ms 1.230466ms
100Mb/s 0.0615233ms 0.1230466ms
1000Mb/s 0.00615233ms 0.01230466ms

環境


結果

minの値

速度 703バイト 1472バイト
10Mbs/s 4.112 7.989
100Mbs/s 0.783 1.011
1Gbs/s 0.159 0.178

ログ

10Mb/s

# ping -s 1472 192.168.0.251 -c 1 > /dev/null 2>&1 && nice -20 ping -s 1472 192.168.0.251 -c 30 | tail -2
30 packets transmitted, 30 received, 0% packet loss, time 29141ms
rtt min/avg/max/mdev = 7.989/8.002/8.029/0.011 ms
# ping -s 703 192.168.0.251 -c 1 > /dev/null 2>&1 && nice -20 ping -s 703 192.168.0.251 -c 30 | tail -2
30 packets transmitted, 30 received, 0% packet loss, time 29150ms
rtt min/avg/max/mdev = 4.112/4.213/4.330/0.064 ms

100Mb/s

# ping -s 1472 192.168.0.251 -c 1 > /dev/null 2>&1 && nice -20 ping -s 1472 192.168.0.251 -c 30 | tail -2
30 packets transmitted, 30 received, 0% packet loss, time 29148ms
rtt min/avg/max/mdev = 1.011/1.027/1.091/0.018 ms
# ping -s 703 192.168.0.251 -c 1 > /dev/null 2>&1 && nice -20 ping -s 703 192.168.0.251 -c 30 | tail -2
30 packets transmitted, 30 received, 0% packet loss, time 29677ms
rtt min/avg/max/mdev = 0.783/0.803/0.863/0.015 ms

1Gb/s

# ping -s 1472 192.168.0.251 -c 1 > /dev/null 2>&1 && nice -20 ping -s 1472 192.168.0.251 -c 30 | tail -2
30 packets transmitted, 30 received, 0% packet loss, time 29680ms
rtt min/avg/max/mdev = 0.178/0.209/0.258/0.021 ms
# ping -s 703 192.168.0.251 -c 1 > /dev/null 2>&1 && nice -20 ping -s 703 192.168.0.251 -c 30 | tail -2
30 packets transmitted, 30 received, 0% packet loss, time 29674ms
rtt min/avg/max/mdev = 0.159/0.199/0.249/0.022 ms

利用コマンド

# 10Mb/sに設定
ethtool -s enp0s25 speed 10 duplex full autoneg off
# 1Gb/sに戻す時
ethtool -s enp0s25 autoneg on