知方号

知方号

リソース設定(NIC) ~DPDK入門 第6回~

DPDKではUIOを利用して個々のNIC用にパケットを高速に処理するための専用のデバイスドライバを提供しており、そのドライバのことをPMD(Poll Mode Driver)と呼んでいます。NICは受信したパケットや送信するパケットを格納しておくメモリ領域を持っています。このメモリ領域のことを「キュー」といいます。 通常はカーネルがNICが受信したパケットをキューから取り出したり、送信したいパケットをキューに格納します。カーネルがこのような役割を担っているため、アプリケーションがパケット処理を実現する場合、システムコールを通してカーネルが格納したパケットを取得したり、送信したいパケットをカーネルに渡す必要があります。

カーネルを利用したパケット受信の処理イメージを下図に示します。この場合、割込みやカーネル空間からユーザ空間へのパケット引き渡し等のオーバーヘッドが発生し、アプリケーションのパケット処理性能に影響を及ぼしてしまいます。

一方、DPDKアプリケーションでパケット処理を実現する場合、下図のようにNICに対して常にポーリングでパケット受信を監視する形をとり、パケット自体もNICのキューから直接ユーザ空間(Hugepage)に移すため、オーバーヘッドなくすぐにパケット処理を実施することができます。

PMDに関して詳しく知りたい人は、DPDKの公式ページ(※2)にも記載がありますのでご覧下さい。

実際のNICは様々な種類がありますが、NICに対応したデバイスドライバも複数の種類があります。例えばIntel社のNICでいうと、PCI Express Gigabit Ethernet用のデバイスドライバであるIGB(※3)や、PCI 10Gb 用のデバイスドライバであるIXGBE(※4)があります。通常はカーネルがNICの種類に応じたデバイスドライバを利用するため、開発者がパケット処理を行うアプリケーションを実装する際は、システムコールを介してNICの種類を意識することなくプログラミングすることができます。DPDKでも同様に、DPDKライブラリ側がNICの種類に応じた専用のPMDを割り当ててくれるため、開発者はDPDKが用意している専用のパケット処理用APIを利用することで、NICの種類を意識することなくプログラミングすることができます。

DPDKではシステムコールを介せずにパケット処理を実施することで、高速なパケット処理を実現しています。その仕組みはDPDK特有の内容になるため、この考え方を理解することが重要です。

※2 Poll Mode Driver https://doc.dpdk.org/guides/prog_guide/poll_mode_drv.html

※3 IGB Manual Pages https://nxmnpg.lemoda.net/4/igb

※4 IXGBE Manual Pages https://nxmnpg.lemoda.net/4/ixgbe

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至lizi9903@foxmail.com举报,一经查实,本站将立刻删除。

上一篇 没有了

下一篇没有了