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

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

[[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 のデータを「移動」する際に、サービスを中断することなく、どのようにしてクラウド間の移行を実現するのでしょうか?

推薦する

「V-wave Award」が開催、Weiboがソーシャルマーケティングに新たな「視点」を開く

月収10万元の起業の夢を実現するミニプログラム起業支援プラン9月10日、広く普及しているプラ​​ット...

面接で必ず聞かれるJVMランタイムデータ領域について理解していますか?

[[411100]]序文Java仮想マシンのランタイムデータ領域は面接でよく聞かれます。市場には多く...

インターネットブランドの法的保護と育成 - ドメイン名

ドメイン名はインターネット企業にとって間違いなく大きな意味を持ちます。有名なソーシャル ネットワーキ...

Terraform を使用してクラウド構築を高速化します。学びましたか?

この記事では、Terraform と AWS を使用する利点について説明し、理解を深めるためにこのコ...

Baidu を使ってトラフィックを集める方法 (ケーススタディ)

今日ここでお話しするのは、Baidu Knows がいかに重要で、いかに便利であるかをお伝えすること...

Baiduさん、申し訳ありませんが、誤解していたかもしれません。

多くの企業は、Baidu からプロモーションの電話を頻繁に受け、時々挨拶を受けます。編集者のクライア...

福建省南部の靴産業における電子商取引のビジネスはゆっくりではあるが着実に成長している。

もしあなたが3年前に何をすべきか知っていたら、何千年もの間裕福で繁栄していたでしょう。将来を把握する...

ザクロアルゴリズムに対処するためのいくつかの重要な対策

序文百度が発表したザクロアルゴリズムの詳細については、以前の記事ですでに紹介しました。ウェブマスター...

成功するクラウド移行計画を構築する方法

ビジネスをクラウドに移行するのは簡単な作業ではありません。すべてのワークロードが恩恵を受けられるわけ...

これらのクラウドコンピューティングのコストは確実に自分で管理できるものであることを理解しましょう

クラウド コンピューティングが新たな標準となり、組織がデジタル ビジネス イニシアチブへと移行するに...

これらの主流の分散ストレージシステムをご存知ですか?

Hadoop HDFS (ビッグデータ分散ファイルシステム) Hadoop 分散ファイル システム ...

インターネットSEOから:個人の生活のSEO最適化について語る

SEO に長年取り組んでいると、人生でちょっとしたことに遭遇したときに、それを自然に最適化と関連付け...

クラウドとAIの時代にはどんなストレージが必要なのでしょうか?

デジタル化の波が全国に広がり、伝統的な生産や生活様式を覆しつつある。結果として生じる新しい経済と新し...

Douyinのブランドアップグレードは、Kuaishouとの戦いであるだけでなく、生き残るために不可欠な戦略的変革でもある。

おそらく、今後はTik TokとWeChatの間で戦いが起こるとも言えるでしょう。もちろん、前提条件...