Articles of 调度程序

在自己的内核模块中,在磁盘睡眠时SIGSTOP任务

我目前正在开发一个使用定制核心格式的崩溃收集机制。 本质上,它挂钩了linux_binfmt-> core_dump条目,指向我们的自卸车。 在允许内核完全终止进程之前,翻料机本身通过进程的PID启动一个用户模式助手来获取哪个转储过程信息通过ptrace: call_usermodehelper(argv[0], argv, envp, UMH_WAIT_PROC); 我的问题是,这个任务在技术上处于磁盘睡眠状态,并没有停止,所以ptrace调用失败。 我试图SEND_SIG_FORCED一个SIGSTOP无济于事: send_sig_info(SIGSTOP, SEND_SIG_FORCED, current); 任何有关如何仍然阻止进程终止,但将其置于停止状态以获得ptrace usermode收集器工作的build议将不胜感激。

Linux调度程序中的上下文切换的基准

我有一个任务是为C语言中的linux调度器devise一个基准testing,更准确地说,是“确定底层架构如何处理上下文切换,而不考虑实现的细节”。 根据我在linux杂志上发现的一篇文章,我devise了一个基准testing,它测量产生一个进程(fork / exec)和创build线程(fork)所花费的时间。 现在我想用sched_yield指令来testing切换进程和线程所花费的时间。 我想创build多个线程/进程,让他们都调用sched_yield。 调用sched_yield的第一个线程/进程将测量时间并将其除以进程的数量(我假定所有其他进程在第一个进程恢复执行之前调用sched_yield)来获取每个上下文切换的时间的aproximation。 这个基准是否有意义? 研究不同线程数的上下文切换时间,还是理论上是不变的? 有没有更好的方法来devise基准?

LinSched 2.6.35没有有效的结帐链接

可能重复: LinSched 2.6.35内核的源码 我一直在寻找LinSched 2.6.35一段时间,但networking上的所有链接都不起作用。 任何拥有LinSched 2.6.35源代码的LinSched 2.6.35 ,请给我一个这样的副本? 谢谢!

Crontab设置 – 每55分钟执行脚本

在创build我的crontab设置期间,我发现了一件有趣的事情。 我用这个命令: crontab -e 并填写这一行: */55 * * * * export DISPLAY=:0 && /home/user/Documents/script.sh $2>/dev/null 我的想法是创build调度程序,每55分钟启动一次script.sh 。 但是这个脚本是在这个时候执行的(例如): 08:55, 09:00, 09:05, 09:55, 10:00, 10:05, … 我不知道为什么。 有人能解释我吗?

Linux CFS调度程序如何防止处理器挨饿导致任务执行很小的vruntime?

所以在任务完成后,它会被重新插入到红黑树中。 如果任务之前已经睡了很长时间,导致与runqueue中的其他任务相比vruntime很小,那么它将作为红黑树中最左边的节点重复插入,对吧? 因此,它总是会被挑选作为下一个运行的任务? 我已经检查了core.c和fair.c中的源代码,我没有看到这个任务应该让步到其他任务的地方。 虽然在函数pick_next_entity()中,我确实看到了一些任务,例如cfs_rq-> next,cfs_rq-> last等等,这可能会有更高的运行优先级,我不认为这是防止任务很小的正确位置vruntime从一个处理器花了很长时间,对吧? 有人有线索吗? 谢谢,

什么是hrtick_clear(rq); 在Linux调度?

在__scheduler()函数里面经历linux内核代码时,我看到了hrtick_clear(rq)。 任何人都可以解释这是什么,为什么它被使用? 这似乎与计时器有关,但无法进一步处理。

Linux内核:schedule()函数

我在论坛上看到了几个关于这个schedule()函数的问题,但是我的问题有点不一样。 我已经看到了几个关于理论,algorithm和实现方面的讨论和文献。 执行方面是不清楚和问题的东西。 当然,深入研究内核的来源,并做所有必要的debugging,追踪bla bla …可能会回答这个问题,但重新发明轮盘似乎并不明智。 问题/困惑如下: 内核级别的multithreading用户程序遍历的path是什么? 谁安排线程? 哪个中断上下文? 任何名字? (如果我们在内核层面看到一点痕迹,就没有什么叫做“ sched ”,但是有swappers,inits,ksoft * bla bla)Deos it go是这样的: 一个进程(用户程序)的子线程全部被内核取走,然后内核将它们作为可执行线程(通过将它们与schedule()和/或其他函数合并在一起,也就是说,这个新的可执行线程有一些来自内核可能来自schedule()/ others,与用户任务指令一起embedded,如果情况发生,就会自动进行调度) 要么 schedule()总是在某个协处理器上执行,以便在必要时从该协处理器观察和行动? 这就是为什么,有时当我们看到任何两个线程切换到一个CPU时,只有交换器执行中间和之前和之后,也就是说,在那个级别没有什么叫调度器,对吧? 感谢阅读和抱歉写下我的困惑与分享。

Ulatencyd – 为编译过程创buildcgroup的编写规则(gcc,make ..)

我正在尝试使用Ulatencyd为所有从make生成的进程创buildcgroup,并在一个cgroup中包含整个编译过程。 我试图添加以下simple.d / make.conf make user.poison.group reason =内存inheritance= 1 但是这个简单的规则不适用于我,运行make时,“ulatency”命令在cgroup中显示没有改变。 唯一的事情就是它像这样传播线条: **(ulatencyd:12056):DEBUG:父母失踪:17845,强制更新 除了像这里描述的那样创build自己的,复杂的luafilter之外,还有其他方法可以做到吗? 我手动和自动编译相当多的源代码(Gentoo Linux),这应该可以帮助我保持系统稳定,即使同时运行多个并行编译。 任何技术诀窍将深表感谢。

什么时候是preempt_count()&PREEMPT_ACTIVE == 0?

我正在看Linux中的调度器代码: if (prev->state && !(preempt_count() & PREEMPT_ACTIVE)) { if (unlikely(signal_pending_state(prev->state, prev))) { prev->state = TASK_RUNNING; } else { deactivate_task(rq, prev, DEQUEUE_SLEEP); prev->on_rq = 0; 据我所知,如果prev任务是不可中断的,这段代码将停用任务(并从runqueue中删除) preempt_count() & PREEMPT_ACTIVE == 0 有人可以向我解释什么是在thread_info preempt_count什么时候这个条件满足或不?

linux内核进程调度器的FCFSalgorithm

在linux kenel进程调度器中,有一个优先级types为SCHED_FIFO。 我想更改调度策略。 我有两个问题: 1-在内核源代码中,它提到在一个tick后,cpu应该属于被中断的进程(因为在FIFO中进程应该保持到它完成)? 2-在SCHED_RR中,被中断的进程再次插入到等待队列的末尾? 我使用2.6.31内核 谢谢。