ef_vi soolarflare开发

简介

ef_vi允许应用程序直接访问Solarflare网卡数据路径,以降低延迟并减少每条消息的处理开销。它可以直接用于那些需要最低延迟的发送和接收API,并且不需要POSIX套接字接口的应用程序。

特点

ef_vi的主要特点是:

  • 用户空间:ef_vi可由非特权用户空间应用程序使用。
  • 内核旁路:数据路径操作不需要系统调用。
  • 低CPU开销:数据路径操作占用很少的CPU周期。
  • 低延迟:适用于超低延迟应用。
  • 高数据包速率:每个核心每秒支持数百万个数据包。
  • 零拷贝:对于过滤和转发应用程序特别有效。

image-20220509142249283

ef_vi位于数据链路层,OSI第二层,用来收发以太网数据帧。本质上是网络适配器提供的VNIC(虚拟网络接口控制器)接口的封装。

ef_vi可以用来指定只处理某个端口的数据包,也就是可以与标准linux内核网络栈和其他加速技术同时使用。

用途

加速socket

可用于替代socketsAPI。

例如:在hft系统中处理多播UDP数据报。

应用程序将建立一个ef_vi实例

应用程序给定目标IP地址和端口号。

只有需要加速的数据包才由ef_vi处理。

其他还是内核处理。

应用程序可以创建多个ef_vi实例来处理不同的数据包流,或者在多个线程上分散负载。如果每个传输线程都有自己的ef_vi实例,那么它们可以在无锁和不共享状态的情况下并发传输数据包。这大大提高了效率。 啥意思?可以多线程处理同一条数据路径?

抓包

Solarflare的SolarCapture软件构建在ef_vi API之上。与传统的捕获API一样,ef_vi可用于捕获到达网络端口或子集的所有数据包,并打时间戳。

其他用途:包重放、作为end-station、网络虚拟化。

概念

每个ef_vi实例,提供了一个网卡的虚拟接口,如下:

image-20220509144144704

一个虚拟接口包括三个组件:Event queue、Transmit descriptor ring、Receive descriptor ring。(这是软件资源)

一个虚拟接口(就是一个ef_vi实例)的硬件资源:

两个寄存器,用来通知TX、RX 缓冲区可用。?

一些定时器?

一个共享的中断。

event queue

用来网卡和应用程序之间传递消息。比如通知应用程序有数据包到达的事件。

transmit descriptor ring

将数据包从应用程序传递到网卡。环中的每个条目都是一个描述符,它引用包含数据包的缓冲区。每个数据包由一个或多个描述符描述。
数据包的传输在后台进行,适配器在数据包传输完成后通过事件队列通知应用程序。

Receive descriptor ring

将数据包从适配器传递到应用程序。应用程序必须预先分配缓冲区并将其发送到接收描述符环。环中的每个条目都是一个描述符,它引用适配器可以将数据包放入的“空闲”缓冲区。
当适配器向ef_vi实例发送数据包时,它会将数据包复制到下一个可用的接收缓冲区,并通过事件队列通知应用程序。

大数据包可以分散在多个接收缓冲区上。

Protection Domain

  • 每个虚拟接口都与一个保护域相关联。
  • 每个内存区域都注册了一个或多个保护域。这样可用共享资源,做零拷贝转发。

Memory Region

发送或接收缓冲区的内存区域要使用ef_memreg接口注册。

这确保了内存区域符合ef_vi的要求:

  • 内存被固定,因此无法交换到磁盘。
  • 内存映射为DMA,以便网络适配器可以访问它。适配器将应用程序提供的DMA地址转换为PCIe总线上使用的I/O地址。
  • 内存区域与页面对齐,以提高性能。
  • 内存区域的大小是数据包缓冲区大小的倍数,因此不会浪费内存。

Packet Buffer

就是收发数据包的buffer,通常大小2kb,只有同一保护域中的虚拟接口才能访问。是memory region么。

大数据包可能分散在多个packet buffer上。

Packet Buffer Descriptor

每个包缓冲区用一个descriptor引用,包含了:

  • 一个指针,指向实际的buffer内存区
  • 一个偏移量,谁的偏移量?
  • 一个长度

rings上存放的就是这些描述符。

Programmed I/O

?没看懂

Fliter

选择哪些数据包被传递到虚拟接口。其他的走内核。

根据数据包的特征过滤。比如以太网MAC地址、VLAN标记、IP地址和端口号。

问题

ef_vi用到的硬件资源怎么理解。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×