最近的升级netback, 在测试过程中,查找vm全双工压力,rx的pps波动很厉害,见rx kthread尽管cpu affinity它是0-7 (dom0 8vcpu), 但往往,她去了物理破坏cpu在。

rx kthread的cpu绑定到其它cpu上,rx pps上去了,而且稳定了,显然rx 的pps波动就是由于cpu scheduling,被调度到不同的cpu导致。

有个疑问,为什么cpu scheduling的时候,会把rx kthread调度到si%最高的cpu上呢,load balance的机制没有发挥作用嘛?

先来看下代码。rx kthread的实现是一个wait_event, 等包从网卡上收过来调用vif 的start_xmit。触发wake_up。

也就是说包从网卡上来,并在那个cpu上触发软中断,然后wake_up 我们这个rx kthread起来干活。

那么是说rx kthread 跟wake_up的那个cpu有关?

xiantao大牛,发我看了下他们非常早就发现的一个kvm上vm thread调度的问题,https://lkml.org/lkml/2010/4/11/108。 本质上应该是同一个问题。

简单跟踪了下代码,try_to_wake_up的时候会调用sched_fair.c的select_task_rq_fair来挑选一个cpu,作为woken task的执行cpu。假设sched_feature.h里面定义了

AFFINE_WAKEUPS 那么want_affine=1,之后就出现一个affine_sd, 表示有亲缘性的scheduling_domain, 然后调用wake_affine,里面会对上一次执行的cpu和当前wake_up

的cpu。进行一些load相关的比較,来选择是基于prev_cpu还是wake_up cpu来选择一个idle sibling (select_idle_sibling)

在我们的场景下。want_affine=1, wake_affine=1, select_idle_sibling(wake_up cpu)。而且wake_up cpu也是idle。尽管软中断非常高,可是没有其它的线程调度。一直都在idle上下文触发软中断。

上述条件满足下,try_to_wake_up得到的新cpu就是wake_up cpu。 极少情况下, wake_affine=0, 新的cpu就还是prev_cpu,等于没有migration。

做过一个实验,把sched_features.h 里面的AFFINE_WAKEUPS  =0, 那么want_affine =0 。就不会走到上面的逻辑。最后基本上就没有migration,一直在prev_cpu上执行。

没有了之前波动,性能提升。

版权声明:本文博主原创文章,博客,未经同意不得转载。

netback于kthread遇到cpu affinity问题的更多相关文章

  1. CPU affinity 进程和线程的亲缘性

    设置Processor Affinity 作用: 1.进程和线程的亲缘性(affinity),使进程或线程在指定的CPU(核)上运行.(比如程序A,在第4个核心上运行) 2.设置进程 或者 线程, 使 ...

  2. Linux CPU affinity

    在Linux中,我们知道可以通过nice.renice命令改变进程的执行优先级,优先级高的进程优先执行,从而一定程度上保证重要任务的运行. 除了nice.renice外,可以通过CPU  affini ...

  3. cpu affinity (亲和性)

    来源:http://www.ibm.com/developerworks/cn/linux/l-affinity.html#download 管理处理器的亲和性(affinity) 为什么(3 个原因 ...

  4. CPU Affinity

    Reference: [1] http://www.linuxjournal.com/article/6799 Soft vs. Hard CPU Affinity There are two typ ...

  5. android cpu affinity

    暂时无法获取当前线程运行在哪个CPU上,待调查... int omask = 0; int nmask = 0xF0; static void affinity() { int err; int sy ...

  6. linux进程、线程与cpu的亲和性(affinity)

    参考:http://www.cnblogs.com/wenqiang/p/6049978.html 最近的工作中对性能的要求比较高,下面简单做一下总结: 一.什么是cpu亲和性(affinity) C ...

  7. Linux中CPU亲和性(affinity)

    0.准备知识 超线程技术(Hyper-Threading):就是利用特殊的硬件指令,把两个逻辑内核(CPU core)模拟成两个物理芯片, 让单个处理器都能使用线程级并行计算,进而兼容多线程操作系统和 ...

  8. 【操作系统之十二】分支预测、CPU亲和性(affinity)

    一.分支预测 当包含流水线技术的处理器处理分支指令时就会遇到一个问题,根据判定条件的真/假的不同,有可能会产生转跳,而这会打断流水线中指令的处理,因为处理器无法确定该指令的下一条指令,直到分支执行完毕 ...

  9. CPU绑定操作

    使用virsh vcpuinfp命令查看虚拟机VCPU和物理CPU的对应关系 [root@svn ~]# virsh vcpuinfo 16 VCPU: 0 CPU: 3 状态: running CP ...

随机推荐

  1. windows phone (24) Canvas元素A

    原文:windows phone (24) Canvas元素A Canvas元素表示定制一个区域,并可以通过相对坐标定义子元素位置,在一下情况下Canvas是不可见的 Height 属性等于 0. W ...

  2. live555 for Android

    因为Live555 包中未提供Android 的config 所以编译器来比較麻烦,须要自己编写Android.mk ,下面是我通过 改动 现有的config文件,在cygwin实现 编译的过程,co ...

  3. 基础知识(1)- Java程序设计概述

    1.1 Java程序设计平台 1.2 Java“白皮书”的关键术语  1.2.1 简单性  1.2.2 面向对象  1.2.3 网络技能  1.2.4 健壮性  1.2.5 安全性  1.2.6 体系 ...

  4. 【互动问答分享】第15期决胜云计算大数据时代Spark亚太研究院公益大讲堂

    "决胜云计算大数据时代" Spark亚太研究院100期公益大讲堂 [第15期互动问答分享] Q1:AppClient和worker.master之间的关系是什么? AppClien ...

  5. 更具体的描述JNI

    JNI事实上,Java Native Interface缩写,也就是说,java本地接口. 它提供了许多API实现和Java并与其他语言的沟通(主要C&C++). 也许很多人认为Java够劲. ...

  6. Hibernate4.3.9Final常见问题汇总

    hibernate4下一个可用的hibernate.properties: jdbc.driverClassName=com.mysql.jdbc.Driver jdbc.url=jdbc:mysql ...

  7. HDU 4149 Magic Potion

    意甲冠军: a[i] ^ x = f[i] ( i = 1...8 ) 和 ( a[1] + a[2] + ... + a[8] ) ^ x = f[9] 如今f为已知  求x 思路: 从低位到高位确 ...

  8. trie + 长度优先匹配,生成串

    import com.google.common.collect.Maps; import java.util.Map; /** * tree 节点 * Created by shuly on 16- ...

  9. 成都传智职工high翻竞赛场

    日前,由石羊街道总工会.天府新谷园区党委联合主办的“2013年职工趣味竞赛”盛大开幕.传智播客成都java培训中心员工积极参与,活跃在各大项目的比赛中,员工们用笑脸.身影告诉大家:竞赛场上,我们hig ...

  10. Android架构分析之LOG模块

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz Android版本:2.3.7_r1 Linux内核版本:android-goldfish-2.6.29 Andro ...