クラウドネットワークパフォーマンステストについてお話しましょう

クラウドネットワークパフォーマンステストについてお話しましょう

[[403216]]

この記事はWeChatの公開アカウント「zartbot」から転載したもので、著者はZartbotのネットワークケーブルプライヤーです。この記事を転載する場合はzartbot公式アカウントまでご連絡ください。

クラウド上の数人の友人が VPC ネットワークのパフォーマンスをテストしたかったので、dpdk コードをいくつか記述し、Alibaba Cloud で実験を行いました。これは他のクラウドにも適用できます。

関連ライブラリをインストールする

ルートとしてログインし、ソースを更新します

  1. #元の設定ファイルをバックアップする
  2. /etc/yum.repos.d/bak ディレクトリに移動します。
  3. mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak/
  4. #Alibaba Cloudのソースカバレッジを活用する
  5. wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-8.repo
  6. yum インストール -y https://mirrors.aliyun.com/epel/epel-release-latest-8.noarch.rpm
  7. sed -i 's|^#baseurl=https://download.fedoraproject.org/pub|baseurl=https://mirrors.aliyun.com|' yum リポジトリのリポジトリ
  8. sed -i 's|^metalink|#metalink|' yum リポジトリの
  9. sudo dnf config-manager --set-enabled PowerTools  
  10.  
  11. yum メイクキャッシュ
  12. yumアップデート 
  13.  
  14. yum groupinstall 「開発ツール」  
  15. yum install gcc-gfortran kernel-modules-extra tcl tk tcsh terminator tmux kernel-rpm-macros elfutils-libelf-devel libnl3-devel meson createrepo numactl-devel
  16. pip3 pyelftools をインストールする

iommuを有効にする

  1. sudo vi /etc/デフォルト/grub
  2.  
  3. // 「intel_iommu=on iommu=pt」を GRUB_CMDLINE_LINUX 行に追加します  
  4. //保存して終了

次にgrubを更新し、システムを再起動します

  1. sudo grub2-mkconfig -o /boot/grub2/grub.cfg
  2. sudo grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
  3. sudo 再起動

DPDKのインストール

CentOSでは、/usr/localパス、主にLD_LIBRARY_PATH PATHとPKG_CONFIG_PATH、sudoパスを追加する必要があります。

  1. sudo vi /etc/ld.so.conf.d/dpdk.conf
  2.  
  3. >>次のパスを追加
  4. /usr/ローカル/lib64
  5. >>終了
  6.  
  7. sudo ldconfig
  8.  
  9. vim ~/.bashrc
  10. >>次のパスを追加
  11.  
  12. エクスポート PATH=/usr/ローカル/bin:$PATH
  13. エクスポート PKG_CONFIG_PATH=/usr/ローカル/lib64/pkgconfig:${PKG_CONFIG_PATH}
  14.  
  15.  
  16. ソースを保存した後
  17. ソース ~/.bashrc
  18. sudo vim /etc/sudoers
  19.  
  20. >>/usr/ local /binをsecure_pathに追加します
  21. デフォルト secure_path = /sbin:/bin:/usr/sbin:/usr/bin:/usr/ local /bin

次にdpdkを解凍し、コンパイルしてインストールします

  1. http://fast.dpdk.org/rel/dpdk-21.05.tar.xz を取得します。
  2. tar xf dpdk-21.05.tar.xz
  3.  
  4. cd dpdk-21.05
  5. メソンビルド -D 例 =すべて  
  6.  
  7. CDビルド
  8. 忍者
  9. sudo 忍者インストール
  10. sudo ldconfig

Hugepage を設定し、インターフェースをバインドする

  1. dpdk-hugepages.py --setup 4G  
  2. modprobe vfio-pci
  3. dpdk-devbind.py -s
  4.  
  5. カーネルドライバーを使用するネットワークデバイス
  6. ==================================
  7. 0000:00:05.0 'Virtio ネットワーク デバイス 1000' if=eth0 drv=virtio-pci unused=vfio-pci *アクティブ*
  8. 0000:00:06.0 'Virtio ネットワーク デバイス 1000' if=eth1 drv=virtio-pci unused=vfio-pci *アクティブ*

仮想マシン環境ではnoniommu_modeが必要であることに注意してください。

  1. ifconfig eth1 ダウン
  2. エコー 1 > /sys/module/vfio/parameters/enable_unsafe_noiommu_mode
  3. dpdk-devbind.py -b vfio-pci 0000:00:06.0

確認する

  1. dpdk-devbind.py -s
  2.  
  3. DPDK互換ドライバーを使用するネットワークデバイス
  4. ===========================================
  5. 0000:00:06.0 'Virtio ネットワーク デバイス 1000' drv=vfio-pci unused=
  6.  
  7. カーネルドライバーを使用するネットワークデバイス
  8. ==================================
  9. 0000:00:05.0 'Virtio ネットワーク デバイス 1000' if=eth0 drv=virtio-pci unused=vfio-pci *アクティブ*

インターフェースのサポートを確認

コードをダウンロードする

  1. cd ~
  2. https://github.com/zartbot/learn_dpdk/archive/refs/heads/main.zip をダウンロードします
  3. main.zip を解凍します。
  4. cd learn_dpdk-main/

コンパイル

  1. cd 01_port_init/devinfo/
  2. きれいにする;作る

インターフェースのサポートを確認

  1. ./ビルド/devinfo
  2.  
  3. EAL: 24 個の lcore が検出されました
  4. EAL: 1 つの NUMA ノードが検出されました
  5. EAL: DPDK共有リンクを検出しました
  6. EAL: マルチプロセスソケット /var/run/dpdk/rte/mp_socket
  7. EAL: 選択されたIOVAモード「PA」  
  8. EAL:利用可能な 1048576 kB の hugepages が報告されていませ
  9. EAL: VFIO サポートが初期化されました
  10. EAL: 無効な NUMA ソケット、デフォルト  0
  11. EAL: プローブ PCI ドライバー: net_virtio (1af4:1000) デバイス: 0000:00:05.0 (ソケット 0)
  12. eth_virtio_pci_init(): PCI デバイスの初期化失敗しました
  13.  
  14. EAL: 要求されたデバイス 0000:00:05.0 は使用できません
  15. EAL: 無効な NUMA ソケット、デフォルト  0
  16. EAL: プローブ PCI ドライバー: net_virtio (1af4:1000) デバイス: 0000:00:06.0 (ソケット 0)
  17. EAL: IOMMU タイプ 8 の使用 (-IOMMUなし)
  18. テレメトリ: レガシー コールバックなし、レガシー ソケットは作成されません
  19.  
  20.  
  21.  
  22. ****************************************
  23. 利用可能なポート: 1
  24. =========================================
  25. ポート: 0 ドライバー:net_virtio
  26. リンクダウン
  27. MACアドレス: 00:16:3E:25:3F:0A
  28. PCIe:0000:00:06.0
  29. 最大RX キュー: 12説明: 65535
  30. 最大TX キュー: 12説明: 65535
  31. オフロード機能:
  32. DEV_RX_OFFLOAD_VLAN_STRIP
  33. DEV_RX_OFFLOAD_UDP_CKSUM
  34. DEV_RX_OFFLOAD_TCP_CKSUM
  35. DEV_RX_OFFLOAD_TCP_LRO
  36. DEV_RX_OFFLOAD_ジャンボフレーム
  37. --------------------------------------  
  38. DEV_TX_OFFLOAD_VLAN_INSERT
  39. DEV_TX_OFFLOAD_UDP_CKSUM
  40. DEV_TX_OFFLOAD_TCP_CKSUM
  41. DEV_TX_OFFLOAD_TCP_TSO
  42. DEV_TX_オフロード_マルチセグメント
  43. =========================================

スピードテスト

  1. cd ~/learn_dpdk-main/02_send_recv/traffic_gen/

send_pkt.c の送信元アドレスと宛先アドレスを変更します。 Alibaba Cloudの宛先MACはeeff.ffff.ffffでなければならないことに注意してください。

  1. //Mac を初期化する
  2. 構造体 rte_ether_addr s_addr = {{0x00, 0x16, 0x3e, 0x25, 0x0b, 0xe3}};
  3. 構造体 rte_ether_addr d_addr = {{0xee, 0xff, 0xff, 0xff, 0xff, 0xff}};
  4.  
  5. //IPヘッダーを初期化する
  6. rte_be32_t s_ip_addr = string_to_ip( "10.66.1.220" );
  7. rte_be32_t d_ip_addr = string_to_ip( "10.66.1.219" );

インターフェースのサポートが限られているため、common.h を変更します。

  1. #NUM_RX_QUEUE 1 を定義します
  2. #NUM_TX_QUEUE 1 を定義します
  3.  
  4. 静的定数構造体rte_eth_conf port_conf_default = {
  5. .rxmode = {
  6. .max_rx_pkt_len = RTE_ETHER_MAX_LEN、
  7. .mq_mode = ETH_MQ_RX_NONE、
  8. },
  9. .txmode = {
  10. .mq_mode = ETH_MQ_TX_NONE、
  11. }
  12. };

portinit.c を変更して RX-CHECKSUM OFFLOAD をオフにし、次の段落をコメント アウトします。

  1. (dev_info.rx_offload_capa と DEV_RX_OFFLOAD_CHECKSUM の場合)
  2. {
  3. printf( "ポート[%u]はRXチェックサムオフロードをサポートします。\n" , port);
  4. port_conf.rxmode.offloads |= DEV_RX_OFFLOAD_CHECKSUM;
  5. }

最終的な測定速度は約3.3Mppsで、公式販売時の4Mppsに近い。

  1. [root@iZuf64vmgrtj12kczyslhdZ トラフィック_gen]# ./build/run
  2. EAL: 24 個の lcore が検出されました
  3. EAL: 1 つの NUMA ノードが検出されました
  4. EAL: DPDK共有リンクを検出しました
  5. EAL: マルチプロセスソケット /var/run/dpdk/rte/mp_socket
  6. EAL: 選択されたIOVAモード「PA」  
  7. EAL:利用可能な 1048576 kB の hugepages が報告されていませ
  8. EAL: VFIO サポートが初期化されました
  9. EAL: 無効な NUMA ソケット、デフォルト  0
  10. EAL: プローブ PCI ドライバー: net_virtio (1af4:1000) デバイス: 0000:00:05.0 (ソケット 0)
  11. eth_virtio_pci_init(): PCI デバイスの初期化失敗しました
  12.  
  13. EAL: 要求されたデバイス 0000:00:05.0 は使用できません
  14. EAL: 無効な NUMA ソケット、デフォルト  0
  15. EAL: プローブ PCI ドライバー: net_virtio (1af4:1000) デバイス: 0000:00:06.0 (ソケット 0)
  16. EAL: IOMMU タイプ 8 の使用 (-IOMMUなし)
  17. テレメトリ: レガシー コールバックなし、レガシー ソケットは作成されません
  18.  
  19.  
  20. ポート 0 を初期化しています...
  21. ポート[0]はTX UDPチェックサムオフロードをサポートします。
  22. ポート[0]はTX TCPチェックサムオフロードをサポートします。
  23. ポート[0] MAC: 00:16:3e:25:0b:e3
  24. コア 1 が RX デキューを実行しています。
  25. Core 2 がパケットのエンキューを実行しています。
  26.  
  27. RXキュー[0] PPS: 3280464
  28. RXキュー[0] PPS: 3277792
  29. RXキュー[0] PPS: 3303116
  30. RXキュー[0] PPS: 3307443
  31. RXキュー[0] PPS: 3296451
  32. RXキュー[0] PPS: 3294396
  33. RXキュー[0] PPS: 3297737
  34. RXキュー[0] PPS: 3290069
  35. RXキュー[0] PPS: 3279720
  36. RXキュー[0] PPS: 3285987
  37. RXキュー[0] PPS: 3279424

次に、common.hの送信と受信を4つのスレッドに変更します。

  1. #NUM_RX_QUEUE 1 を定義します
  2. #NUM_TX_QUEUE 1 を定義します

テスト結果は公式の 4Mpps と一致しています。

  1. RXキュー[0] PPS: 578918
  2. RXキュー[1] PPS: 866823
  3. RXキュー[2] PPS: 2288950
  4. RXキュー[3] PPS: 865335

CPU情報

  1. [root@iZuf64vmgrtj12kczyslhdZ traffic_gen]# cat /proc/cpuinfo | grep Xeon
  2. モデル: Intel(R) Xeon(R) Platinum 8369B CPU @ 2.70GHz
  3. モデル: Intel(R) Xeon(R) Platinum 8369B CPU @ 2.70GHz
  4. モデル: Intel(R) Xeon(R) Platinum 8369B CPU @ 2.70GHz
  5. モデル: Intel(R) Xeon(R) Platinum 8369B CPU @ 2.70GHz
  6. モデル: Intel(R) Xeon(R) Platinum 8369B CPU @ 2.70GHz
  7. モデル: Intel(R) Xeon(R) Platinum 8369B CPU @ 2.70GHz
  8. モデル: Intel(R) Xeon(R) Platinum 8369B CPU @ 2.70GHz
  9. モデル: Intel(R) Xeon(R) Platinum 8369B CPU @ 2.70GHz
  10. モデル: Intel(R) Xeon(R) Platinum 8369B CPU @ 2.70GHz
  11. モデル: Intel(R) Xeon(R) Platinum 8369B CPU @ 2.70GHz
  12. モデル: Intel(R) Xeon(R) Platinum 8369B CPU @ 2.70GHz
  13. モデル: Intel(R) Xeon(R) Platinum 8369B CPU @ 2.70GHz
  14. モデル: Intel(R) Xeon(R) Platinum 8369B CPU @ 2.70GHz
  15. モデル: Intel(R) Xeon(R) Platinum 8369B CPU @ 2.70GHz
  16. モデル: Intel(R) Xeon(R) Platinum 8369B CPU @ 2.70GHz
  17. モデル: Intel(R) Xeon(R) Platinum 8369B CPU @ 2.70GHz
  18. モデル: Intel(R) Xeon(R) Platinum 8369B CPU @ 2.70GHz
  19. モデル: Intel(R) Xeon(R) Platinum 8369B CPU @ 2.70GHz
  20. モデル: Intel(R) Xeon(R) Platinum 8369B CPU @ 2.70GHz
  21. モデル: Intel(R) Xeon(R) Platinum 8369B CPU @ 2.70GHz
  22. モデル: Intel(R) Xeon(R) Platinum 8369B CPU @ 2.70GHz
  23. モデル: Intel(R) Xeon(R) Platinum 8369B CPU @ 2.70GHz
  24. モデル: Intel(R) Xeon(R) Platinum 8369B CPU @ 2.70GHz
  25. モデル: Intel(R) Xeon(R) Platinum 8369B CPU @ 2.70GHz

<<:  星を選んでください! Mobvistaが「2021 Cloud Native Pioneer Award」を受賞

>>:  Salesfunnel は、数百 TB のデータを「移動」する際に、サービスを中断することなく、どのようにしてクラウド間の移行を実現するのでしょうか?

推薦する

元斉の森は四方八方から奇襲を受けています!

後発勢力が巨人たちの生存基盤と堀の障壁を脅かすと、必然的に前例のない激しい反撃に直面することになり、...

Windows Server のインストールと構成 IIS8.5 チュートリアル

Windows サーバーで IIS8.5 を構成するためのステップバイステップ ガイドを以下に示しま...

エッジコンピューティングはトラック輸送の未来か?

テクノロジーが進歩するにつれて、トラック輸送業界が業務を最適化する機会が増えます。連邦自動車運送安全...

完全な JVM オフヒープ メモリ リークのトラブルシューティング記録

[[339593]]序文この記事では、「JVM メモリ割り当ての原則の分析」や「一般的な JVM ...

ウェブサイト構築の難点は実は「程度」の問題

ウェブサイト構築の過程では、動的な画像がない、インタラクティブなデザインがシンプルであるなど、それほ...

百度の2ページ目に関連キーワードが表示されるという考え方

Baidu がアップグレードされてから、Baidu の 2 ページ目の上部に関連キーワードの小さな機...

ウェブサイトのランキングが一夜にして下がった理由の実践的な分析

今日は、弊社のSEO最適化研修に参加した学生のSEO事例分析を見てみましょう。彼のウェブサイトの状況...

人気のオリンピックイベントからトラフィックを引き寄せる最速の方法

毎年開催されるオリンピックは誰もが注目するイベントです。昔は誰もがテレビで試合を観戦していましたが、...

インターネット技術起業家は、2 つのセッションで提案を行う際にどのような点に重点を置いていますか?

[[258735]] 3月3日、毎年恒例の全国「二会期」が正式に始まりました。 「両会」の季節が始ま...

budgetvm-DDoS 高防御 100g/$114/E3-1230v3/16g メモリ/1T ハードディスク

budgetvm.com の公式スタッフから、100Gbps 保護を謳った、特別価格の DDoS 高...

greenvaluehost-2g メモリ/100g ハードディスク/200m 無制限/月額 5 ドル

greenvaluehost は、強力なリソースを備えた openvVZ ベースの VPS を提供し...

ウェブマスターはどのようにすれば改善できるでしょうか?

最近、Baidu に何か問題があることは、ほとんどのウェブマスターがすでに感じていると思います。9 ...

#今週のプロモーションリスト#: 感謝祭、ブラックフライデー、サイバーマンデー

11 月: 最も安く購入したい場合: 仮想ホスティング、VPS、専用サーバー、ホスティング業界で今年...

Azure Data Migration でデータをクラウドに移行する

[51CTO.com クイック翻訳] 企業がクラウドに移行してから10年以上経ちますが、大量のデータ...

企業におけるクラウドコンピューティングの利点と課題

クラウド コンピューティングは、ユーザーがどこからでもオンデマンドでコンピューティング リソースにア...