OVS DPDK 設備內存模型

在OVS DPDK中,DPDK設備內存可以兩種方式之一分配,共享內存每端口內存。以下詳述兩者的具體情況。

共享內存

默認情況下,OVS DPDK使用共享內存模型。這意味着多個端口可以共享相同的內存池mempool。例如,當添加端口時,它將具有與之關聯的給定MTU和Socket ID。如果之前已經爲一個具有相同MTU值和Socket ID的已有端口創建過內存池mempool,該內存池將用於這兩個端口。如果現有的內存池都不支持這兩個參數,創建一個新的內存池mempool。

每端口內存

在每端口內存模型中,內存池是按每個設備創建的,而不共享。這樣做的好處是更加透明的內存模型,其中的內存池不會被其它DPDK設備耗盡。然而,在給定部署條件下,這將給內存尺度消耗帶來潛在增加。用戶在使用此模型前應注意到此部署的內存需求,分配足夠的所需巨頁HugePage內存。

每端口mempool模型支持可以通過全局配置值啓用,per-port-memory。設置此值爲true將爲OVS中的所有DPDK設備啓用每端口的內存模型:

$ ovs-vsctl set Open_vSwitch . other_config:per-port-memory=true

重要

此值應在設置dpdk-init=true之前設置。如果在dpdk-init=true之後設置,則必須重新啓動守護程序才能使用每端口內存模型。

計算內存需求

給定內存池mempool的所需內存量可以通過內存池中的mbufs數量乘以mbuf大小獲得。

用戶應注意以下事項:

  • 內存池中的mbufs數量依據不同的內存模型會有不同

  • mbuf大小受到要求的MTU值的影響

重要

由於OVS DPDK中需要對齊和舍入的原因,以字節爲單位的mbuf大小始終大於請求的MTU值大小:

下面是幾個針對共享和每端口內存模型的幾個內存需求計算示例.

共享內存模型計算

在共享內存模型中,請求的mbufs數量受到所要求的MTU大小的直接影響,如下表格所示。

MTU Size Num mbufs
1500 or greater 262144
Less than 1500 16384

重要

如果部署環境沒有足夠的內存來提供262144數量的mbufs,那麼將數量減半直到16384個。

示例 1

MTU = 1500 Bytes
Number of mbufs = 262144
Mbuf size = 3008 Bytes
Memory required = 262144 * 3008 = 788 MB

示例 2

MTU = 1800 Bytes
Number of mbufs = 262144
Mbuf size = 3008 Bytes
Memory required = 262144 * 3008 = 788 MB

注意

假設在示例1和2中使用相同的Socket,兩者將共享相同的mempool內存池。

示例 3

MTU = 6000 Bytes
Number of mbufs = 262144
Mbuf size = 7104 Bytes
Memory required = 262144 * 7104 = 1862 MB

示例 4

MTU = 9000 Bytes
Number of mbufs = 262144
Mbuf size = 10176 Bytes
Memory required = 262144 * 10176 = 2667 MB

每端口內存模型

在每端口內存模型中,所需的mbufs數量更加複雜,需要考慮數據路徑中的多個動態因素,以及設備配置。

端口所需的MBUF數量的粗略估計如下:

   填充設備rxqs所需的數據包數量 +
   可能卡在其它端口txqs上的數據包 +
   PMD線程中的數據包 +
   額外的不常見情況的內存佔用

OVS中用於計算此值的算法如下:

   請求的rxqs數量 * 請求的rxq大小 +
   請求的txqs數量 * 請求的txq大小 +
   (RTE_MAX_LCORE,請求的rxqs數量)兩者間較小值 * netdev_max_burst +
   MIN_NB_MBUF

where:

  • requested number of rxqs: 設備請求的接收隊列數量.
  • requested rxq size: 接收隊列所需的描述符數量.
  • requested number of txqs: 設備請求的發送隊列數量. 由配置的PMDs數量加1得到。
  • requested txq size: 發送隊列所需的描述符數量.
  • min(RTE_MAX_LCORE, requested number of rxqs): 比較DPDK支持的最大LCORE數量與請求的設備接收隊列數量,取兩者中的較小值
  • NETDEV_MAX_BURST: 一次突發的最大報文量,定義爲 32.
  • MIN_NB_MBUF: 額外的不常見情況的內存佔用,定義爲 16384.

接下來的所有示例都假設以下的條件值:

  • requested_rxq_size = 2048
  • requested_txq_size = 2048
  • RTE_MAX_LCORE = 128
  • netdev_max_burst = 32
  • MIN_NB_MBUF = 16384

示例 1: (1 rxq, 1 PMD, 1500 MTU)

MTU = 1500
Number of mbufs = (1 * 2048) + (2 * 2048) + (1 * 32) + (16384) = 22560
Mbuf size = 3008 Bytes
Memory required = 22560 * 3008 = 67 MB

示例 2: (1 rxq, 2 PMD, 6000 MTU)

MTU = 6000
Number of mbufs = (1 * 2048) + (3 * 2048) + (1 * 32) + (16384) = 24608
Mbuf size = 7104 Bytes
Memory required = 24608 * 7104 = 175 MB

示例 3: (2 rxq, 2 PMD, 9000 MTU)

MTU = 9000
Number of mbufs = (2 * 2048) + (3 * 2048) + (1 * 32) + (16384) = 26656
Mbuf size = 10176 Bytes
Memory required = 26656 * 10176 = 271 MB

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