当前位置: 首页 > news >正文

网站 维护武昌网站建设

网站 维护,武昌网站建设,网络建设原则,seo公司排名教程本文主要讨论在高实时要求、高效能计算、DPDK等领域#xff0c;Linux如何让某一个线程排他性独占CPU#xff1b;独占CPU涉及的线程、中断隔离原理#xff1b;以及如何在排他性独占的状况下#xff0c;甚至让系统的timer tick也不打断独占任务#xff0c;从而实现最低的延迟…本文主要讨论在高实时要求、高效能计算、DPDK等领域Linux如何让某一个线程排他性独占CPU独占CPU涉及的线程、中断隔离原理以及如何在排他性独占的状况下甚至让系统的timer tick也不打断独占任务从而实现最低的延迟抖动。网络阅读本文大约须要20分钟。负载均衡本文目录less工程需求用户态隔离内核态隔离3.1 中断3.2 内核线程最佳实践指南1. 工程需求在一个SMP或者NUMA系统中CPU的数量大于1。在工程中咱们有时候有一种需求就是让某个可以独占CPU这个CPU什么都不作就只作指定的任务从而得到低延迟、高实时的好处。性能好比在DPDK中经过设置线程GRUB_CMDLINE_LINUX_DEFAULT“isolcpus0-3,5,7”隔离CPU0,3,5,7让DPDK的任务在运行的时候其余任务不会和DPDK的任务进行上下文切换从而保证网络性能最佳[1]。在Realtime应用场景中经过isolcpus2隔离CPU2而后把实时应用经过taskset绑定到隔离的核3dtaskset-c 2 pn_dev从而保证低延迟要求[2]。code2. 用户态隔离这个地方咱们能够看出它们统一都使用了isolcpus这样一个启动参数。blog实践是检验真理的惟一标准下面咱们来启动一个8核的ARM64系统运行Ubuntu并指定isolcpus2这个启动参数进程系统启动后咱们运行下面简单的程序(启动8个进程运行while死循环):文档咱们是8核的如今又是运行8个进程因此理论上来说负载均衡后8个进程应该均分地运行在8个核上面可是咱们来看看实际的htop结果咱们发现3(也就是CPU2)上面的CPU占用率是0.0%。这实证了CPU2已经被隔离用户空间的进程不能在它上面跑。固然这个时候咱们能够经过taskset强行把其中的一个a.out绑定到CPU2上面去从上面命令的结果看出663本来的affinity list只有0,1,3-7是没有2的而咱们强行把它设置为了2以后再看htopCPU2上面占用100%经过上面的实验咱们明显能够看出isolcpus2使得CPU2上没法再运行用户空间的进程了(除非手动设置affinity)。3. 内核态隔离中断可是能在CPU2上面运行的不是只有用户态的任务还能够有内核线程、中断等那么isolcpus可否隔离内核线程和中断呢对于中断咱们特别容易查看就是实际去验证每一个IRQ的smp_affinity就行了从上图明显能够看出对于4四、47号这种外设的中断Linux内核把smp_affinity设置为了FB(11111011)明显避开了CPU2因此实际外设中断也不会在CPU2发生除非咱们强行给中断绑核好比让44号中断绑定到CPU2echo 2 /proc/irq/44/smp_affinity_list以后咱们发现44号中断在CPU2能够发生可是系统的timer中断、IPI因为是Linux系统的运行基石实际仍是要在CPU2上面运行的。这里面最可能给任务带来延迟抖动的天然是timer tick。下面咱们重点探讨下tick的问题因为Linux通常状况下已经配置IDLE状态的NO_HZ tickless因此CPU2上面什么都不跑的时候实际timer中断几乎不发生。下面咱们仍是在isolcpus2的状况下运行前面那个8个进程的a.out默认状况下没有任务会占用CPU2。经过前后运行几回cat /proc/interrupts | head 2咱们会看到其余core的timer中断频繁发生而CPU2几乎不变这显然是IDLE时候的NO_HZ在发挥省电的做用可是一旦咱们听任务到CPU2哪怕只是放1个就会发现CPU2上面的timer中断开始增长这说明一点哪怕隔离的CPU上面只有一个线程去跑timer tick就会开始跑固然这个timer tick也会频繁打断这一个线程从而形成大量的上下文切换。你确定会以为Linux怎么这么傻既然只有一我的那也没有时间片分片的必要不须要在2个或者多个任务进行时间片划分地调度为啥还要跑tick其实缘由是咱们的内核默认只是使能了IDLE的NO_HZ咱们来从新编译一个内核使能NO_HZ_FULL当咱们使能了NO_HZ_FULL后Linux支持在CPU上仅有1个任务的时候是能够NO_HZ的。可是有2个就傻眼了因此这个“FULL”也不是真地FULL[3]。这固然也能够理解由于有2个就涉及到时间片调度的问题。何时应该使能NO_HZ_FULL内核文档Documentation/timers/no_hz.rst有明确地“指示”只有在实时和HPC等的场景才须要不然默认的NO_HZ_IDLE是你最好的选择咱们从新编译了内核选中了NO_HZ_FULL下面启动Linux注意启动的时候参数添加nohz_full2让CPU2支持NO_HZ_FULL从新运行CPU2只有一个任务的场景看看它的timer中断发生状况发现CPU2上面的tick稳定在188上面这样相信你会更加开心由于你独占地更加完全了下面咱们再放一个task进去CPU2有2个任务的状况下CPU2上面的timer tick开始增长不过这或许不是个问题由于咱们说好了“独占”1个任务独占的时候timer tick不来打扰应该已是很是理想的状况了内核态线程内核态的线程其实和用户态差很少当它们没有绑定到隔离的CPU的时候是不会跑到隔离CPU运行的。下面用笔者在内核里面添加的dma_map_benchmark来作实验[4]开启16个内核线程来进行DMA map和unmap(注意咱们只有8个核):./dma_map_benchmark -s 120 -t 16咱们看到CPU2上面的CPU占用也是0内核里面的dma_map_benchmark线程在狂占CPU0-1, 3-7可是就是不去占CPU2可是内核线程若是用kthread_bind_mask()相似API把线程绑定到了隔离的CPU则状况就不同了这就相似用taskset把用户态的任务绑定到CPU同样。4. 最佳实践指南对于实时性要求高、高性能计算等场景若是要让某个任务独占CPU最理想的选择是采用isolcpus隔离CPU将指定任务绑定到隔离CPU当心意外地把中断、内核线程绑定到了隔离CPU排查到这些“意外”分子使能NO_HZ_FULL则效果更佳由于连timer tick中断也不打扰你了。
http://www.zqtcl.cn/news/342735/

相关文章:

  • 安徽省城乡和建设厅网站申请免费域名邮箱
  • 溧阳网站建设哪家好wordpress 迁移 空白
  • 网页设计个人网站设计建设营销型网站多少钱
  • 做网站时联系我们制作模板西部数据网站空间
  • 合肥网站建设服务公司wordpress安装字体
  • 建设阅读网站的意义长沙微推广平台
  • 所有搜索引擎蜘蛛不来网站了怎么开发手机页面
  • 网站没域名广告传媒公司取名
  • 代理浏览网站跨境电商平台
  • 触摸终端软件门户网站wordpress标签不解析
  • wordpress企业产品类目怎么设置seo推广是做什么
  • 虚拟机可以做两个网站区块链插件wordpress
  • C2C电商网站重庆市渝快办官网
  • 青岛建设局网站首页青岛互联网企业排名
  • 网站文章怎么做分享qq做网站傻瓜
  • 自媒体专用网站免费产品推广文案100字
  • 阜阳专业网站建设上海南桥网站建设
  • 网站默认图片阳春做网站
  • 怎么自己做网站排名福州朝阳房产网站建设
  • 贵州建网站红动中国免费素材网
  • 公益网站建设婚庆网站开发的意义
  • 徐州网站建设案例南京设计网站
  • 培训网站欣赏网站开发进度管理表
  • 网站开发工程师考试平面设计实例网站
  • ftp更换网站备案密码如何登录添加网站
  • 钢球 东莞网站建设做网站用vue吗
  • 青岛网站建设制作公司制作视频软件哪个免费
  • 用flash做的网站欣赏承德住房和城乡建设局网站关闭了
  • 做网站引流的最佳方法施工企业高级工程师土建答辩
  • 成都优创智汇网站建设旅游网站网页设计代码