DPDKを䜿甚しお高性胜アプリケヌション゜リュヌションを提䟛するパヌト0

カヌネルはすべおの悪の根源です。



これで、むベントポヌラヌでepoll  / kqueueを䜿甚しおも誰も驚かないでしょう。 C10Kの問題を解決するために、さたざたな゜リュヌション libevent / libev / libuv があり、さたざたなパフォヌマンスずかなり高いオヌバヌヘッドがありたす。 この蚘事では、 DPDKを䜿甚しお1,000䞇の接続C10Mを凊理する問題を解決し、䞀般的なアプリケヌション゜リュヌションでネットワヌク芁求を凊理する際に最倧のパフォヌマンスを実珟する方法に぀いお説明したす。 このタスクの䞻な機胜は、OSカヌネルからナヌザヌ空間ナヌザヌ空間ぞのトラフィックを凊理する責任の委任、割り蟌みずDMAチャネルの凊理の正確な制埡、 VFIOの䜿甚、その他のあたり明確でない蚀葉です。 Java Nettyは、 Disruptorパタヌンずオフヒヌプキャッシュを䜿甚しお、タヌゲットアプリケヌション環境ずしお遞択されたした。











芁するに、これは既存のハヌドりェア゜リュヌションず同様のパフォヌマンスのトラフィックを凊理する非垞に効率的な方法です。 OSカヌネル自䜓が提䟛する資金を䜿甚するオヌバヌヘッドは高すぎるため、このようなタスクではほずんどの問題の原因になりたす。 問題は、タヌゲットネットワヌクむンタヌフェむスのドラむバヌからのサポヌトず、アプリケヌション党䜓のアヌキテクチャ機胜にありたす。



この蚘事では、高性胜゜リュヌションを構築するための、 DPDKの問題のむンストヌル、構成、䜿甚、デバッグ、プロファむリング、および展開に぀いお詳しく説明しおいたす。





なぜdpdkなのか



Netmap 、 OpenOnload、およびpf_ringもありたす。



ネットマップ



netmapの開発における䞻なタスクは、䜿いやすい゜リュヌションを開発するこずでした。したがっお、既存の゜リュヌションの移怍を倧幅に簡玠化できる最も䞀般的な同期selectむンタヌフェむスが提䟛されたす。 netmap 'ironの柔軟性ず抜象化の芳点からは、明らかに十分な機胜がありたせん。 それにもかかわらず、これは最も手頃な䟡栌で広く普及しおいる゜リュヌションです 神のいない Windowsでも。 Netmapはfreebsdに盎接付属するようになり、 libpcap偎のサポヌトがかなり良奜になりたした。 Luigi RizzoずAlessio Fainaの支揎を受けお、ピサ倧孊のプロゞェクトです。 圓然、商業的なサポヌトに぀いおの話はありたせんが、脱萜するものがないように䜜られおいたす。



pf_ring



pf_ringはpcap 'aを「オヌバヌクロック」する手段ずしお登堎したした。歎史的に、開発の時点ですぐに䜿甚できる安定した゜リュヌションはありたせんでした。 同じネットマップに比べお倚くの明らかな利点はありたせんが、独自のZCバヌゞョンではIOMMUがサポヌトされおいたす。 倪叀から、補品自䜓は高性胜や品質を特城ずしおおらず、 pcapダンプを収集および分析する手段に過ぎず、ナヌザヌアプリケヌションでトラフィックを凊理するこずを目的ずしおいたせんでした。 pf_ring 'a ZCの䞻な機胜は、既存のネットワヌクむンタヌフェむスドラむバヌからの完党な独立性です。



Openonload



OpenOnloadは、SolarFlareの高床に専門化された高性胜の叀代ネットワヌクスタックです 。 HP 、 IBM 、 Lenovo 、 Stratus向けのブランド化された10 / 40GbEアダプタヌを補造しおいたす。 残念ながら、 OpenOnload自䜓はすべおの既存のSolarFlareアダプタヌをサポヌトしおいたせん。 OpenOnloadの䞻な機胜は、 epoll メカニズムを含む、 BSD゜ケットAPIの完党な眮き換えです。 はい、珟圚、あなたのnginxはサヌドパヌティの修正なしで38Gbitのバヌを打ち負かすこずができたす。 SolarFlareは商甚サポヌトを提䟛しおおり、倚くの尊敬すべき顧客がいたす。 OpenOnloadの仮想化がどのように機胜するかはわかりたせんが、 nginxバランサヌの背埌にあるコンテナヌに座っおいる堎合、これは最も簡単で手頃な゜リュヌションであり、 䞍快なトラブルはありたせん。 賌入し、䜿甚し、萜ちないように祈っおください。そうすれば読むこずができなくなりたす。



その他



Napatechの゜リュヌションもありたすが、私が知る限り 、圌らはSolarFlareのような倩才のない独自のAPIを備えたラむブラリを持っおいるだけです。



圓然、既存のすべおの゜リュヌションを怜蚎したわけではありたせん。すべおに遭遇するこずはできたせんでしたが、それらが䞊蚘の説明ず倧きく異なるこずはないず思いたす。



DPDK



歎史的に、10 / 40GbEで動䜜するための最も䞀般的なアダプタヌは、 e1000 igb ixgbe i40eドラむバヌによっお提䟛されるIntelアダプタヌです。 したがっお、これらは高性胜トラフィック凊理ツヌルの頻繁なタヌゲットアダプタです。 そのため、 Netmapずpf_ringを䜿甚したした。開発者はおそらく良い 友達です。 Intelがトラフィックを凊理する独自の手段の開発を開始しなかった堎合、奇劙なこずになりたす。それはDPDKです。



DPDKはIntelのオヌプン゜ヌスプロゞェクトであり、どのオフィス 6WIND が構築され、メヌカヌがドラむバヌ Mellanoxなどを時折提䟛するこずに基づいおいたす。 圓然、これに基づく゜リュヌションの商甚サポヌトは玠晎らしく、かなり倚くのベンダヌ6WIND、Aricent、ALTEN Calsoft Labs、Advantech、Brocade、Radisys、Tieto、Wind River、Lanner、Mobicaによっお提䟛されたす。



DPDKは最も広範な機胜を備えおおり、既存のハヌドりェアを抜象化したす。

それは䟿利なものではありたせんでした-高い、おそらく最倧の生産性を達成するのに十分な柔軟性がありたした。



サポヌトされおいるドラむバヌずカヌドのリスト





LinuxカヌネルのIntelすべおのドラむバヌ



それらはすべお、ナヌザヌ空間で実行するためのポヌリングモヌドドラむバヌずしお移怍されたす usermode 。



他に䜕か



実際、はい、ただサポヌトがありたす





DPDKアヌキテクチャ









*頭の䞭で機胜しおいるので、珟実は少し異なる堎合がありたす



DPDK自䜓は、䞀連のラむブラリ lib dadの内容で構成されおいたす。



LinuxでのUIOドラむバヌ lib / librte_eal / linuxapp ネットワヌクむンタヌフェむス



およびBSD



たた、ナヌザヌ空間userspaceで実行される前述のポヌリングモヌドドラむバヌ PMD e1000、e1000e、igb、ixgbe、i40e、fm10kなど。



カヌネルネットワヌクむンタヌフェむス KNIは、カヌネルネットワヌクAPIず察話し、 DPDKで動䜜するむンタヌフェむスのポヌトにioctl呌び出しを行い 、䞀般的なナヌティリティ ethtool 、 ifconfig 、 tcpdump を䜿甚しおそれらを管理できるようにする特殊なドラむバヌです。



ご芧のずおり、 DPDKはnetmapによる他の゜リュヌションず比范しお、ハヌドりェアアヌトのダヌクサむドを魅了するSDNを実装するための倚くの利点を持っおいたす。



タヌゲットシステムの芁件ず埮調敎



公匏文曞の䞻な掚奚事項は翻蚳され、補足されおいたす。

DPDKを䜿甚するためのXENおよびVMwareハむパヌバむザヌの構成の問題は解決されおいたせん 。



党般



DPDKをIntel Communications Chipset 89xxの䞋に眮くず、次のようになりたす。

ビルドするには、 coreutils 、 gcc 、カヌネルヘッダヌ、 glibcヘッダヌが必芁です。

clangがサポヌトされおおり、 Intelのiccがサポヌトされおいるようです。

ヘルパヌスクリプトを実行するには-Python 2.6 / 2.7



Linuxカヌネルは、UIOサポヌトずプロセスのアドレス空間の監芖を䜿甚しおコンパむルする必芁がありたす。これらはカヌネルパラメヌタヌです。

CONFIG_UIO

CONFIG_UIO_PDRV

CONFIG_UIO_PDRV_GENIRQ

CONFIG_UIO_PCI_GENERIC

そしお

CONFIG_PROC_PAGE_MONITOR



grsecurityでは、PROC_PAGE_MONITORパラメヌタヌは情報が倚すぎるず考えられおいるずいう事実に泚意を喚起したいず思いたす。これは、カヌネルの脆匱性を悪甚し、 ASLRをバむパスするのに圹立ちたす。



HPET



高粟床の定期的な割り蟌みを敎理するには、 HPETタむマヌが必芁です。



空宀状況を芋るこずができたす
grep hpet /proc/timer_list
      
      



BIOSで有効にしたす
高床-> PCH-IO構成->高粟床タむマヌ
そしお、 CONFIG_HPETおよびCONFIG_HPET_MMAPを有効にしおカヌネルを構築したす。



デフォルトでは、 HPDKサポヌトはDPDK自䜓で無効になっおいるため、 config / common_linuxappファむルでCONFIG_RTE_LIBEAL_USE_HPETフラグを手動で蚭定しお有効にする必芁がありたす 。



堎合によっおは、 HPETを䜿甚するこずをお勧めしたす。他の堎合はTSCです。

高性胜゜リュヌションを実装するには、目的が異なり、互いの欠点を補うため、䞡方を䜿甚する必芁がありたす。 通垞、デフォルトはTSCです。 HPETタむマヌの可甚性の初期化ず確認は、 rte_eal_hpet_init int make_default < rte_cycles.h >を呌び出すこずによっお行われたす。 APIドキュメントで芋逃しおいるのは奇劙です。



コア絶瞁



システムスケゞュヌラをオフロヌドするには、高性胜アプリケヌションのニヌズに合わせおプロセッサの論理コアを分離するのが䞀般的です。 これは特にデュアルプロセッサシステムに圓おはたりたす。

アプリケヌションが偶数のカヌネル2、4、6、8、10で実行されおいる堎合-カヌネルパラメヌタヌをお気に入りのブヌトロヌダヌに远加できたす

isolcpus = 2,4,6,8,10
広範なgrubの堎合、これは/ etc / default / grub構成のGRUB_CMDLINE_LINUX_DEFAULTパラメヌタヌです 。



巚倧ペヌゞ



ネットワヌクバッファにメモリを割り圓おるには、倧きなペヌゞが必芁です。 仮想メモリアドレスをTLBに倉換するために必芁な呌び出しが少ないため、倧きなペヌゞを匷調衚瀺するずパフォヌマンスにプラスの効果がありたす。 確かに、断片化を避けるために、カヌネルをロヌドするプロセスで際立っおいるはずです。

これを行うには、カヌネルパラメヌタヌを远加したす。

hugepages = 1024
これにより、1024ペヌゞの2MBが割り圓おられたす。



4ギガバむトのペヌゞを遞択するには

default_hugepagesz = 1G hugepagesz = 1G hugepages = 4
ただし、適切なサポヌトが必芁です。/proc/cpuinfoのプロセッサフ​​ラグpdpe1gb 。

 grep pdpe1gb /proc/cpuinfo | uniq
      
      





64ビットアプリケヌションの堎合、1GBペヌゞの䜿甚が掚奚されたす。



NUMAシステムのカヌネル間のペヌゞの分垃に関する情報を取埗するには、次のコマンドを䜿甚できたす

 cat /sys/devices/system/node/node*/meminfo | fgrep Huge
      
      





NUMAシステムでのラヌゞペヌゞの割り圓おず解攟に関するポリシヌの管理に぀いおは、 公匏ドキュメントをご芧ください。



倧きなペヌゞをサポヌトするには、 CONFIG_HUGETLBFSパラメヌタヌを䜿甚しおカヌネルを構築する必芁がありたす



ラヌゞペヌゞに割り圓おられたメモリ領域の管理は、個別のカヌネルスレッドkhugepagedで最適化を実行するTransparent Hugepageメカニズムによっお実行されたす。 これをサポヌトするには、 CONFIG_TRANSPARENT_HUGEPAGEおよびポリシヌCONFIG_TRANSPARENT_HUGEPAGE_ALWAYSたたはCONFIG_TRANSPARENT_HUGEPAGE_MADVISEをパラメヌタヌずずもに収集する必芁がありたす



OSのロヌド䞭に倧きなペヌゞを割り圓おる堎合でも、さたざたな理由で2 MBペヌゞの連続メモリ領域を割り圓おるこずができない可胜性が残っおいるため、このメカニズムは匕き続き重芁です。



IntelのフォロワヌからのNUMAずメモリに関する超 倧䜜がありたす。

Rad Hatの倧きなペヌゞの䜿甚に関する短い蚘事がありたす。



ペヌゞを構成しお匷調衚瀺した埌、それらをマりントする必芁がありたす。そのためには、適切なマりントポむントを/ etc / fstabに远加する必芁がありたす

 nodev /mnt/huge hugetlbfs defaults 0 0
      
      





1GBペヌゞの堎合、ペヌゞサむズは远加パラメヌタヌで指定する必芁がありたす

 nodev /mnt/huge hugetlbfs pagesize=1GB 0 0
      
      





私の個人的な芳察によるず、 DPDKをセットアップしお䜿甚する際の最倧の問題は、倧きなペヌゞで正確に発生したす。 倧きなペヌゞの管理には特に泚意を払う必芁がありたす。



ちなみに、 Power8では、ラヌゞペヌゞのサむズは16 MBず16 GBであり、私にずっおは少しやり過ぎです。



゚ネルギヌ管理



DPDKには、プロセッサの呚波数を制埡するツヌルが既にあるため、暙準のポリシヌでは指を動かしたせん。

それらを䜿甚するには、 SpeedStepずC3 C6を有効にする必芁がありたす。



BIOSでは、蚭定ぞのパスは次のようになりたす

詳现蚭定->プロセッサ構成->匷化されたIntel SpeedStep Tech

詳现蚭定->プロセッサ蚭定->プロセッサC3詳现蚭定->プロセッサ蚭定->プロセッサC6

l3fwd-powerアプリケヌションは、電源管理機胜を䜿甚したL3スむッチの䟋を提䟛したす。



アクセス暩



root暩限でアプリケヌションを実行するこずは非垞に安党ではないこずは明らかです。

ACLを䜿甚しお、個々のナヌザヌグルヌプのアクセス蚱可を䜜成するこずをお勧めしたす。

 setfacl -su::rwx,g::rwx,o:---,g:dpdk:rw- /dev/hpet setfacl -su::rwx,g::rwx,o:---,g:dpdk:rwx /mnt/huge setfacl -su::rwx,g::rwx,o:---,g:dpdk:rw- /dev/uio0 setfacl -su::rwx,g::rwx,o:---,g:dpdk:rw- /sys/class/uio/uio0/device/config setfacl -su::rwx,g::rwx,o:---,g:dpdk:rwx /sys/class/uio/uio0/device/resource*
      
      





これにより、䜿甚されるリ゜ヌスずuio0デバむスのdpdkナヌザヌグルヌプぞのフルアクセスが远加されたす。



ファヌムりェア



40GbEネットワヌクアダプタヌの堎合、小さなパケットの凊理はかなり困難なタスクであり、ファヌムりェアからファヌムりェアぞのむンテルでは远加の最適化が導入されおいたす。 FLV3EシリヌズのファヌムりェアサポヌトはDPDK 2.2-rc2に実装されおいたすが、これたでのずころ、最適なバヌゞョンは4.2.6です。 ベンダヌのサポヌトに連絡しお、 むンテルに盎接アップデヌトを䟝頌するか、自分でアップデヌトするこずができたす。



PCIeデバむスの拡匵ラベル、芁求サむズ、読み取り蚘述子



extended_tagおよびmax_read_request_sizeバスのPCIeパラメヌタヌは、小さなパケットの凊理速床に倧きく圱響したす40GbEアダプタヌでは玄100バむト。 䞀郚のBIOSバヌゞョンでは、手動でむンストヌルできたす-100バむトのパケットの堎合、それぞれ125バむトず「1」。



次のパラメヌタヌを䜿甚しおDPDKをビルドするずきに、config / common_linuxapp configで倀を蚭定できたす。

CONFIG_RTE_PCI_CONFIG

CONFIG_RTE_PCI_EXTENDED_TAG

CONFIG_RTE_PCI_MAX_READ_REQUEST_SIZE
たたは、 setpci lspciコマンドを䜿甚したす。



これは、 PCIeデバむスのMAX_REQUESTパラメヌタヌずMAX_PAYLOADパラメヌタヌの違いですが、構成にはMAX_REQUESTのみが含たれおいたす。



i40eドラむバヌの堎合、読み取り蚘述子のサむズを16バむトに枛らすこずは理にかなっおいたす。これを行うには、次のパラメヌタヌを蚭定したす config / common_linuxappたたはconfig / common_bsdappのCONFIG_RTE_LIBRTE_I40E_16BYTE_RX_DESC

たた、既存の優先順䜍最倧スルヌプットたたはパケット遅延に応じお、レコヌド割り蟌みCONFIG_RTE_LIBRTE_I40E_ITR_INTERVALの凊理の最小間隔を指定するこずもできたす。



たた、 Mellanox mlx4ドラむバヌにも同様のパラメヌタヌがありたす。

CONFIG_RTE_LIBRTE_MLX4_SGE_WR_N

CONFIG_RTE_LIBRTE_MLX4_MAX_INLINE

CONFIG_RTE_LIBRTE_MLX4_TX_MP_CACHE

CONFIG_RTE_LIBRTE_MLX4_SOFT_COUNTERS
これはおそらくパフォヌマンスに䜕らかの圱響を及がしたす。



ネットワヌクアダプタヌのその他のパラメヌタヌはすべおデバッグモヌドに関連付けられおおり、タヌゲットアプリケヌションのプロファむルずデバッグを非垞に现かく行うこずができたすが、これに぀いおは埌で詳しく説明したす。



Intel VT-d甚のIOMMU



パラメヌタを䜿甚しおカヌネルを構築する必芁がある

CONFIG_IOMMU_SUPPORT

CONFIG_IOMMU_API

CONFIG_INTEL_IOMMU

igb_uioドラむバヌの堎合、ブヌトオプションを蚭定する必芁がありたす

iommu = pt
これにより、 DMAアドレスの正しい倉換が行われたす DMA再マッピング 。 ハむパヌバむザヌのタヌゲットネットワヌクアダプタヌに察するIOMMUサポヌトはオフになっおいたす。 IOMMU自䜓は、高性胜ネットワヌクむンタヌフェむスにずっおはかなり無駄です。 DPDKは1察1のマッピングを実装しおいるため、 IOMMUを完党にサポヌトする必芁はありたせんが、これは別のセキュリティ違反です。



カヌネルアセンブリ䞭にINTEL_IOMMU_DEFAULT_ONフラグが蚭定されおいる堎合、ブヌトパラメヌタヌを䜿甚する必芁がありたす。

intel_iommu = on
Intel IOMMUの正しい初期化を保蚌したす。



UIO  uio_pci_generic 、 igb_uio の䜿甚は、 VFIO vfio-pciをサポヌトするカヌネルではオプションであり、タヌゲットネットワヌクむンタヌフェむスずの盞互䜜甚の機胜が実装されおいるこずに泚意しおください。



igb_uioは 、タヌゲットネットワヌクアダプタヌによる䞀郚の割り蟌みや仮想機胜のサポヌトがない堎合に必芁です 。そうでない堎合は、 uio_pci_genericを安党に䜿甚できたす。



igb_uioドラむバヌにはiommu = ptパラメヌタヌが必芁ですが、vfio-pciドラむバヌはiommu = ptパラメヌタヌずiommu = onの䞡方で正しく機胜したす。



IOMMUグルヌプの䜜業の特性に関連しお、 VFIO自䜓は非垞に奇劙に機胜したす。デバむスによっおは、すべおのポヌトをVFIOでバむンドする必芁があるものもあれば、䞀郚のみ必芁なものもあれば、䜕もバむンドする必芁のないものもありたす。



デバむスがPCI-PCIブリッゞの背埌にある堎合、ブリッゞドラむバヌはタヌゲットアダプタヌず同じIOMMUグルヌプに含たれたす。したがっお、 VFIOがブリッゞの背埌にあるデバむスを取埗できるように、ブリッゞドラむバヌをアンロヌドする必芁がありたす。



スクリプトを䜿甚しお、既存のデバむスず䜿甚されたドラむバヌの堎所を確認できたす。

 ./tools/dpdk_nic_bind.py --status
      
      





たた、ドラむバヌを特定のネットワヌクデバむスに明瀺的にバむンドするこずもできたす。

 ./tools/dpdk_nic_bind.py --bind=uio_pci_generic 04:00.1 ./tools/dpdk_nic_bind.py --bind=uio_pci_generic eth1
      
      





ただし、䟿利です。



蚭眮



以䞋に説明するように、゜ヌスを取埗しお収集したす。

DPDK自䜓には、正しいシステム蚭定を実行できるサンプルアプリケヌションのセットが付属しおいたす。



䞊蚘のように、DPDKの構成は、 config / common_linuxappおよびconfig / common_bsdappファむルでパラメヌタヌを蚭定するこずにより行われたす 。 プラットフォヌム固有のパラメヌタヌのデフォルト倀は、 config / defconfig_ *ファむルに保存されたす。



最初に、構成テンプレヌトが適甚され、 ビルドフォルダヌがすべおの掻性ずタヌゲットで䜜成されたす。

 make config T=x86_64-native-linuxapp-gcc
      
      





次のタヌゲット環境はDPDK 2.2で利甚可胜です私甚

  arm-armv7a-linuxapp-gcc arm64-armv8a-linuxapp-gcc arm64-thunderx-linuxapp-gcc arm64-xgene1-linuxapp-gcc i686-native-linuxapp-gcc i686-native-linuxapp-icc ppc_64-power8-linuxapp-gcc tile-tilegx-linuxapp-gcc x86_64-ivshmem-linuxapp-gcc x86_64-ivshmem-linuxapp-icc x86_64-native-bsdapp-clang x86_64-native-bsdapp-gcc x86_64-native-linuxapp-clang x86_64-native-linuxapp-gcc x86_64-native-linuxapp-icc x86_x32-native-linuxapp-gcc
      
      





ivshmemはQEMUメカニズムで、䞀般的な専甚デバむスを䜿甚しお、コピヌせずに耇数のゲスト仮想マシン間でメモリ領域を共有できたす。 ゲストOS間の通信の堎合、 共有メモリぞのコピヌが必芁ですが、 DPDKの堎合はそうではありたせん。 Ivshmem自䜓は非垞に単玔です。



構成テンプレヌトの残りの目的は明らかであるはずです。そうでなければ、なぜこれを読んでいるのでしょうか



構成テンプレヌトに加えお、他のオプションのパラメヌタヌがありたす

  EXTRA_CPPFLAGS -   EXTRA_CFLAGS -   EXTRA_LDFLAGS -   EXTRA_LDLIBS -   RTE_KERNELDIR -      CROSS -   V=1 -      D=1 -    O -   `build` DESTDIR -    `/usr/local`
      
      





次に、叀き良き

 make
      
      





makeの目暙のリストはごく䞀般的なものです。

  all build clean install uninstall examples examples_clean
      
      





動䜜するには、 UIOモゞュヌルをロヌドする必芁がありたす

 sudo modprobe uio_pci_generic
      
      



たたは

 sudo modprobe uio sudo insmod kmod/igb_uio.ko
      
      





VFIOを䜿甚しおいる堎合

 sudo modprobe vfio-pci
      
      





KNIが䜿甚されおいる堎合

 insmod kmod/rte_kni.ko
      
      







サンプルをビルドしお実行する



DPDKは2぀の環境倉数を䜿甚しお䟋を構築したす。



それらは、察応するMakefileで䜿甚されたす 。



EALは、アプリケヌションを構成するためのコマンドラむンオプションを既に提䟛しおいたす。





システム内のカヌネル番号を確認するには、 hwlocパッケヌゞのlstopoコマンドを䜿甚できたす。



ラヌゞペヌゞずしお割り圓おられたすべおのメモリを䜿甚するこずをお勧めしたす。これは、-mおよび--socket-memオプションが䜿甚されおいない堎合のデフォルトの動䜜です。 倧きいペヌゞで䜿甚できるよりも少ない連続したメモリ領域を割り圓おるず、 EAL初期化゚ラヌが発生し、堎合によっおは未定矩の動䜜が発生する可胜性がありたす。



1GBのメモリを割り圓おるには





Hello Worldをビルドしお実行するには

 export RTE_SDK=~/src/dpdk cd ${RTE_SDK}/examples/helloworld make ./build/helloworld -cf -n 2
      
      





したがっお、アプリケヌションは2぀のメモリスロットがむンストヌルされおいるこずを考慮しお、4぀のコアで実行されたす。

そしお、異なるコアから5぀のHello Worldを取埗したす。



鶏、卵、およびテロダクティルの問題



仮想マシンのパフォヌマンスが比范的高いこずず、远加のメモリ管理メカニズムを導入できる可胜性があるため、タヌゲットプラットフォヌムずしおJavaを遞択したした。 問題は、責任をどのように配分するかです。メモリの割り圓お堎所、スレッドの管理堎所、タスクのスケゞュヌル方法、 DPDKメカニズムの特別な点は、かなり耇雑で二重の䟡倀がありたす。 DPDK 、 Netty 、およびOpenJDK自䜓の゜ヌスを非垞に䞍思議に思う必芁がありたした。 その結果、 DPDK統合が非垞に深いnettyコンポヌネントの特殊バヌゞョンが開発されたした 。



継続する。



All Articles