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

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

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

推薦する

百度の内部窃盗は中小規模のウェブマスターの将来を破壊している

Baidu のアルゴリズムは何度も更新され、アップグレードされているため、Baidu によって次々と...

Aoyou Hosting: 香港クラウドデータセンターVPSレビュー、中国本土への100Mbps帯域幅直接接続、Windowsをサポート

2010年に設立された老舗ブランドであるaoyohostは、100Mbpsの帯域幅、中国本土への直接...

Adobeのウェブサイトがハッキングされ、15万人のユーザー情報が盗まれる

11月15日のニュース: 同社のサービスのセキュリティ問題が再び注目を集めているが、今回はFlash...

628 Big Kステーションと822の発表は、コンテンツが王様であることを真に理解させてくれる

実際、K ステーションが実際に開始されたのは 6 月 22 日で、6 月 28 日にピークに達しまし...

「クラウド + データベース」がデジタル変革への道を開く

[51CTO.com からのオリジナル記事] データがビジネスを推進し、この傾向は「インテリジェンス...

クラウドサービスと仮想化データセンターの可視化(パート1)

今日の IT 組織は前例のない課題に直面しています。企業内のビジネス部門は、外部のセキュリティ脅威や...

ショッピングガイド分野における電子商取引エコシステムにおけるショッピングガイドウェブサイトの新たな機会

【ポイント】ショッピングガイド事業がますます多くの外部要因に囲まれる中、将来的にはショッピングガイド...

ftechはどうですか? ftech ベトナム VPS サーバーの簡単なレビュー。IP で Netflix/spotify\steam\chatgpt などをブロック解除できます。

2011 年に設立されたベトナムのサーバー プロバイダーである ftech.vn は、ベトナムで仮想...

5分でDockerの基本原理を学ぶ

[[378815]]この記事はWeChat公式アカウント「妹の味」から転載したもので、著者は妹が飼っ...

Kubectl-iceプラグインは、クラスタコンテナの構成情報をより強力に表示します。

この号では、POD で実行中のコンテナの構成情報をすばやく表示できる実用的な Kubectl プラグ...

第12回ウェブサイトはすぐにホームページ日記を​​集めました

多くのインターネット企業や、自社のウェブサイトを構築し最適化している友人は、実はキーワードは顧客によ...

モノのインターネットは、今後10年間でテクノロジー大手にとってホットな話題となるだろう

現在、エッジ コンピューティング市場はまだ開発の初期段階にあります。クラウドコンピューティング市場を...

zxplay - $24/年/KVM/1g メモリ/60g ハードディスク/6t トラフィック/DDoS 保護

zxplay (登録 VAT 番号: 206 5572 17) 今年 6 月に zxplay のプロ...

クラウドコンピューティングプロバイダーが中小企業のニーズをどう考慮するか

ますます多くの企業がビジネスをクラウド プラットフォームに移行しています。コロナウイルスの流行中、ク...

オンライン教育を詳しく見る: 功利主義が最優先

オンライン教育は起業分野でホットな話題になりつつあります。各方面の意見を読んでみると、話題のほとんど...