标签: scheduling

使用 cgroup 控制应用程序的优先级

我想更好地了解 cgroups,并想了解应用 cgroups 的用例。

cgroups 是对不同应用程序进行优先级排序的好方法(即,给予特定类型的应用程序更高的优先级,如 Web 服务器)?

linux scheduling priority cgroups

8
推荐指数
1
解决办法
6041
查看次数

按系统不活动调度命令

因此,cron或者at可以安排我们的命令在我们需要的确切时间运行,但是我们可以安排命令在系统不活动时运行吗?

就像是:

echo "some_commands" | when 'cpu < 15%' 
Run Code Online (Sandbox Code Playgroud)

command-line scheduling

7
推荐指数
2
解决办法
493
查看次数

您如何确定正在使用哪个进程调度程序?

即它是 O(1) 调度程序、CFS 调度程序还是较旧的调度程序?

linux process scheduling kernel

7
推荐指数
1
解决办法
1万
查看次数

当程序的计时器小于 4ms 时,抢占如何在 Linux 上工作?

大多数 Linux 系统中的 jiffies 默认为 250(4ms)。问题是当程序的 usleep() 小于 4ms 时会发生什么?当然,它在预定时按应有的方式工作。但是当linux调度器取出这个程序等待时会发生什么,因为另一个程序必须运行?在这种情况下,抢占是如何工作的?

我应该避免等待这么小的自定义程序吗?他们不可能是准确的,是吗?

linux scheduling sleep

7
推荐指数
1
解决办法
5743
查看次数

Unix 进程调度程序本身是一个进程吗?

Unix 进程调度程序本身是一个进程,还是像系统调用一样(在用户进程中运行内核代码并设置内核位)那样搭载在其他进程上?

process scheduling

7
推荐指数
1
解决办法
890
查看次数

你能让一个 linux 系统在特定时间停止并启动我的树莓派吗?

如何让系统在不同时间自行关闭和重新开启。例如,我会让我的“服务器”在凌晨 4 点关闭,然后在每天凌晨 5 点重新打开。这可能吗?我正在使用带有最新版本 Raspbian 的 Raspberry-pi。

shutdown boot scheduling raspberry-pi raspbian

7
推荐指数
3
解决办法
2708
查看次数

Linux内核如何在中断处理期间找出要唤醒的进程?

我正在阅读有关章节进程调度的Linux 内核开发一书。在第 61 页的“醒来”部分,第一段内容如下:

唤醒是通过wake_up() 处理的,它唤醒在给定等待队列中等待的所有任务。Q1这是it什么?)调用 try_to_wake_up(),这将任务的(Q2哪个任务?所有唤醒任务?)状态设置为 TASK_RUNNING,调用 enqueue_task() 将任务添加到红黑树,如果被唤醒任务的优先级高于当前任务的优先级,则设置need_resched。导致事件发生的代码通常调用wake_up()本身。例如,当数据从硬盘到达时,VFS 在等待数据的进程所在的等待队列上调用wake_up()。

我对上面的内容很困惑。我就用上一段的例子,即磁盘读取数据后中断,但有更完整的画面。如果以下任何一项错误或不完整,请纠正我:

  1. 一些用户进程发出阻塞读操作,触发系统调用,该进程在内核领域。

  2. 内核设置磁盘控制器以请求所需的数据并使该进程进入睡眠状态(该进程被放入等待队列)。内核调度另一个进程运行。

  3. 发生磁盘中断。CPU 暂停当前正在执行的进程并跳转到磁盘中断处理。

  4. 磁盘控制器将在中断处理过程中的某个时间启动,将从磁盘读取的数据传输到主内存(在 CPU 的指导下或通过 DMA)

  5. (不确定,请更正)正如段落所说,VFS 在等待数据的进程所在的等待队列上调用wake_up()。

我的具体问题如下:

Q1(参考引用的段落):我假设第二句中的It指的是 function wake_up()。为什么该函数会wake_up唤醒所有任务,而不是仅仅唤醒等待此磁盘数据的任务?

Q2(参考引用的段落):try_to_wake_up()不知何故知道需要将状态设置为 TASK_RUNNING 的特定任务?或者try_to_wake_up()将所有唤醒任务的状态设置为 TASK_RUNNING?

Q3:内核有多少等待队列需要管理?如果有2个以上这样的等待队列,内核如何知道选择哪个队列,使得等待磁盘数据的进程在那个等待队列上?

Q4:现在说我们知道等待进程所在的队列。内核如何知道哪个进程正在等待来自磁盘的数据。我只能想象一些特定于请求磁盘数据的进程的信息被传递到磁盘控制器,比如进程的 PID、内存地址或其他东西。然后在完成中断处理后,磁盘控制器(或内核?)使用此信息来确定等待队列中的进程。

请帮我完成这张过程wake_up的图片!谢谢!

scheduling linux-kernel

7
推荐指数
1
解决办法
7479
查看次数

ext4 jbd2 和 I/O 优先级

我想删除一个包含 4000 多个目录中超过 600 万个文件的巨大目录,总共大约 26GB 的数据。我知道这将需要一段时间,我曾经ionice将 I/O 优先级设置为空闲,因此我可以在删除文件的同时继续执行其他任务。

time ionice -c3 rm -vrf /tmp/huge-folder
Run Code Online (Sandbox Code Playgroud)

然而,我的整个桌面环境现在仍然非常缓慢,谷歌浏览器需要很长时间才能打开新标签和加载页面,有时甚至需要一段时间才能打开一个新的 xterm 窗口。总结:我似乎没有得到降低rm进程I/O 优先级的任何好处。

检查情况iotop表明,一些 I/O 时间花费在rm具有idle我想要的I/O 优先级的进程中:

rm 上的 I/O

但是其他时候 I/O 时间花在了 ext4 的日志记录过程和软件突袭过程中:

jbd2 和 raid 上的 I/O

请注意他们如何使用自己的默认 I/O 优先级,这可能是问题的原因。 jbd2甚至以优先级运行,be/3这实际上比be/4我所有其他桌面进程的默认优先级更高。

许多其他问题询问并回答什么jbd2是以及为什么它会消耗 I/O 时间,这不是我想知道的。我的问题是:有没有办法在这种特定场景下真正获得空闲 I/O 调度优先级?显然,应用ionicejbd2是一个疯狂的想法。

更多设置信息:这是在带有 3 个旋转磁盘的软件 raid10 之上的 ext4 文件系统上。ext4 使用默认选项进行格式化和挂载(Debian 默认设置,以防万一)。

scheduling io ext4

7
推荐指数
1
解决办法
1374
查看次数

当我们从机柜(CPU 盒)的连接中移除桌面屏幕时,linux 是否会停止与 GUI 相关的处理?

当运行大型非交互式软件时,如果我需要更多处理能力,那么在移除桌面屏幕后,内核会停止与 GUI(图形用户界面)相关的处理,以便 CPU 可以专注于其他内容。

我假设如果我们没有外部显卡,那么与它相关的处理由 cpu 处理。如果我错了,请纠正我的假设。

如果我错了,如何管理 GUI?CPU 进行什么类型的处理?

scheduling gui linux-kernel intel-graphics cpu-usage

6
推荐指数
1
解决办法
69
查看次数

SCHED_BATCH 描述令人困惑 - 它实际上是做什么的?

Linux 中有多个调度选项,可以借助chrt命令行将其设置为进程。我似乎无法理解其中之一......哪个是SCHED_BATCH。事实上,它的描述在多个来源中都是自相矛盾的。但在此之前,我将总结我设法获得的有关所有计划选项的事实,因为不同的描述引用了SCHED_BATCH它们。

SCHED_FIFO基本上都是SCHED_RR实时调度策略,略有差异,这里大多数没有问题,它们总是先于任何其他进程运行。

SCHED_OTHER是默认策略,根据nice每个进程的值来分配优先级。

SCHED_DEADLINE- 我还没有完全理解这个,它似乎实际上更接近SCHED_FIFO但具有设置的执行计时器,并且如果达到这些计时器,实际上可能会抢占SCHED_FIFO/任务。SCHED_RR

SCHED_IDLE- 基本上“只有在 CPU 空闲时才进行调度”,这里没有问题。

现在,SCHED_BATCH我发现这是很有争议的。一方面,在2002 年的原始实现笔记中,据说它与SCHED_IDLE用户代码和SCHED_OTHER内核代码基本相同(以避免由于进程从未被调度而导致内核资源锁定)。在MAN 文章中,据说它与 基本相同,SCHED_OTHER但有一点小惩罚,因为它被认为是 CPU 限制的。

现在,这两种SCHED_BATCH解释彼此不一致。哪一个是真相?是否SCHED_BATCH在某个地方重新实现了?或者有人SCHED_BATCH在写MAN文章时误解了?哪一种解释是正确的?

更新:额外研究:

我做了更多挖掘,发现了这个内核调度程序文档,还通过挖掘sched 源代码,似乎SCHED_BATCH确实是由与SCHED_OTHER.

我还做了一个测试。我有一个进程实际上限制了其他进程,因为它的负载很高,即使使用很好的 19,但默认SCHED_OTHER设置也是如此。我已将其设置为SCHED_IDLE,其他进程的限制问题消失了...然后我决定尝试SCHED_BATCH相同的进程(具有相同的良好 19 设置)。令人惊讶的是,SCHED_BATCH也没有限制我的其他进程,比如SCHED_IDLE

但从我上面链接的文档看来, …

linux scheduling linux-kernel

6
推荐指数
1
解决办法
1428
查看次数