IT・技術研修ならCTC教育サービス

サイト内検索 企業情報 サイトマップ

研修コース検索

コラム

クラウド時代のオープンソース実践活用

CTC 教育サービス

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes 

第54回 NFVとIntel DPDK(後編) (中井悦司) 2014年11月

はじめに

 前回のコラムでは、Intel DPDK(以下、DPDK)の基本的な役割について解説しました。DPDKは、端的に言うと、Linuxカーネルに実装された複雑でオーバーヘッドの大きいネットワーク処理の仕組みの代わりに、よりシンプルで高速なネットワーク処理の仕組みをユーザーアプリケーションで再実装するためのツールセットです。

 今回は、DPDKを構成するコアコンポーネントの1つであるPMD(Poll Mode Driver)と、仮想マシン環境におけるDPDKの活用についてお話します。

DPDKの基本動作

 先ほど、Linuxカーネルのオーバーヘッドに触れましたが、具体的にはどのようなオーバーヘッドがあるのでしょうか?

 たとえば、Linuxカーネルでは、ネットワークパケットの受信を「割り込み型」で実装しています。普段は、ネットワーク以外のさまざまな処理を行っているカーネルに対して、外部からパケットが届いた際に、NICから割り込みが入ります。すると、カーネルは、今行っている処理を中断して、デバイスドライバーに処理を切り替えて、パケットの受信処理にとりかかります。このため、カーネルが割り込みに反応して処理を切り替えるまでの間、パケットの処理は待たされることになります。

 一方、DPDKの場合は、PMD(Poll Mode Driver)という特別なデバイスドライバーが提供されます。このドライバーは、特定のCPUコアに常駐して、外部からパケットが到達するのを常に監視しています。そして、NICにパケットが到着すると、即座にパケットの処理を開始します。この時、PMDが稼働するCPUコアがそのままパケットの処理までまとめて実施する「run-to-completion」方式と、実際のパケットの処理は他のCPUコアに依頼する「pipe-line」方式が選択できます。

 いずれにしても、Linuxカーネルが提供するパケット処理の仕組みを無視して、DPDKを使用するユーザーアプリケーションが直接にパケットを処理する形になることが分かります。これは、裏を返すと、パケットのヘッダーを見てTCP/IPなどのプロトコルを判別するような処理まで、ユーザーアプリケーションで実装する必要があることを意味します。この部分の実装に無駄があれば、当然ながら、パケットの処理性能は低下してしまいます。DPDKを使用すると無条件に性能向上するわけではない、という点は注意が必要です。NICからNICにパケットを転送するだけの単純な処理のベンチマーク結果だけでは、DPDKの実力は評価できません。

 なお、RSS(Receive-Side Scaling)という機能に対応した最近のNICでは、NICが受信したパケット群を複数のグループに分けて、それぞれのグループを別々のCPUコアが並列に処理することも可能です。10Gbps以上の高速なNICに対応するには、シングルコアの性能では処理が間に合わないことがほとんどですので、DPDKを使用する場合は、複数のCPUコアでPMDを実行することで、単独のCPUコアの性能がボトルネックになることを回避します。

仮想マシン環境におけるDPDK

 続いて、仮想マシン環境におけるDPDKの利用方法を考えます。Linux KVMの仮想マシン環境では、ホストLinuxのカーネルと、ゲストOSのカーネル、2種類のカーネルが存在します。DPDKのアプリケーションがカーネルの代わりにパケットを処理すると言っても、ホストとゲストのどちらでDPDKを使うのか、どちらのカーネルをスキップして処理するのか、という点でさまざまな選択肢が考えられます。

 前述のように、DPDKは、あくまでパケット処理のアプリケーションを自作するためのツールキットに過ぎませんので、仮想マシン環境でDPDKをどのように利用するかは、ユーザーの自由であり、現状、さまざまなレイヤーでのさまざまな実装が提案/検証されている段階になります。たとえば、物理環境を想定して作成した、DPDK対応のアプリケーションをそのままゲストOSに導入すれば、ゲストOSのカーネルをスキップして、ユーザーアプリケーションから、直接に仮想NICにアクセスすることが可能になります(図1の左)。この場合、仮想NICと物理NICの間のパケット転送処理は、従来通り、ハイパーバイザーが提供する仮想スイッチを経由することになりますので、この部分のオーバーヘッドは従来と変わりません。

 そこで、もうひとつ考えられるのが、ゲストOS内のDPDK対応アプリケーションから、物理NICを直接に操作する方法です(図1の右)。この場合は、ハイパーバイザーの機能で、特定の物理NICを仮想マシンに直接に接続する、パススルー型の構成が前提となります。ハイパーバイザーが提供する仮想スイッチの機能は使用できず、複数の仮想マシンで物理NICを共有したい場合は、SR-IOVに対応した、特別な物理NICが必要となります。SR-IOVは、1つの物理NICを仮想的に複数のNICに見せる機能をNICのハードウェアとして提供するものです。

fig01

図1 仮想マシン内部でのDPDK利用例

 その他には、仮想マシン側のネットワーク機能は、従来通り、ゲストOSのカーネルに任せておいて、ホストLinux側の仮想ネットワークをDPDKで高速化するアプローチもあります。Linux上に仮想スイッチ機能を提供するオープンソースのOpen vSwitchでは、DPDKを使用することで、Open vSwitchと物理NICの間のパケット処理を高速化する実装が進められています。

 そして、世の中には、ハイパーバイザーの仮想スイッチ機能とゲストOS内部のパケット処理をまとめて再実装することで、ホストとゲストのネットワーク処理を一気通貫で高速化する方法を提案する研究者もいます。図2は、2014年4月に発表された、「NetVM」という仕組みを解説した論文からの引用です(*1) 。ここでは、ハイパーバイザーと仮想マシンがメモリーを共有することで、メモリー間のデータコピーなしにパケットをやりとりするようになっています。そして、共有メモリーと物理NICの間のデータのやりとりに、DPDKを使用しています。

fig02

図2 「NetVM」の論文からの引用

 この仕組みにおいては、DPDKによって、物理NICから共有メモリーにパケットのデータが読み込まれた後、複数の仮想マシンが連携して、これらのパケットに必要な処理を加えていきます。たとえば、ファイアウォール機能付きのルーターを実装する場合、ルーティング機能を担当する仮想マシンとファイアウォール機能を担当する仮想マシンのような役割分担が可能になります。仮想マシン間でパケット情報を伝達するためのキューも用意されています。

 前回、NFVの目的として、「既存のネットワーク機器を仮想マシン上で実行する」という説明をしましたが、その場合、基本的には「1仮想マシン=1ネットワーク機器」という想定になります。一方、NetVMの場合は、複数の仮想マシンを連携させて、新しいネットワーク機器を作り出そうという考え方になります。

次回予告

 今回は、仮想マシン環境でのDPDKについて、お話をしました。繰り返しになりますが、DPDKは、ネットワークパケットを高速に処理するアプリケーションを作成するための「ツールキット」であり、実際にどのようなアプリケーションを実装するかは、これからの課題となります。さまざまな実装のアイデアが提案されており、どの方式が「標準」となるかは、これからの動向を見守る必要があるでしょう。特に、NetVMのような研究を見ていると、「今あるものをそのまま仮想化する」という発想だけで、NFVを捉えるわけにはいかないことが分かります。

 さて、来週は、「PaaSコンファレンス 2014」というイベントで、DockerとPaaSの関係について講演する予定です。コンテナー、Docker、Kubernetesなど、さまざまなキーワードが飛び交うエリアです。次回は、これらのキーワードを整理しながら、それぞれの役割について解説したいと思います。

参考資料

(*1) 「NetVM: High Performance and Flexible Networking Using Virtualization on Commodity Platforms

 

++ CTC教育サービスから一言 ++
このコラムでLinuxや周辺技術の技術概要や面白さが理解できたのではないかと思います。興味と面白さを仕事に変えるには、チューニングやトラブルシューティングの方法を実機を使用して多角的に学ぶことが有効であると考えます。CTC教育サービスでは、Linuxに関する実践力を鍛えられるコースを多数提供しています。興味がある方は以下のページもご覧ください。
 CTC教育サービス Linuxのページ
 http://www.school.ctc-g.co.jp/linux/
 

Linux研修トレーニングならCTC教育サービス


 

筆者書籍紹介

Software Design plusシリーズ
「独習Linux専科」サーバ構築/運用/管理
  ――あなたに伝えたい技と知恵と鉄則

本物の基礎を学ぶ!新定番のLinux独習書

中井悦司 著
B5変形判/384ページ
定価3,129円(本体2,980円)
ISBN 978-4-7741-5937-9
詳しくはこちら(出版社WEBサイト)
「独習Linux専科」サーバ構築/運用/管理

 [IT研修]注目キーワード   Python  UiPath(RPA)  最新技術動向  Microsoft Azure  Docker  Kubernetes