DPDK Programmer’s Guide(28)Reorder庫

官方文檔查看地址:
http://doc.dpdk.org/guides/prog_guide/reorder_lib.html
PDF下載地址:
https://www.intel.com/content/www/us/en/embedded/technology/packet-processing/dpdk/dpdk-programmers-guide.html

本篇難度係數:
翻譯:☆☆☆☆☆
理解:★★☆☆☆

28.重新排序庫
Reorder庫提供了一種基於mbufs序列號重新排序的機制。

28.1. 操作
reorder庫本質上是一個重新排序mbufs的緩衝區。用戶將無序mbufs插入到重新排序緩衝區中,並從中提取有序mbufs。

在給定時間,reorder緩衝區包含序列號位於sequence窗口內的mbufs。序列窗口由最小序列號和緩衝區配置爲容納的條目數決定。例如,給定一個包含200個條目和最小序列號爲350的重新排序緩衝區,序列窗口的上限分別爲350和550。

當插入mbuf時,reorder庫根據插入mbuf的序號區分有效的、早的和晚的mbuf:

  • 有效:序列號在窗口內。
  • 遲:序號在窗口外,小於下限。
  • 早:序號在窗口外,且大於上限。

reorder緩衝區直接返回晚期mbufs,並嘗試容納早期mbufs。

28.2實現細節
reorder庫實現爲一對緩衝區,稱爲Order緩衝區和Ready緩衝區。

在插入調用時,將有效的mbufs直接插入到Order緩衝區中,並將帶有錯誤的晚期mbufs返回給用戶。

在早期mbuf的情況下,reorder緩衝區將嘗試移動窗口(增加最小序列號),以便mbuf成爲一個有效的窗口。爲此,Order緩衝區中的mbufs被移動到Ready緩衝區中。任何尚未到達的mbuf都將被忽略,因此將成爲延遲的mbuf。這意味着,只要就緒緩衝區中還有空間,窗口就會被移動,以容納在重新排序窗口之外的早期mbuf。

例如,假設我們有一個包含200個條目的緩衝區,其中包含350個最小序列號,並且我們需要插入一個包含565個序列號的早期mbuf。這意味着我們需要移動窗口至少15個位置來容納mbuf。只要就緒緩衝區中還有空間,reorder緩衝區將嘗試將mbufs從Order緩衝區中的至少15個插槽移動到就緒緩衝區。此時訂單緩衝區中的任何空隙都將被跳過,這些包到達時將被報告爲延遲包。將數據包移動到就緒緩衝區的過程將持續到所需的最小值之後,直到在順序緩衝區中遇到一個缺口,即丟失mbuf。

在清空mbufs時,reorder緩衝區將首先在就緒緩衝區中返回mbufs,然後從Order緩衝區返回mbufs,直到找到一個缺口(尚未到達的mbufs)。

28.3用例:包分發器

使用DPDK包分發器的應用程序可以使用reorder庫以接收包的相同順序傳輸包

一個基本的包分發器用例將由一個具有多個worker內核的分發器組成。工作人員對包的處理不能保證是有序的,因此可以使用重新排序緩衝區來對儘可能多的包進行排序。

在這種情況下,分發服務器在將序列號交付給工作人員之前將序列號分配給mbufs。當工作人員處理完數據包時,分發服務器將這些mbuf插入到重新排序緩衝區中,並最終傳輸耗盡的mbuf。

注意:目前,重新排序緩衝區不是線程安全的,因此同一線程負責插入和排幹mbufs。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章