veth网卡的多队列及RPS

news2024/11/23 3:50:28

背景:

3.10内核下容器使用的veth网卡,默认开启的是一个队列,导致在某些单线程多TCP链接的应用场景下,出现某个CPU软中断高的情况。之前处理的方案一直是开启这个veth网卡的RPS,让其在多流场景下可以去分散到其它CPU上,将某个CPU上的软中断降低。

偶然发现veth也支持多队列,那是不是可以直接利用多队列去分流,不需要手动开启RPS了呢?带着这个问题看一下内核的处理流程。如下。

上层协议栈

->__dev_queue_xmit

   - >netdev_pick_tx  – 这里会通过skb_tx_hash获取发送队列的id

   - > dev_hard_start_xmit->xmit_one → netdev_start_xmit →ndo_start_xmit → veth_xmit

在veth_xmit中

→dev_forward_skb

   → netif_rx_internal

       → get_rps_cpu

最终调用get_rps_cpu接口:

 

其中,skb_get_rx_queue可以通过veth的多队列,拿到不同的队列,但是下面的一个流程,是要配合rps去使用的,所以当前3.10.957的内核即使veth使用了多队列,若没有开rps的话,仍然是返回到当前cpu。

附一个stap脚本:

# cat veth_rps.stp 
#!/usr/bin/stap --all-modules
%{
#include <linux/kernel.h>
#include <linux/net.h>
#include <linux/textsearch.h>
#include <net/checksum.h>
#include <linux/dma-mapping.h>
#include <linux/netdev_features.h>
#include <linux/skbuff.h>
#include <uapi/linux/ip.h>
#include <uapi/linux/udp.h>
#include <uapi/linux/tcp.h>
%}

function get_packet_info:string(skb:long)
%{
     int ret=-1;
     unsigned int src_port = 0;
     unsigned int dest_port = 0;
     struct udphdr *udp_header;
     struct tcphdr *tcp_header;
     struct sk_buff *skb= (struct sk_buff *)STAP_ARG_skb;
     struct iphdr *ip_header;
     unsigned int src_ip=0,dest_ip=0;
     if(!skb)
     {
         goto EXIT_F;
     }
     ip_header = (struct iphdr *)skb_network_header(skb);
     if(!ip_header)
     {
       goto EXIT_F;
     }
     src_ip = (unsigned int)ip_header->saddr;
     dest_ip = (unsigned int)ip_header->daddr;
EXIT_F:
     snprintf(STAP_RETVALUE, MAXSTRINGLEN, "%d.%d.%d.%d",(unsigned int)((unsigned char *)&src_ip)[0],(unsigned int)((unsigned char *)&src_ip)[1],(unsigned int)((unsigned char *)&src_ip)[2],(unsigned int)((unsigned char *)&src_ip)[3]);
%}

#probe kernel.trace("set_rps_cpu") {
probe kernel.statement("get_rps_cpu@net/core/dev.c:3651") {
  SrcIp=get_packet_info($skb)
  if(SrcIp==@1)
  {
      printf("=== %s   queid:  %d, cpu:  %d  , rps map:%x ===\n", SrcIp, $skb->queue_mapping, $cpu, $rxqueue->rps_flow_table)
      print_backtrace()
  }

}

可以看见queid是散列的,但是cpu仍然是-1,最终和调用者的cpu保持一致。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/540697.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

DSSM - 双塔经典模型(微软)

《Learning Deep Structured Semantic Models for Web Search using Clickthrough Data》论文由微软发表于 CIKM-2013。DSSM被广泛用于工业界的 召回/粗排 阶段。 模型结构 模型结构一目了然&#xff0c;非常简单&#xff0c;双塔结构&#xff1a;user侧一个塔&#xff0c;ite…

ChatGPT的兴起的时代,国内chatgpt产品大盘点

在人工智能技术的不断发展和应用下&#xff0c;自然语言处理技术成为了研究的热点之一。而其中最受关注的就是“聊天机器人”技术&#xff0c;而GPT&#xff08;Generative Pre-trained Transformer&#xff09;模型则是目前最流行的聊天机器人生成模型之一。 随着 ChatGPT 技…

蓝牙RSSI/BLE AOA/UWB室内定位技术哪个好?

蓝牙AOA定位技术的出现&#xff0c;弥补了蓝牙RSSI值定位精度不高的缺陷。从理论上来说&#xff0c;可以对目前的蓝牙RSSI定位方案进行一定程度的替代。当然了&#xff0c;在高精度定位应用领域中&#xff0c;UWB定位已经在批量的成熟商用了。蓝牙AOA也具有很高的定位精度&…

单位网站被黑被下达整改进行行政处罚

最近这几年&#xff0c;由于信息系统安全等级保护法的普及&#xff0c;越来越多公司收到当地公安网监部门打来的电话&#xff0c;说你们公司网站有漏洞&#xff0c;需要限期在2-3内进行漏洞整改和加固&#xff0c;遇到这种情况&#xff0c;不要着急&#xff0c;下面来分享一下该…

JavaEE(系列8) -- 多线程案例(单例模式)

目录 1. 设计模式 2. 单例模式 -- 饿汉模式 3. 单例模式 -- 懒汉模式 4. 单例模式(懒汉模式-多线程) 1. 设计模式 什么是设计模式? 设计模式好比象棋中的 "棋谱". 红方当头炮, 黑方马来跳. 针对红方的一些走法, 黑方应招的时候有一些固定的套路. 按照套路…

【融合感知】激光雷达和相机融合感知-BEVFusion

BEVFusion有两篇文章&#xff0c;这里在一起分析下不同&#xff0c;分别是&#xff1a; 【1】BEVFusion: A Simple and Robust LiDAR-Camera Fusion Framework. 【2】BEVFusion: Multi-Task Multi-Sensor Fusion with Unified Bird’s-Eye View Representation 先说结论&…

品牌联名又出圈了!小红书数据揭示,引爆流量三部曲

这几天&#xff0c;你们的朋友圈是不是被喜茶FENDI黄刷屏啦&#xff1f;近日&#xff0c;茶饮品牌牵手意大利奢侈品牌联名上新&#xff0c;一跃成为各平台热门。 品牌新联名&#xff0c;这次又出圈了&#xff01; 喜茶可谓是联名界的老玩家了&#xff0c;曾与藤原浩、《梦华录》…

HTML5新增标签

前言 HTML5的新特性主要是针对以前的不足&#xff0c;增加了一些新标签&#xff0c;新表单和新表单属性 但是呢&#xff01;这些标签大多都存在兼容性的问题&#xff0c;基本是IE9以上的版本才支持 之前我们做布局&#xff0c;都用的是div&#xff0c;但是没有语义性 HTM…

Java开发的多商户商城系统源码小程序app

Java开发的多商户商城系统源码小程序app主要是为商家提供一个线上销售平台&#xff0c;实现商品展示、订单管理、支付等功能&#xff0c;并且支持多商户注册&#xff0c;以下是它的功能介绍&#xff1a; 一、 用户端&#xff1a;1. 用户注册与登录&#xff1a;用户可以使用手机…

关于LimeReport导出报告在Qt下的使用问题

关于这个第三方库的使用网上有很多资料了 具体说一下关于文本和图片控件的使用 1、文本使用 如果需要自定义文本内容&#xff0c;需要的格式为上图$V{}; 2、图片使用 如果需要自定义图片内容&#xff0c;需要的格式为上图$V{}&#xff0c;写法和文本内容一样&#xff1b; 3、…

博士毕业答辩流程 注意事项

前言&#xff1a;2023年5月17日14:00-17:00&#xff0c;与实验室其他同学一起旁听了本实验室的博士论文答辩。接下来&#xff0c;我对博士毕业答辩的大致流程进行简要介绍&#xff0c;并对个环节的注意事项进行总结归纳&#xff0c;供毕业生参考。 目录 1. 准备阶段2. 汇报期间…

Python 框架学习 Django篇 (一) 安装及基本使用

环境说明 python 3.11.3 Django 4.2.1 idea 2023.1 一、安装调试 我这里默认idea和python环境都是装好的&#xff0c;直接从建项目开始 新建项目 项目名称: demo 安装Django //配置清华镜像源 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simp…

AMBER分子动力学模拟之结果分析(突变型的能量计算,丙氨酸扫描)-- HIV蛋白酶-抑制剂复合物(5)

AMBER分子动力学模拟之结果分析(突变型的能量计算,丙氨酸扫描)-- HIV蛋白酶-抑制剂复合物(5) 丙氨酸扫描 在带电残基上引入一个或几个丙氨酸&#xff0c;观察这些改变对蛋白功能的影响。置换成丙氨酸&#xff0c;去除了侧链上的活性基团&#xff0c;换成了体积小、无其他官能…

【AGC】新版鸿蒙崩溃SDK集成使用方法

【背景】 我们知道AGC的Crash SDK都是需要强制集成华为分析SDK的&#xff0c;在使用时的崩溃数据上报都要依靠分析服务来完成&#xff0c;这就容易受到限制&#xff0c;有时出现无数据的情况就要依次排查崩溃SDK与分析SDK&#xff0c;比较麻烦。而就在不久前&#xff0c;鸿蒙崩…

【Linux】内存映射

目录 内存映射相关函数解析代码示例1&#xff08;使用内存映射实现没有关系的进程间的通信&#xff09;&#xff1a;代码示例2&#xff08;使用内存映射实现文件间拷贝&#xff09;&#xff1a;匿名内存映射 橙色 内存映射 内存映射(Memory-mapped I/o)是将磁盘文件的数据映射…

GitLabRunner安装部署

实战&#xff1a;GitLabRunner安装部署-2023.4.26(安装成功) 目录 实验环境 gitlab/gitlab-ce:15.0.3-ce.0 gitlab-runner-15.0.1-1.x86_64.rpm实验软件 链接&#xff1a;https://pan.baidu.com/s/10aL_kWzDKnZXBXG3-hS2tA 提取码&#xff1a;0820 2023.4.26-实战&#xff1a…

HTTP第16讲——HTTP的重定向和跳转

背景 “超文本”里含有“超链接”&#xff0c;可以从一个“超文本”跳跃到另一个“超文本”&#xff0c;对线性结构的传统文档是一个根本性的变革。 能够使用“超链接”在网络上任意地跳转也是万维网的一个关键特性。它把分散在世界各地的文档连接在一起&#xff0c;形成了复杂…

058:cesium设置图片纹理材质

第058个 点击查看专栏目录 本示例的目的是介绍如何在vue+cesium中设置图片材质,相当于在球体上贴图。 直接复制下面的 vue+cesium源代码,操作2分钟即可运行实现效果. 文章目录 示例效果配置方式示例源代码(共85行)相关API参考:专栏目标示例效果 配置方式 1)查看基础设…

如何批量旋转图片方向,包教会方法分享

如何批量旋转图片方向&#xff0c;这个怎么搞呢&#xff1f;小编曾经遇到一个问题&#xff0c;就是我将手机上的照片上传到电脑后发现所有的图片都是倒立的&#xff0c;这让查看变得非常不方便。尽管小编已经尝试过打开每张图片并逐个旋转后再另存为&#xff0c;但这种方式十分…

qiankun + Vite + React + Vue + Angular 快速构建前端微服务

文章目录 一、主应用 vite二、微应用 react三、微应用 vue四、微应用 angular五、项目地址 一、主应用 vite npm npm create vitelatestyarn yarn create vite选择是否继续 Need to install the following packages:create-vite3.2.1 Ok to proceed? (y) y项目名称 Project…