DPDK Sample Applications User Guides(40)互联网协议(IP)Pipeline应用

官方文档查看地址:
http://doc.dpdk.org/guides/sample_app_ug/ip_pipeline.html
PDF下载地址:
https://www.intel.com/content/www/us/en/embedded/technology/packet-processing/dpdk/dpdk-sample-applications-user-guide.html?eu-cookie-notice

本篇难度系数:
翻译:☆☆☆☆☆
理解:★★☆☆☆

40.1.应用程序概述
因特网协议(IP)管道应用旨在成为在多核cpu上快速开发包处理应用程序的载体。
遵循OpenFlow和P4设计原则,可以使用该应用程序以模块化的方式从输入/输出端口、表和操作创建名为管道的功能块。多个管道可以通过包队列相互连接,从而创建完整的应用程序(超级管道)。
管道映射到应用程序线程,每个管道由一个线程执行,每个线程能够运行一个或多个管道。从端口、表和操作创建管道、将多个管道连接在一起并将管道映射到执行线程的可能性是无穷无尽的,因此这个应用程序可以看作是一个真正的应用程序生成器。
管道通过命令行接口(CLI)创建和管理:
任何标准TCP客户机(例如telnet、netcat、自定义脚本等)通常都能够连接到应用程序,通过网络发送命令,并等待响应,然后再执行下一个命令。
所有的应用对象都是通过CLI命令创建和管理的:
用于创建管道端口的“基本”对象:内存池、链接(即网络接口)、SW队列、流量管理器等。
操作概要:用于定义管道输入/输出端口和表要执行的操作。
管道组件:输入/输出端口、表、管道、管道到执行线程的映射。

40.2.运行应用程序
应用程序启动命令行为:

ip_pipeline [EAL_ARGS] -- [-s SCRIPT_FILE] [-h HOST] [-p PORT]

应用程序启动参数是:

  • -s SCRIPT_FILE
    可选:是的
    默认值:不存在
    参数:应用程序启动时运行的CLI脚本文件的路径。如果不存在此参数,则不会在启动时运行CLI脚本文件。
  • -h Host
    可选:是的
    默认值:0.0.0.0
    参数:运行IP管道应用程序的主机的IP地址,用于基于远程TCP的客户机(telnet、netcat等)连接。
  • -p Port
    可选:是的
    默认值:8086
    参数:正在运行ip管道的TCP端口号。远程TCP客户机(如telnet、netcat等)应该使用这个端口号连接到主机应用程序。

有关运行应用程序和环境抽象层(EAL)选项的一般信息,请参阅DPDK入门指南(DPDK Getting Started Guide)。
下面是一个示例命令,用于运行为第2层转发配置的ip管道应用程序:

$ ./build/ip_pipeline -c 0x3 -- -s examples/route_ecmp.cli

应用程序应成功启动并显示如下:

EAL: Detected 40 lcore(s)
EAL: Detected 2 NUMA nodes
EAL: Multi-process socket /var/run/.rte_unix
EAL: Probing VFIO support...
EAL: PCI device 0000:02:00.0 on NUMA socket 0
EAL:   probe driver: 8086:10fb net_ixgbe
...

运行远程客户端(例如telnet)与ip管道应用程序通信:

$ telnet 127.0.0.1 8086

当运行上述telnet客户端时,会显示命令提示符:

Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.

Welcome to IP Pipeline!

pipeline>

一旦应用程序和telnet客户机开始运行,消息就可以从客户机发送到应用程序。在任何阶段,都可以使用quit命令终止telnet客户机。

40.3.应用程序阶段
40.3.1初始化
在此阶段,初始化EAL层并解析特定于应用程序的参数。此外,应用程序对象的数据结构(即链表)也被初始化。在任何初始化错误的情况下,将显示一条错误消息并终止应用程序。
40.3.2运行时
主线程根据CLI输入创建和管理所有应用程序对象。
每个数据平面线程运行一个或多个以前按循环顺序分配给它的管道。每个数据平面线程在分时模式下执行两项任务:
1.包处理任务:处理从管道输入端口读取的输入包的突发事件。
2.消息处理任务:数据平面线程周期性地暂停包处理任务,并轮询主线程发送的请求消息。例如:从当前数据平面线程中添加/删除管道,从当前数据平面线程拥有的特定管道的给定表中添加/删除规则,读取统计信息等。

40.4.例子

Name Table(s) Actions Messages
L2fwd Stub Forward Mempool create Link create Pipeline create Pipeline port in/out Pipeline table Pipeline port in table Pipeline enable Pipeline table rule add
Flow classification Exact match Key = byte array (16 bytes) Offset = 278 Table size = 64K Forward 1.Mempool create 2.Link create 3.Pipeline create 4.Pipeline port in/out 5.Pipeline table 6.Pipeline port in table 7.Pipeline enable 8.Pipeline table rule add default 9.Pipeline table rule add
KNI Stub Forward Mempool create Link create Pipeline create Pipeline port in/out Pipeline table Pipeline port in table Pipeline enable Pipeline table rule add
Firewall ACL Key = n-tuple Offset = 270 Table size = 4K Allow/Drop Mempool create Link create Pipeline create Pipeline port in/out Pipeline table Pipeline port in table Pipeline enable Pipeline table rule add default Pipeline table rule add
IP routing LPM (IPv4) Key = IP dest addr Offset = 286 Table size = 4K Forward Mempool Create Link create Pipeline creat Pipeline port in/out Pipeline table Pipeline port in table Pipeline enable Pipeline table rule add default Pipeline table rule add
Equal-cost multi-path routing (ECMP) LPM (IPv4) Key = IP dest addr Offset = 286 Table size = 4K Array Key = Array index Offset = 256 Size = 4K Forward, load balance, encap ether Mempool Create Link create Pipeline create Pipeline port in/out Pipeline table (LPM) Pipeline table (Array) Pipeline port in table (LPM) Pipeline enable Pipeline table rule add default Pipeline table rule add(LPM) Pipeline table rule add(Array)

40.5.Command Line Interface (CLI)
40.5.1. Link
link配置

link 
 dev |port 
 rxq   
 txq   promiscuous on | off
 [rss  ... ]

注意:PCI设备名称必须用Domain:Bus:Device.Function格式。

40.5.2. Mempool
Mempool 创建

mempool  buffer 
pool  cache  cpu 

40.5.3. Software queue
创建软件队列

swq  size  cpu 

40.5.4. Traffic manager(流量管理器TM)
添加流量管理器子端口配置文件

tmgr subport profile
  
    
 

添加流量管理器管道配置文件

tmgr pipe profile
  
    
 
  

创建流量管理器端口

tmgr 
 rate 
 spp 
 pps 
 qsize 
   
 fo  mtu  cpu 

配置流量管理器子端口

tmgr 
 subport 
 profile 

配置流量管理器管道

tmgr 
 subport 
 pipe from  to 
 profile 

40.5.5. Tap
Create tap port

tap 

40.5.6. Kni
创建kni端口

kni 
 link 
 mempool 
 [thread ]

40.5.7. Cryptodev
Create cryptodev port

cryptodev 
 dev 
 queue  

40.5.8操作配置文件
为管道输入端口创建操作概要文件

port in action profile 
 [filter match | mismatch offset  mask  key  port ]
 [balance offset  mask  port  ... ]

为pipeline表创建操作概要文件

table action profile 
 ipv4 | ipv6
 offset 
 fwd
 [balance offset  mask  outoffset ]
 [meter srtcm | trtcm
     tc 
     stats none | pkts | bytes | both]
 [tm spp  pps ]
 [encap ether | vlan | qinq | mpls | pppoe]
 [nat src | dst
     proto udp | tcp]
 [ttl drop | fwd
     stats none | pkts]
 [stats pkts | bytes | both]
 [sym_crypto cryptodev 
     mempool_create  mempool_init ]
 [time]

40.5.9. Pipeline
创建管道

pipeline 
 period 
 offset_port_id 
 cpu 

创建管道输入端口

pipeline  port in
 bsz 
 link  rxq 
 | swq 
 | tmgr 
 | tap  mempool  mtu 
 | kni 
 | source mempool  file  bpp 
 [action ]
 [disabled]

创建管道输出端口

pipeline  port out
 bsz 
 link  txq 
 | swq 
 | tmgr 
 | tap 
 | kni 
 | sink [file  pkts ]

创建管道表

pipeline  table
     match
     acl
         ipv4 | ipv6
         offset 
         size 
     | array
         offset 
         size 
     | hash
         ext | lru
         key 
         mask 
         offset 
         buckets 
         size 
     | lpm
         ipv4 | ipv6
         offset 
         size 
     | stub
 [action ]

将管道输入端口连接到表

pipeline  port in  table 

显示特定管道输入端口、输出端口或表的统计信息

pipeline  port in  stats read [clear]
pipeline  port out  stats read [clear]
pipeline  table  stats read [clear]

为特定管道实例启用给定的输入端口

pipeline  port out  disable

禁用特定管道实例的给定输入端口

pipeline  port out  disable

将特定管道实例的默认规则添加到表中

pipeline  table  rule add
       match
          default
       action
          fwd
             drop
             | port 
             | meta
             | table 

为特定管道实例向表中添加规则

pipeline  table  rule add

match
   acl
      priority 
      ipv4 | ipv6    
          
   | array 
   | hash
      raw 
      | ipv4_5tuple     
      | ipv6_5tuple     
      | ipv4_addr 
      | ipv6_addr 
      | qinq  
   | lpm
      ipv4 | ipv6  

action
   fwd
      drop
      | port 
      | meta
      | table 
   [balance  ... ]
   [meter
      tc0 meter  policer g  y  r 
      [tc1 meter  policer g  y  r 
      tc2 meter  policer g  y  r 
      tc3 meter  policer g  y  r ]]
   [tm subport  pipe ]
   [encap
      ether  
      | vlan     
      | qinq        
      | mpls unicast | multicast
          
         label0 

为特定管道实例向表中添加批量规则

pipeline  table  rule add bulk  

Where:
- file_name = path to file
- File line format = match  action 

删除特定管道实例的表规则

pipeline  table  rule delete
   match 

删除特定管道实例的默认表规则

pipeline  table  rule delete
   match
      default

为特定管道实例向表中添加仪表配置文件

pipeline  table  meter profile 
 add srtcm cir  cbs  ebs 
 | trtcm cir  pir  cbs  pbs 

从表中删除特定管道实例的仪表配置文件

pipeline  table 
 meter profile  delete

为特定管道实例的表或流量管理器操作更新dscp表

pipeline  table  dscp 

Where:
   - file_name = path to file
   - exactly 64 lines
   - File line format =   , with  as: g | y | r

40.5.10管道启用/禁用
为特定的数据平面线程启用给定的管道实例

thread  pipeline  enable

禁用特定数据平面线程的给定管道实例

thread  pipeline  disable

你可能感兴趣的:(Sample,Applications,User,Guides,DPDK,pipeline,特性,ip)