摘要:RSS和FDIR都在物理网口和网卡多队列之间。 RSS(Receive Side Scaling)通过hash把数据包均匀发送到网卡队列上,在dpdk应用中可实现流量负载均衡到不同转发核上。FDIR(Flow Director)根据流量特征条件把数据包发送到指定网卡队列上,在dpdk应用中可实现转发
阅读全文
摘要:修改tcp options中mss值 src/ipvs/ip_vs_proto_tcp.c 因为tcp头部options中不同kind顺序是随机的,所以需要遍历找到kind值是mss 2和length值是4,再修改后面的mss value。 static void tcp_out_adjust_ms
阅读全文
摘要:src/inetaddr.c定义静态二维数组inet_addr_tab,值是双向链表,用于解决dpip ip哈希冲突。 include/netif.h核数最多是128 src/inetaddr.cinet_addr_init函数初始化空的双向链表 include/list.hINIT_LIST_HE
阅读全文
摘要:dpip addr add 10.11.12.13/24 dev dpdk0 src/inetaddr.cifa_entry_add函数 判断dpdk0上是否已经存在该ip param->addr是10.11.12.13 dpdk0上不存在该ip后,大页内存上分配 添加路由到链表 添加地址到链表 0
阅读全文
摘要:# 加载大页内存 echo 2048 > /sys/devices/system/node/node0/hugepages/hugepages-2048kB/nr_hugepages mount -t hugetlbfs nodev /mnt/huge # 加载vfio驱动 modprobe vfi
阅读全文
摘要:问题现象 问题分析 # 根据core文件来打印堆栈信息 gdb -c lcore-worker-2.core.20196 /root/code/dpvs/bin/dpvs 解决问题 大页内存2G不足导致段错误,分配4G后正常。
阅读全文
摘要:DPDK LPM(Longest Prefix Match)是高性能前缀路由匹配库,用于数据包转发过程中快速查找与dstIP地址最长匹配的路由表项。DPDK LPM查找时只需要提供目的IP,eBPF LPM查找时需要提供目的IP和子网掩码。 LPM实现 高性能:基于前缀树算法实现快速匹配。线程安全:
阅读全文
摘要:例子源码http://dpdk.org/browse/dpdk/tree/examples/skeleton/basicfwd.c main函数主流程 1. 初始化环境抽象层EAL int ret = rte_eal_init(argc, argv); if (ret < 0) rte_exit(E
阅读全文
摘要:dnat模式发送报文 src/ipvs/ip_vs_core.c针对ipv4,INET_HOOK_PRE_ROUTING注册2个函数dp_vs_pre_routing和dp_vs_in,因为nat不做防止DDos攻击的syn_proxy,所以看dp_vs_in。 conn_sched新请求建立连接选
阅读全文
摘要:FULLNAT模式 客户端流量达到LB时,DNAT把数据包的目的IP改为后端服务IP,SNAT从local ip池中选择一个IP作为源IP,重新选源端口,后端服务应答时目的IP是local ip。 LVS性能问题 LVS做四层负载均衡。中断是影响LVS性能最重要的一个因素,假如一秒处理600万个数据
阅读全文
摘要:UMA(Uniform Memory Access)统一内存访问,每个CPU共享相同的内存地址空间。CPU核数很多时对总线带宽压力和访问同一块内存的冲突问题比较明显。 NUMA全称Non-Uniform Memory Access,即非一致性内存访问,可以解决这些问题。内存和CPU从属不同的Node
阅读全文
摘要:# 安装依赖 yum install popt-devel automake gcc -y yum install -y python3-pip yum install numactl-devel -y yum install openssl-devel -y # 安装python 3.7.0和me
阅读全文
摘要:内核处理网络数据包弊端 中断处理处理大量网络数据包时,出现频繁的硬件中断,产生较高的性能开销。 内存拷贝网络数据包从网卡到应用程序流程是,数据从网卡通过DMA传到内核缓冲区,从内核态拷贝到用户态。 上下文切换硬件中断、多线程、锁竞争产生上下文切换开销。 CPU缓存失效数据包处理可能跨多个CPU,例如
阅读全文