如何在 FreeBSD 中停止所有内核并在所有内核上运行我的代码 (在内核空间中)



在 FreeBSD 内核中, 如何先停止所有内核, 然后在所有内核上运行我的代码 (可以是内核模块) ?此外,完成后,我可以让他们恢复上下文并继续执行。

Linux 有这样的 API,我相信 FreeBSD 也有一组 API 来做到这一点。


编辑:

很可能我没有澄清我想做什么。首先,机器x86_64 SMP。我设置了一个计时器,当时间结束时;停止所有内核上的所有线程(包括内核线程);保存上下文;在一个内核上运行我的代码来做一些内核工作;完成后,恢复上下文并让它们继续运行;周期性地。其他内核线程和进程不受影响(不更改其相对优先级)。

我假设您的"代码"(内核模块)实际上已经固有地利用了 SMP。

因此,您可以做的一种方法是:

  • 设置所有进程/线程与所需 CPU 的关联 ( sched_setaffinity
  • 将每个线程设置为使用实时 (RT) 调度。

如果是内核模块,您可以在模块中手动执行此操作(我相信),方法是将task_struct的调度策略更改为SCHED_RR(或SCHED_FIFO),将每个进程固定到核心。

在用户空间中, 您可以使用 FreeBSD rtprio 命令 (http://www.freebsd.org/cgi/man.cgi?query=rtprio&sektion=1):

rtprio, idprio -- execute, examine or modify a utility's or process's realtime or idletime scheduling priority

效果将是:您的代码将首先在系统中的任何其他非必要进程之前运行,直到您的代码完成。

相关内容

  • 没有找到相关文章

最新更新