web-dev-qa-db-ja.com

LinuxカーネルでネットワークQoS統計を取得する方法は?

ローカルマシンのインターフェイスを介して、特定のリンクの帯域幅、遅延、ジッター衝突、エラー率、および損失率を取得する方法はありますか?

私のマシンが2つのインターフェース(1つはワイヤレス、もう1つはイーサネット)を介してネットワークに接続されているとしましょう。これらの測定を通じて、これら2つのリンクの品質を比較したいと思います。

Linuxカーネルでこれらの測定値を取得する方法はありますか? (v。3.5.0)

4
Varda Elentári

完全な詳細を提供することは困難です。特に、使用しているディストリビューションと結果をどの程度詳細にするかがわからないため、非常に基本的なをいくつかリストします。 の例。

インターフェイスごとに個別の統計情報を取得する場合は、各アイテムを個別に分類できます(以下では、CentOSなどのディストリビューションでのルートアクセスを想定しています)。

bandwidthの使用法について-私はiftopが本当に好きです。 iftopをインストールしたら、次のコマンドを実行できます。

iftop -i eth0 -B

-Bオプションはバイト用です。 iftopに入ったら、「T」を押して累積合計を取得するのが好きです。

エラー率の場合、コンソールのifconfigの出力でこれを簡単に確認できます。より合理的なアプローチを得るには、このように非常に大雑把なコマンドを実行できます(Centosのようなものを想定) )::

# ifconfig | grep -E "^\w|errors.* " | sed 's/pack.*errors:/Errors:/g' | sed 's/ drop.*//g' | sed 's/HW.*//g'
eth0      Link encap:Ethernet
          RX Errors:0
          TX Errors:0
eth1      Link encap:Ethernet
          RX Errors:3
          TX Errors:1
lo        Link encap:Local Loopback
          RX Errors:0
          TX Errors:0

これにより、各インターフェイスのエラー数がわかります。

collisionsの場合でも、ifconfigを使用できます。衝突カウントだけを取得するには、別の基本コマンドは次のようになります。

# ifconfig | grep -E "^\w|collisions.* " | sed 's/pack.*collisions:/Collisions:/g' | sed 's/ txq.*//g' | sed 's/HW.*//g'
eth0      Link encap:Ethernet
          collisions:0
eth1      Link encap:Ethernet
          collisions:0
lo        Link encap:Local Loopback
          collisions:0

droppedパケットの場合、まだifconfigを使用している場合は、別の簡単なコマンドを実行できます。

# ifconfig | grep -E "^\w|dropped.* " | sed 's/pack.*dropped:/Dropped:/g' | sed 's/ over.*//g' | sed 's/HW.*//g'
eth0      Link encap:Ethernet
          RX Dropped:0
          TX Dropped:0
eth1      Link encap:Ethernet
          RX Dropped:1
          TX Dropped:0
lo        Link encap:Local Loopback
          RX Dropped:0
          TX Dropped:0

不良パケット(エラー、衝突、またはドロップ)が多数ある場合は、前の3つのコマンドをbashスクリプトに入れ、watchコマンドを使用してそれらを監視できます。

ファイル/ tmp/netErrors:

#!/bin/sh

ifconfig | grep -E "^\w|errors.* " | sed 's/pack.*errors:/Errors:/g' | sed 's/ drop.*//g' | sed 's/HW.*//g'
echo
ifconfig | grep -E "^\w|collisions.* " | sed 's/pack.*collisions:/Collisions:/g' | sed 's/ txq.*//g' | sed 's/HW.*//g'
echo
ifconfig | grep -E "^\w|dropped.* " | sed 's/pack.*dropped:/Dropped:/g' | sed 's/ over.*//g' | sed 's/HW.*//g'
echo

コマンド:

watch /tmp/netErrors

QoSの場合、実際には設定方法によって異なります。 Linuxの場合、QoSの設定にはtraffic controlが一般的です。 traffic controlで現在のQoSを確認するには、次のコマンドを実行できます。

# tc qdisc ls
qdisc pfifo_fast 0: dev eth0 root refcnt 2 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
qdisc pfifo_fast 0: dev eth1 root refcnt 2 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
qdisc pfifo_fast 0: dev eth2 root refcnt 2 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1
qdisc pfifo_fast 0: dev tun0 root refcnt 2 bands 3 priomap  1 2 2 2 1 2 0 0 1 1 1 1 1 1 1 1

tc-トラフィック制御コマンドqdisc-キューイング分野ls-リスト

traffic controlの適切な内訳を取得するには、次のリンクを確認する必要があります トラフィック制御について

2
BriGuy

これはおそらく、Linuxカーネル内のQoS統計に精通するために私が見つけた最高のチュートリアルです。もともとは2010年にLinuxMagazineで発行されましたが、それでも完全に関連性があります。

記事のタイトルは次のとおりです。 Linuxカーネルの中心への旅:トラフィック制御、シェーピング、およびQoS

1
slm

インターフェイス統計は主に/sys/class/net/<interface>に保持され、tx/rx fifoエラー、衝突などに関する統計が含まれます。一部はドライバー固有であるため、統計を確認する必要があります。

測定はその5タプルで行われるため、ジッターはフローレベルの概念になる傾向があります。そのために別のツールを使用する必要があるかもしれません。

0
Kevin Mason

ntopのようなパッケージはこの情報を表示します。 nagioscactiをインストールすることもできます。これらははるかに強力ですが、構成に時間がかかります。

0
Ashish