
2025.03.07
メール対応担当の8割以上が「カスハラ被害」に クレームのハード化・長期化を防ぐ4つの対策
OVS-DPDKとOpenStackで作るおうちNFV環境の構築(全1記事)
リンクをコピー
記事をブックマーク
辻広志氏:「OVS-DPDKとOpenStackで作るおうちNFV環境の構築」を発表します。よろしくお願いします。
自己紹介です。オレンジ色の会社で、NFV関係のアーキテクトをやっています。私はプログラマーではないので、今日はちょっとレイヤーが高い話かもしれませんが、ご了承ください。
本日のモチベーションですが、ネットワークの仮想化、高速化のノウハウを広めたいなと思ったのが1つです。前回のイベントで仮想マシンのルーターの話があって、みなさんのウケがけっこうよかったように見えたので、私もしゃべってみようと思いました。あとは「Twitter」を見ていると、自宅ラックの人はけっこう「VMware」を選択しているので、「OSSもいいよ」というのを伝えたいなと思ったのが2つ目のモチベーションです。
NFV(Network Functions Virtualization)とは、通信事業者のアプリケーションをOpenStackとかVMwareとかKubernetesで動かすことを言います。「通信事業者のアプリケーション」と書いているものは、いわゆる普通のサーバーや普通のネットワーク機器とはちょっと違うものです。NFVの前提が非常に難しくて、トランスポートはけっこうUDP(User Datagram Protocol)を扱っていて、パケットは落ちない前提です。こういうちょっと特殊な事情があります。
NFVの基本戦略ですが、「仮想化の心を捨てる」という、ハードウェアオフロードが1つです。もう1つは「CPUで殴る」で、DPDK(Data Plane Development Kit)に代表されるようなマシンパワーで何とかするというものです。
DPDKも軽く説明します。DPDKのそもそもの思想は、最近のCPUはたくさんコアがあるので、特殊なハードウェアを買うよりもいくつかのCPUコアを特殊な用途のために使ったほうが柔軟性が高いし、安いんじゃないかというものです。
DPDKがない場合、カーネルにネットワークを含むI/Oは、アプリケーションが依頼して、カーネルを通して行いますが、DPDKはデバイスドライバーの部分も含めたアプリケーションレイヤーを持ってきます。ネットワーク以外のI/Oはカーネル経由で行いますが、ネットワークI/Oはユーザースペースでやります。
また、CPUを特定のNICなどに固定して使うので、CPUはそのパケットのフォワーディングや編集を専門に行います。topコマンドで見ると、常に100パーセントで動いていて、アクセル全開という感じです。
最近このあたりの技術が普及してきたと個人的に考えています。OpenStackもけっこう古いソフトウェアですが、CPUをアサインするのが柔軟になってきました。OVS-DPDKも特に最近のものではないんですが、ずっと昔から安定してDPDKの実装版が出ているので、使い勝手がいいし、ドキュメントもけっこうあります。あとはDPDK対応のNICが増えているなという気がします。
また、メニーコアなCPUは一般家庭にも普及していると思っているので、作り方を紹介して、最後に軽く性能測定の結果を共有したいなと思っています。
どうやって作っていくのかというところですが、ここに書いているとおり、一般の家庭でも用意できるもので、今回考えてみました。私もVRのゲームがしたくて、ゲーミングPCを作ったんですが、「AMD Ryzen 5 3600」は12スレッドぐらいあるので、ちょっと買いすぎかもしれません。(NICは)「Intel X710」の10Gbpsのものを買ってきてブスッと刺して用意しました。
NICですが、IntelのNICを使えばある程度は間違いないと思います。今回はX700シリーズを買っていますが、もっと安価で入手性が良いものもあるので、そういったものを選択するのもいいと思いますし、Intel以外もサポートが増えてきているのでそれでもいいです。ただ、けっこういろいろなパソコンに入っているカニさん(※Realtek製NICのこと)は、DPDKに対応していないので、使えません。
次にプランニングしていきます。ハイパーバイザーとなるサーバーのCPU構成や、PCIデバイスの構成をちょっと見ておきます。
実際にこのあたりが肝になっていて、NFVっぽいポイントなんですが、CPUの割り当てをけっこう頭を使って考えます。ハイパースレッディングを使っている場合、キャッシュがこのコアとこのコアは一緒だよねとかも気にします。ハイパーバイザーが自分の仕事をする用のCPUプール、OVS-DPDKやvSwitchが使う用のCPUプール、ゲスト用のvCPUのプールと、大きく3つぐらいに分けます。
最近のOpenStackは、NFVだと性能を担保するためにゲスト用のvCPUをCPUピニングします。昔はCPUピニングをしたら、全部CPUピニングで使わないといけなかったんですが、最近はCPUピニングをしないものも一緒に載せられるようになってきたので、このあたりが最近は柔軟になってきたかなと思っています。
今回はこういう分け方をしていますが、ワークロードなどは自分の好きなようにカスタマイズしていいと思っています。
Ubuntu 20.04などを入れて、IOMMUとHugePageの設定だけをして、あとはドキュメンテーションに従ってOVS-DPDKとOpenStackをデプロイしていきます。ドキュメントに従ってと言いましたが、それなりに苦労はするかもしれません。
CPUの割り当てを計画したものを実際に設定に反映します。青文字や黄文字で書いているのが先ほどの囲っていた部分になるんですが、調整した結果をここに反映していきます。
最後です。VMに対しても最近いろいろとできるようになってきました。今回はQEMU/KVMの環境を想定しているんですが、CPUピニングなどやるときは一番下のエミュレータスレッドが曲者でした。今までは無指定で何もしなかったら、VMにCPUピニングしたコアに、エミュレーター用の仕事も割り振られちゃうので、例えばここでCPUをフル回転で使いたいときに、エミュレーターが邪魔になるのが問題になりました。
それを解決するisolateというモードもあるのですが、isolateしちゃうとエミュレーターがそんなにたくさん仕事をするわけではないのに、専属のコアが一つひとつ必要でした。それがshareというかたちで1つのコアにまとめられるようになっていたので、紹介です。
あとはOpenStackのコマンドを叩いてネットワークを作って、イメージを登録して、サーバーをcreateしたらNFVっぽい環境にVMが立ち上がります。
実際に家の環境で検証してみました。ゲストVMに4GBぐらいの小さなVMを立てて検証しています。SR-IOV(Single Root I/O Virtualization)など、紹介していないものが途中登場するんですがご了承ください。
赤色の線で示しているところは、必ずパケットが通るところで確認をしています。VLANを切って、さっきの赤いところを通ってVLANで通信をするところです。訳あってホストマシンと通信していますけど、10GbpsぐらいはTCP(Transmission Control Protocol)で測って取れています。
ただUDPにするとパケットロスしまくります。実際に通るのが330kbpsで、170Mbpsぐらいしか出ません。これは「やっぱりNFVダメじゃん」とか「仮想化遅いじゃん」という感じではなくて、iperfを使っているからこうなるという話です。
結局Linuxの限界がゲスト側に来ただけなので、ゲスト側もDPDKを使います。PtgenというDPDKのパケットジェネレーターがあるので、それを使って測定してみました。方向があってちょっとややこしいんですが、Open vSwitch(OVS-DPDK)を使ったものからSR-IOVのポートまでパケットをフォワードすると、だいたい7Mbpsぐらいです。64Byteのフレームで3.6Gbpsぐらい出ます。
逆向きにすると、SR-IOVは64Byteでも10Gbpsぐらい出ていて、パケットロスして7Mbpsぐらいになっています。とはいえ、iperfでやるよりも21倍ぐらい速いです。
パケットロスについて、レートを落として確認をしたんですが、今回のパケットロスの原因までは至りませんでした。
最後にまとめです。一般の家庭で使っているハードウェアでもネットワークの仮想化はけっこうできるよという紹介でした。ちょっと設定するだけで7Mbpsくらい。パケットロス0には至りませんでしたが、できます。やっぱり調査は難しかったので、このあたりはまたネタにしたいなと思います。
ハイパーバイザーは作れたんですが、実はそれに載せる仮想ルーターがあまりないので、今後の課題です。以上です。ありがとうございました。
関連タグ:
2025.03.25
減点を恐れてモチベ低下、果ては離職も… あらゆる“会社の害虫”を大繁殖させる「ラスボス」の正体
2025.03.24
最悪の場合、組織を死に至らせる“会社の害虫”とは 誤った意思決定や品質不祥事を招く要因
2023.02.13
小6で「ヤマギシ会」に入り、23歳まで子どもだけで集団生活 「お金が存在しない」コミューン育ちの青年が社会に出て知ったこと
2025.03.25
ムダな仕事がなくならない“マッチョな職場”を変えるには 近年の過度な「KPI主義」が組織に与えた影響
2025.03.27
交渉で「落としどころを探る」という考えは捨てるべき プロが教える、チャンスを逃さない条件交渉のコツ
2025.03.19
組織をダメにする“害虫”の正体は間違った思い込み AIやDXなど手段のみにこだわるダメ上司の見極め方
2025.03.24
気づけばモラル崩壊……人材育成に無頓着な企業の末路 業績アップや採用にもつながる“人への投資”の重要性
2025.03.21
マネージャーの「自分でやったほうが早い」という行動で失うもの 効率・スピード重視の職場に足りていない考え方
2025.03.21
査定時期に上司から1年前の失敗を指摘される理不尽 変えられない過去を議論する「成果主義」の弊害
2025.01.07
1月から始めたい「日記」を書く習慣 ビジネスパーソンにおすすめな3つの理由
2025.03.25
減点を恐れてモチベ低下、果ては離職も… あらゆる“会社の害虫”を大繁殖させる「ラスボス」の正体
2025.03.24
最悪の場合、組織を死に至らせる“会社の害虫”とは 誤った意思決定や品質不祥事を招く要因
2023.02.13
小6で「ヤマギシ会」に入り、23歳まで子どもだけで集団生活 「お金が存在しない」コミューン育ちの青年が社会に出て知ったこと
2025.03.25
ムダな仕事がなくならない“マッチョな職場”を変えるには 近年の過度な「KPI主義」が組織に与えた影響
2025.03.27
交渉で「落としどころを探る」という考えは捨てるべき プロが教える、チャンスを逃さない条件交渉のコツ
2025.03.19
組織をダメにする“害虫”の正体は間違った思い込み AIやDXなど手段のみにこだわるダメ上司の見極め方
2025.03.24
気づけばモラル崩壊……人材育成に無頓着な企業の末路 業績アップや採用にもつながる“人への投資”の重要性
2025.03.21
マネージャーの「自分でやったほうが早い」という行動で失うもの 効率・スピード重視の職場に足りていない考え方
2025.03.21
査定時期に上司から1年前の失敗を指摘される理不尽 変えられない過去を議論する「成果主義」の弊害
2025.01.07
1月から始めたい「日記」を書く習慣 ビジネスパーソンにおすすめな3つの理由