首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在run中,是否可以强制Linux后台任务在特定的核心上运行?

在run中,是否可以强制Linux后台任务在特定的核心上运行?
EN

Stack Overflow用户
提问于 2022-05-05 09:12:36
回答 1查看 63关注 0票数 0

假设:

  • 应用RT Linux修补程序
  • POSIX RT线程是可用的,可以应用核心亲和力。
  • 使用多核处理器,为了简单起见,它是一个双核,核标记为A和B。
  • 无干扰

在设计为实时的系统中,至少是软实时而不是硬实时。我很好奇,您是否可以将后台linux任务的核心亲缘关系应用于能够“破坏”实时任务的单个内核(核心A ),并让实时任务在另一个核心B上运行。

这样,linux内核就可以在执行实时任务的同时执行其低优先级的任务。

这是一个相当简单的解释,但我很好奇是否可以这样做。当然,还有其他因素可以减少系统中的确定性,比如中断,但假设将那些因素从当前的场景中删除。

欢迎对此问题的任何材料或更正提供指导。

EN

回答 1

Stack Overflow用户

发布于 2022-05-05 11:19:32

CPUSETS

在Linux中隔离内核的一种非常简单的方法是使用CPUSETS。有关更多信息,请参阅那里的优秀文档。

下面的示例脚本假设cpu由四个cpu核心组成。它将对所有可用的任务使用核心0-2,并为特定附加到该核心的任务保留核心3。

这是通过创建两个cpusets "rt0“和"system”来完成的。全局负载平衡会被禁用,并且只能在“系统”集上重新启用,这使得负载均衡器无法访问剩余的核心。要将任务附加到保留核心,必须将其pid写入相应的任务文件。

代码语言:javascript
运行
复制
$ mkdir /dev/cpuset
$ mount -t cgroup -o cpuset cpuset /dev/cpuset
$ cd /dev/cpuset

$ /bin/echo 1 > cpuset.cpu_exclusive
$ /bin/echo 0 > cpuset.sched_load_balance

$ mkdir rt0
$ /bin/echo 3 > rt0/cpuset.cpus
$ /bin/echo 0 > rt0/cpuset.mems
$ /bin/echo 1 > rt0/cpuset.cpu_exclusive
$ /bin/echo 0 > rt0/cpuset.sched_load_balance
$ /bin/echo $RT_PROC_PID > rt0/tasks

$ mkdir system
$ /bin/echo 0-2 > system/cpuset.cpus
$ /bin/echo 0 > system/cpuset.mems
$ /bin/echo 1 > system/cpuset.cpu_exclusive
$ /bin/echo 1 > system/cpuset.sched_load_balance
$ for pid in $(cat tasks); do /bin/echo $pid > system/tasks; done

系统切片

处理资源分区的一种新方法是系统-切片。据我所知,它只适用于控制组v2和明显的系统。因为我从来没有真正使用过它,所以我不能在这里提供更多的信息,但我认为这是值得一提的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72124705

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档