Upgrade to Pro — share decks privately, control downloads, hide ads and more …

自宅鯖はいいぞ 〜InfiniBand編〜

自宅鯖はいいぞ 〜InfiniBand編〜

KCS交流会 2021/06/26 LT

190ikp

June 27, 2021
Tweet

More Decks by 190ikp

Other Decks in How-to & DIY

Transcript

  1. これまでの自宅鯖 1台目 • ファイルサーバがほしくなった -> ファイルサーバを建てた 2台目 • デスクトップにLinuxのマシンを使っていた →

    気軽にMHW:Iをやりたい → メインをWindowsにするために開発環境用のサーバを建てることに (ファイルサーバはスペックが非常に低かったので ...)
  2. • 1台目のストレージを2台目で使いたいけどNWが貧弱 ( 1GbE x2 bonding ) • 10GbEは導入の敷居が高い ◦

    10GbEのL3スイッチは高価 ◦ 10GBASE-TはNICの価格と発熱が ... ◦ 10GBASE-SRならなんとか...(中古市場はあまりない) • 10GbEは遅い ◦ 単純計算で1.25GB/s ◦ SATA SSDでRAID組むとネットワークがボトルネックに ◦ 台数によってはHDDでのRAIDでもボトルネックになる →そんなあなたにInfiniBand これまでの自宅鯖
  3. なんで低レイテンシなの? (データ転送編) Ethernet 送信側アプリケーションのメモリ空間 → 送信側のカーネル上のメモリ空間 → 送信側のNICのバッファ → 受信側のNICのバッファ

    → 受信側のカーネル上のメモリ空間 → 受信側アプリケーションのメモリ空間 InfiniBand (RDMA) 送信側アプリケーションのメモリ空間 → 受信側アプリケーションのメモリ空間 ユーザメモリ空間を直接読み書きできる! ( RDMA: Remote Data Memory Access )
  4. なんで低レイテンシなの? (ネットワーク制御編) Ethernet 通信相手を識別するID MACアドレス … 48bit IPアドレス … 32bit

    (IPv4) / 128bit (IPv6) - 非常に大きい経路テーブル - CPUのキャッシュに載らない - 多層の階層型にせざるを得ない → レイテンシの増大 InfiniBand 通信相手を識別するID LID: Local Identifier … 16bit - 小さい経路テーブル - CPUのキャッシュに全部載せられる - 単層のテーブルにできる → レイテンシを抑えられる
  5. なぜ自宅鯖でInfiniBand? • (中古なら)転送帯域に対して安い ◦ 主に使用されるのは HPC用途 ▪ 最新のものを一度に大量に使う ▪ 今の主流はEDR

    (100Gbps) / HDR (200Gbps) ▪ 中古市場には旧規格のものが大量に流れる → 投げ売り状態に ◦ QDR (40Gbps) / FDR (56Gbps) の2ポートHCAで8000~10000円程度 (ヤフオク,ebay,etc...) ▪ 10GbE NICだと1ポートですら厳しい ◦ スイッチもそこそこ安い ▪ アンマネージドだと安ければ 2,3万 / マネージドでも10万切るくらいのものがある • アンマネージドでも HCA側のサブネットマネージャで制御すれば問題ない • TCP / IPを扱える ◦ IPoIB: IP over InfiniBand ▪ Internet Protocol (L3) をエミュレート ▪ テストしたところ TCPでは非常にパフォーマンスが落ちる場合があるので一癖ある ▪ あくまでL2ではInfiniBandなのでEthernetには接続できない(対向も HCAである必要がある)
  6. 自宅鯖に最適なHCA Mellanox ConnectX-3 VPI • OEMのものでもOK(Oracle,Dell,HPなど各社から出ている) ◦ Intel(QLogic)は別モノなので注意 • FDRまで対応

    • Windows10に対応しているHCAの中で最安 ◦ 宅内オールInfiniBand化が可能(macOS?知らない子ですね ...) • VPI: Virtual Protocol Interconnect に対応 ◦ IBモード → ETHモードに変更できる ◦ L2レベルでEthernet対応の40GbE / 56GbE NICとして使用可能 ◦ コネクタもEthernet互換(QSFP+)なのでL1レベルで実質ただの NIC ◦ IPoIBと違ってパフォーマンス落ちない ◦ レイテンシはIBモードに劣る(当たり前)
  7. やってみた 今回用意したもの • InfiniBand FDRのカード x2 (MCX354A-FCBT) ◦ カードあたり2ポート ◦

    ヤフオクで1枚8500円くらい • 56Gbps対応ケーブル(AOC x1,DAC x1) ◦ AOCケーブルは1本6000円程度 ◦ DACケーブルは借りました • 鯖 x2 ◦ PCIの空スロット ◦ PCIe 3.0 x8 以上が必要 • やる気(一番大事)
  8. セットアップ(ソフトウェア編) MellanoxのサイトからOFED (Open Fabric Enterprise Distribution) をダウンロード https://www.mellanox.com/products/infiniband-drivers/linux/mlnx_ofed • InfiniBand用ドライバ(という理解でOK)

    • ConnectX-3以前はLTS版 • ConnectX-4以降は通常版 • 一応OSS版のOFEDもあるが... ◦ MLNX_OFEDのほうが安定している印象 ◦ おすすめはしない マニュアルどおりにインストールしたら • systemctl enable --now openibd.service • systemctl start opensmd.service これで終わり
  9. 転送速度をテストしてみる の前に... InfiniBandの転送方式(サービスタイプ)は 4つ - Connected (1:1) - RC: Reliable

    Connected (← TCPのイメージ) - UC: Unreliable Connected - Datagram (1:n) - RD: Reliable Datagram (← ユーザーランドには提供されていない ) - UD: Unreliable Datagram (← UDPのイメージ) 実運用で主に使用されるのは RCとUD 今回はRCのベンチマークを取ってみる