官网:
https://www.dpdk.org/
PCI 设备
[查看和列出PCI设备。]
lspci
[网卡驱动程序设置特定的参数]
modprobe xxxx
[查看是否正常运行]
ifconfig
内存 设备
64位Linux通常使用48位来表示虚拟地址空间,43位表示物理地址。
#uname -m
,然后按回车。如果输出是x86_64,那么你的系统就是64位的。如果输出是i386或者i686,那么你的系统是32位的。
用户空间和内核空间被划分为两个空间,每个空间最大支持256TB。
可以通过cat /proc/cpuinfo和cat /proc/meminfo来查看处理器和内存的信息。
CPU亲和性
在多核心CPU中,每个CPU都有自己的缓存和寄存器。为了更好地利用这些硬件资源,可以将特定进程绑定到特定的CPU上,这个过程被称为CPU亲和性设置。
可以使用 taskset
命令来实现CPU亲和性设置。
RDMA内核驱动程序
mlx4_ib、mlx5_ib或mana_ib
modprobe uio_pci_generic
modprobe igb_uio
确保IOMMU已禁用或已设置为passthrough模式。
cat /sys/class/iommu_group/iommu_group*/devices/iommu_group*/uevent
如果输出中包含"enabled",则表示IOMMU已启用。
[禁用]
echo "disabled" | sudo tee /sys/bus/platform/drivers/iommu_v2/control
[如果需要将IOMMU设置为passthrough模式,可以使用以下命令:]
echo "passthrough" | sudo tee /sys/bus/platform/drivers/iommu_v2/mode
C malloc 分配内存
#include <stdlib.h>
// 分配一个足够大的缓冲区来存储数据包
char *buffer = (char *)malloc(desired_packet_size);
if (buffer == NULL) {
// 处理内存分配失败的情况
}
mmap 分配内存
#include <sys/mman.h>
#include <fcntl.h>
#include <unistd.h>
// 打开一个文件描述符或设备文件
int fd = open("/path/to/file", O_RDWR);
if (fd == -1) {
// 处理文件打开失败的情况
}
// 映射文件到内存中
void *buffer = mmap(NULL, desired_packet_size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
if (buffer == MAP_FAILED) {
// 处理内存映射失败的情况
}