hrk1l2x

1 minute read

Linuxにおけるネットワークパフォーマンスのボトルネック改善と向上

更新途中。

リソースの枯渇箇所特定

LB, Proxy, Web Application, DB のどこか?

  • CPU: user, sys, iowait
  • Memory: used, cached, buffer
  • Disk: write IOPS, read IOPS, read latency
  • Network: Transmit eXchange bps, Receive eXchange bps, tx pps

  • IRQ(Interrupt ReQuest: 割り込み要求)ソフト割り込み要求(パケット受信)の負荷が高いか。

    • パケットが増加すると…割り込み、コンテキストスイッチが増加し、CPU負荷が上がる。

パケット受信フロー

  1. NIC
    1. パケット転送
  2. kenerl
    1. パケット受信
    2. softnet_stat Backlog
    3. RX-ring(Ring buffer)・・・ハード割り込み(Ring buffer にパケットを積むまで)
    4. プロトコル処理(TCP/IPのパケットヘッダ解析,チェックサム計算等)・・・NAPIによるPolling
    5. Socket buffer・・・ソフト割り込み(残りの処理は、ソフト割り込みで非同期遅延処理)
    6. データ受信処理
  3. プロセス

ハード割り込みはパケットをバッファに積み、1回の割り込み処理のCPU負荷を下げ、ソフト割り込みはプロトコル処理を非同期遅延処理する。通常ハード割り込みがかかった同じCPUコアでソフト割り込みを実行するが、RPS(Receive Packet Steering)により、割り込み処理を複数コアに分散させることも可能。CPUキャッシュヒット率を高めたRFS(Receive Flow Steering)もある。

Linux ネットワークインターフェースの確認

Linuxの通信速度が遅い場合の調べ方として、CentOS,RHEL7 の前は ifconfig だったが、7以降は ip が主流。

# インターフェースの状態確認
$ ip -s link show

# 受信側パラメータ設定確認
$ ethtool -g eth0

dropped

無効化したIPv6のパケットを受信したり、Ethernet ヘッダの Type に未サポートのプロトコルが入った場合の、破棄された未サポートプロトコルパケットの数や、大量のパケットを受信し softnet_stat プログラムの Backlog (積み残し処理) が溢れた数を表す。

overrun

大量のパケット(スパイク)を受信し、RX-ring (Ring-buffer: NICの受信パケットを扱うメモリバッファ領域) が不足して処理が行えず、破棄したパケットの数。

RX-ring(ring buffer)の確認

ethtool -g ens33
comments powered by Disqus