2021年7月8日木曜日

【10Gbpsトラフィックレコーディングで大失敗】Dell PowerEdge R340 NLSASx2で、パケットドロップを何度も体験しました!?

 弊社が取り扱っているイタリアntop社のn2diskは、トラフィックレコーディング専用ソフトウェアです。


2021年現在、10Gbps NICを搭載したNASやスイッチが一般家庭で購入できるくらいの価格帯に落ちてきており、10Gbps LAN環境が身近な存在になってきました。


そこで弊社では、以下の物理環境を使って常時10Gbpsトラフィックレコーディングに挑戦しました。


本記事では、失敗を含めた検証内容詳細を読者の皆様に共有したいと思います。

文:ジュピターテクノロジー よしひろ


図1 10Gbps 検証環境

図1が検証環境となります。

負荷生成PCの赤字注釈で記載がありますが、図1の環境では残念ながら10Gbpsパケットドロップなしのトラフィックレコーディングは実現できませんでした。

失敗その1 RAID構成

図1の構成図では、RAID0を設定しておりますが、検証当初はDell PowerEdge R340出荷のデフォルト設定であるRAID1を使っておりました。

こちらですと、ディスク速度がボトルネックとなり2.0Gbpsの負荷でもパケットドロップが発生するといった事象に見舞われました。

Bonnie++でRAID1のディスク性能を検証した結果が以下です。

図2 RAID1 Bonnie++実行結果

そして、図1の環境の通りRAID0に設定しなおし、性能測定を実施した結果が以下です。

図3 RAID0 Bonnie++実行結果

Sequential OutputのBlockで、117M/sec → 401M/sec, Rewrite 59M/sec→ 179M/secとそれぞれ約3倍以上の性能差があることが分かります。

失敗その2 ファイルシステムの選択

Ubuntu20.04のデフォルトのファイルシステムは、ext4です。

ntop社のサイトにも記載があるのですが、n2diskを利用する場合xfs利用が推奨です。

Bonnie++でext4とxfsを比較しましたので、以下にご紹介します。

図4 RAID0 ext4 Bonnie++実行結果

図5 RAID0 xfs Bonnie++実行結果

システム領域とは別に、同じサイズでext4, xfsそれぞれパーティションを切って測定しました。

結果、Sequential OutputのBlockで、307M/sec → 366M/sec, Rewrite 136M/sec→ 166M/secとそれぞれxfsにすることで性能があがります。

このあたり筆者は詳しくないのですが、図3 RAID0の実行結果が一番良い結果となっています。

こちらはシステム領域で試験したパターンで、ext4です。

システム領域自体をxfsにして検証すれば、さらなる良い結果が出たかもしれません。

詳しい方がいらっしゃれば、是非ご教示ください。

n2diskとntopngの連携概要

ntop製品を扱った経験がある方は、図1のn2disk経由でフロー情報をntopngに送信する構成に違和感を覚えた方がいらっしゃるかと思います。

10Gbpsトラフィックをntop製品で扱うには、

  1. メーカー指定のIntel製NIC、もしくはFPGAアダプタ
  2. 高速化モジュールであるPF_RING ZC
  3. n2disk 10Gのライセンス

上記3つが必要になります。
PF_RING ZC及びFPGAアダプタは、カーネルをバイパスしますので、複数のアプリケーションが同時にストリームをキャプチャすることはできません。

つまり、トラフィック分析用にntopngを起動し、トラフィックレコーディング用にn2diskを起動して同じインターフェイスのトラフィックをキャプチャしようとしてもできないといった結論となります。

こちらを解決するには、n2diskだけがインターフェイスからトラフィックをキャプチャし、ZMQ経由でntopngにフロー情報を送信するといった方式があります。

図6 n2diskとntopng連携

これまで説明した内容は、ntop社の本家サイトにも説明がありますので、ご一読いただければと思います。

【ntop社ドキュメントサイト】


n2diskとntopngの連携設定


先ほどご紹介した本家サイトには、Napatechの設定例がありますが、弊社で検証したのはIntel NIC + PF_RING ZCです。

以下に実際の設定例を記載しておきます。

試される方は、参考にしてください。

$sudo vim /etc/n2disk/n2disk-enp3s0f0.conf
--interface=zc:enp3s0f0
-o=/storage/n2disk/pcap/
-b=4096
-C=4096
-p=1024
-g
-s=1518
-M
-I
-A=/storage/n2disk/timeline/
-Z
-S=0
-c=1
-z=2,3
-w=4
-m=100
-n=50
-H
-u=ntopng
--zmq=tcp://127.0.0.1:5556
--zmq-probe-mode
--zmq-export-flows

1行目の--interfaceで、ZCが設定されていることが分かります。

また、n2disk + ZCで利用する場合、RSSは必ず1にする必要があります。

$sudo vim /etc/pf_ring/zc/ixgbe
RSS=1,1

最後にntopngの設定をご紹介します。
n2diskからフロー情報を受け取れるようにオプションを調整する必要があります。

$sudo vim /etc/ntopng/ntopng.conf
-i=tcp://*:5556c
-m=192.168.0.0/16
-G=/var/run/ntopng.pid
-W=443

負荷生成、性能検証方法

負荷生成PCから、1Gbpsから徐々にトラフィック量をあげて試験しました。

負荷生成コマンドは、以下の通りです。

以下は、1スレッドで3.5Gbps、合計7Gbpsの負荷生成例

$date ; time seq 1 2 | sudo parallel --jobs 2 'sudo tcpreplay-edit --srcipmap=0.0.0.0/0:192.168.35.{}/32 --dstipmap=0.0.0.0/0:192.168.45.{}/32 -i enp1s0 -K --mbps 3500 --loop 0 --unique-ip localNetflow.pcap'

ディスクがボトルネックになっているか?の判別は、以下のproc以下のステータスファイルから確認できます。

ntop@ntopng-nfr:~$ sudo cat /proc/net/pf_ring/stats/55977-enp3s0f0.6
Duration:          0:01:34:47:717
Throughput:        0.71 Mpps    7.71 Gbps
Packets:           2427668121
Filtered:          2427668121
Dropped:           405740
Bytes:             3298893238728
DumpedBytes:       1092551487476
DumpedFiles:       3056
SlowStorageLoops:  14451 ★こちらにカウントアップされるとディスクの性能不足
CaptureLoops:      838080141860
LastDumpedEpoch:   1624366519
TimelinePath:      /storage/n2disk/timeline/
ExportedFlows:     1936
DroppedFlows:      0

こちらの方式で、負荷生成を1Gbps~7Gbpsまで実行し、パケットドロップなしでトラフィックレコーディングが成功したのは5Gbpsでした。

検証考察と次回以降のチャレンジ

今回の結論としては、ディスクx2本 RAID0、NLSAS 12Gbpsでは10Gbpsのトラフィックレコーディングは実現できないとの結論に達しました。

メーカーのシステム要求情報にも以下の表があります。

RAID0 ストレージサイジング


10GbpsをRAID0 NLSASで実現するには、少なくとも8本以上のディスクが必要とのことです。

次回は、SSD or NVMeで10Gbpsトラフィックレコーディングに挑戦したいと思います。


最後に


如何でしたでしょうか?

廉価で10Gbpsトラフィックレコーディングを実現するには、ntop製品の選択がありかと思います。

リアルタイムトラフィック分析、トラフィックレコーディングのご用命は、弊社までご連絡ください。

ntop製品のお問い合わせ

本記事で扱っているntop社のnProbe, ntopng製品にご興味のある方は、以下のリンクから弊社までお問い合わせください!