Articles of 调度

速率单调分析

我正在开发一个项目,使用速率单调分析来validation一个相当大的程序的multithreading执行。 为了执行分析,我需要每次运行的执行时间以及运行的次数。 最后,将分析数据以找出每个运行线程的平均时间。 有没有解决我收集这些数据的问题? 我已经看过LTTng和英特尔vTune,但有一些问题: 1.)LTTV / eclipse插件计算我需要的平均执行时间吗? 2.)英特尔VTune是否在kvm虚拟机中工作? 开发计算机是一个服务器,当前正在硬件(但与AMD处理器),直接运行RHEL,但最终将迁移到运行在intel Xeon处理器上的虚拟机。该软件还具有运行的c + +和java可执行文件。

当schedule()返回?

在阻塞IO的情况下,比如说驱动程序读取,我们在某些情况下调用wait_event_interruptible()。 条件满足时,阅读将完成。 我看着wait_event_interruptible()函数,它检查条件并调用schedule()。 schedule()将查找下一个可运行的进程,并执行上下文切换,其他进程将运行。 这是否意味着,当进程被唤醒时,当前进程的下一条指令将在schedule()函数中? 如果是的话,如果多进程自动调用进度,那么所有进程在被唤醒后都会有下一条指令被执行一次会在schedule()内? 在ret_from_interrupt的情况下,schedule()被调用。 什么时候会回来? 因为iret在那之后被执行。

在Linux内核实时调度程序中,不了解某些函数的内部结构

我正在查看实时调度程序的/kernel/sched/rt.c中update_curr_rt函数的代码。 有人可以解释它是如何工作的? static void update_curr_rt(struct rq *rq) { struct task_struct *curr = rq->curr; struct sched_rt_entity *rt_se = &curr->rt; struct rt_rq *rt_rq = rt_rq_of_se(rt_se); u64 delta_exec; // Time difference (???) if (curr->sched_class != &rt_sched_class) return; // check if sched class is Real-Time sched class delta_exec = rq->clock_task – curr->se.exec_start; if (unlikely((s64)delta_exec <= 0)) return; // ??? […]

`task_struct`中`on_rq`字段的用途是什么?

我正在阅读Linux Kernel的try_to_wake_up()函数的源代码。 这个函数做了很多,包括: return p->on_rq == TASK_ON_RQ_QUEUED 。 那么, task_struct中on_rq字段的实际用途是什么? 顺便说一下,是否存在一些手册或阅读材料介绍task_struct所有领域? 我认为对这些领域的充分理解将有助于澄清Linux进程调度的机制。

可以sbrk(2)或mmap(2)块吗?

正如标题所说,可以sbrk(2)或mmap(2)块? 像在,他们可以睡觉,还是做任何其他的调度程序?

石蕊rt调度痕迹

我想收集我的RT任务(截止date – 完成)的调度信息。 当我按照https://wiki.litmus-rt.org/litmus/Tracing上的教程,我收到错误:“无法打开feathertrace设备(/ dev / litmus / sched_trace13):没有这样的文件或目录”。 我知道教程指出,sched_trace设备的默认位置可能需要更改,但我似乎无法find正确的位置。 我想我要做的事情应该相当容易,我错过了什么?

Linux调度程序如何知道进程已经运行了定义的时间片?

我无法理解Linux调度程序如何知道进程已运行定义的时间片。 定时器中断在进程执行期间是否继续运行? 让我们来看一个场景,HZ是100,所以每10毫秒会有一个勾号。 现在假设只有进程具有相同的优先级,所以两者应该得到相等的机会,所以如果时间片是4毫秒,两个进程都会运行那么长时间。 我的疑问是调度程序会知道进程已经消耗了它的4毫秒吗?

如何在linux上调度tasklet?

linux有调度tasklets的队列。当cpu从中断或系统调用返回时,它检查调度的tasklet,并执行它们。 如果有太多的tasklet需要处理会怎么样呢?

sched_getcpu()在Linux上可靠吗?

我试图debuggingLinux上的pthreads的一些性能问题,我认为sched_getcpu()可能是骗我。 它会为每个线程报告一个固定的CPU,而分析实验似乎表明这些线程实际上正在从一个核心迁移到另一个核心。 我不知道是否sched_cpu()只报告线程开始运行的第一个CPU,并且不知道线程迁移? 有没有其他人注意到这一点,或看到任何证据sched_getcpu()的返回值可能会改变? 如果它不可靠,有没有其他方法来跟踪当前的CPU(使用CPUID也许?)?

Ubuntu中的dynamic进程调度

我想修改dynamic改变进程优先级的linux内核代码。 我有Ubuntu 10.10和我下载的Linux 2.6.37。 我发现在2.6.37版本中没有dynamic改变进程优先级的概念。 [在CentOS中有一个recalc_task_prio()函数,可以dynamic改变进程的优先级]。 我想知道是否有人知道任何其他的Ubuntu内核版本支持dynamic改变进程优先级的function(基于惩罚进程优先级,如果任务是CPU绑定和消耗大量的CPU)? 我主要是指这个链接 – http://www.ibm.com/developerworks/linux/library/l-scheduler/ 提前致谢,