c – 如何为流程的“经理”和“工人”线程划分优先级(或设置调度策略)?
|
我正在运行一个进程(在基于Linux 3.x的操作系统上),其中: >一些线程是’管理器’线程(为简单起见,假设他们决定哪些工作线程应该做什么,但不做任何I / O,并且他们需要的CPU时间总共短于/短于工人线程’) 可能存在超额预订(即,使用HT的英特尔处理器上的工作线程数超过核心的两倍).现在,我看到的是’经理’线程没有足够频繁地获得处理器时间.他们并非完全’挨饿’,我只是想给他们一个提升.所以,我自然而然地想到设置不同的线程优先级(我在Linux上) – 但后来我注意到线程调度程序的不同选择及其效果.此时我感到困惑,或者更确切地说 – 我不清楚: >我应该为经理选择哪种调度策略,为工人选择哪种调度策略? 笔记: >我故意不再谈论语言或线程池机制.我想在更一般的环境中提出这个问题. 理论 将“管理器”线程调度程序更改为RT(提供SCHED_DEADLINE / SCHED_FIFO策略的实时调度程序)有明显的解决方案.在这种情况下,“管理器”线程将始终具有比系统中大多数线程更大的优先级,因此它们几乎总是在需要时获得CPU. 但是,还有另一种解决方案可以让您继续使用CFS调度程序.您对“工人”线程的目的描述与批处理调度类似(在古代,当计算机很大时,用户必须将他的工作放到队列中并等待数小时才能完成). Linux CFS通过SCHED_BNCH策略和对话作业通过SCHED_NORMAL策略支持批处理作业. 内核代码(kernel/sched/fair.c)中也有用的注释:
因此,当“管理器”线程或其他事件唤醒“工作者”时,后者只有在系统中有空闲CPU或“管理器”耗尽其时间片(调整它改变任务的权重)时才会获得CPU. 如果不更改调度程序策略,似乎无法解决您的问题.如果“工人”线程很忙并且“经理”很少醒来,他们会得到相同的vruntime奖金,所以“工人”总是会抢占“经理”线程(但你可能会增加他们的体重,所以他们会更快地耗尽他们的奖金). 实验 我有一台带有2个Intel Xeon E5-2420 CPU的服务器,它为我们提供了24个硬件线程.为了模拟两个线程池,我使用了自己的TSLoad工作负载生成器(并在运行实验时修复了几个错误:)). 有两个线程池:具有4个线程的tp_manager和具有30个线程的tp_worker,两者都运行busy_wait工作负载(仅用于(i = 0; i 3.12(带调试配置的vanilla) 3.2(股票Debian) 一些说明: >所有时间都以毫秒为单位 (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- VMware 安装VMware Tools显示灰色正确解决办法
- 如何在linux mint下的zsh中设置virtualenvwrappe
- linux – SSH连接错误:ssh_exchange_identifica
- linux – 使用qsub运行shellscript的’意外的文件
- linux – 什么原因和如何避免[FIN,ACK],[RST]和[
- 限制linux中的传入和传出带宽和延迟
- embedded-linux – 如何在bitbake的配方中将文件
- linux – 在Shell Scripting中声明用户定义的变量
- linux – Grep:使用排除特定文件夹
- java – 创建多个HSQLDB服务器数据库的最简单方法
