问题标签 [cfs]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - 在 CFS 算法中调用 task_tick_fair
为什么在系统滴答时调用的函数中有一个for_each_sched_entity
宏?task_tick_fair
据我说,只有当前任务的运行时特性应该被更新。为什么它需要entity_tick
当前流程的整个层次结构?
linux - disabling preemption while executing schedule() function
The scheduler entry in Linux starts with executing schedule()
which then calls the __schedule()
function. It is defined as :
My question is - why is there a need to disable preemption in the scheduler code when no other task could possibly call the schedule()
function and thus preemption should be automatically disabled until the next task is scheduled. Am I missing something basic here?
linux - 使用 signal_pending_state 函数将任务状态更改为 TASK_RUNNING
我正在浏览主要的调度功能:__schedule()
并找到了一个代码片段:
现在,如果一个进程通过将自己保留在等待队列中来自愿抢占自己,为什么进程的状态再次变为TASK_RUNNING
?
c - 在 64 位 ubuntu 上编译 32 位应用程序
我正在尝试构建 NASA cFS 6.5 版,它在运行 Ubuntu 的 64 位 Jetson TX2 上使用 32 位应用程序。
我得到了错误"gcc: error: unrecognized command line option -m32"
。
我尝试安装gcc-multilib
但我得到:
Package gcc-multilib is not available, but is referred to by another package. This may mean that the package is missing, has been obsoleted, or is only available from another source
我尝试使用apt search gcc-multilib
并安装了其他软件包:
gcc-multilib-arm-linux-gnueabi
gcc-multilib-arm-linux-gnueabihf
gcc-multilib-x86-64-linux-gnu
gcc-multilib-x86-64-linux-gnux32
我知道有些我可能不需要安装,但我到处寻找解决方案但找不到任何解决方案。
我尝试取消注释中的所有行,然后sources.list
运行sudo apt-get update
,然后尝试安装,但仍然没有成功。
有什么帮助吗?
编辑:
好的,所以我从包含它的 cmake 文件中删除了 -m32 选项并尝试编译,我得到了一大堆错误,从 typedef erorrs 到 missing ;和其他人,不会列出所有这些,因为它们可能有超过 100 个错误,但我得到的第一个错误是:
/home/deployer/CFS-101.initial/osal/src/os/inc/common_types.h:285:5: error: #error undefined processor
所以我去了 common_types.h 这就是它包含的内容:
我尝试检查我是否有 stdint.h 和 stddef.h ,结果是肯定的,但我不知道为什么HAVE_STDINT没有在任何地方定义。此外,没有检查我的机器aarch64的情况,所以我改变了
至
我尝试编译,它编译了大部分工具,但后来我得到了这个错误:
我猜这个错误正在发生,因为我删除了 elf2cfetbl 工具的 -m32 标志。
有什么帮助吗?
operating-system - 在操作系统调度程序中使用算法的硬件实现
1.在os中,当一个新进程到来时,硬件是否会中断(当另一个进程正在运行时)让os为这个新进程创建一个新的PCB数据结构?
2.考虑完全公平调度(CFS)算法:当一个进程正在运行(有一个cpu核心)时,我们知道它优先考虑到当前时间为止运行时间最短的进程,考虑一个正在运行的进程和量子还没有过期,此时一个进程的状态变为就绪,这是否会产生中断(以便操作系统可以重新调度)?谢谢。
multithreading - 交互式线程和非交互式线程有什么区别?以及不同CPU调度器的性能?
近似于 SRTF 的调度程序,如多级反馈队列设计,将倾向于支持执行短 CPU 突发的交互式程序。Linux 的完全公平调度器有时会这样做,但由于它有不同的调度目标,所以通常不会。在以下哪种情况下,CFS可能导致交互式线程的性能比近似SRTF的类似 MLFQ 的调度程序更差?
- 运行一个具有短 CPU 突发的交互式线程,如果单独运行,将使用非常少的 CPU 时间和一个从不执行 I/O 的非常 CPU 密集型线程
- 运行一个具有短 CPU 突发的交互式线程,如果单独运行,将使用非常少的 CPU 时间,以及一个具有更长 CPU 突发的非交互式线程,频繁执行磁盘 I/O
- 运行一个具有频繁短 CPU 突发的交互式线程,如果单独运行,将使用大部分可用的 CPU 时间,以及一个从不执行 I/O 的 CPU 密集型线程
- 运行一个具有短 CPU 突发的交互式线程和大量从不进行 I/O 的 CPU 密集型线程
The correct answers are 3 and 4.
为什么 3 和 4 是正确的?交互式线程和非交互式线程有什么区别?
linux - 线程之间的切换是否比 Linux 中的进程更有效?
从这个问题我们知道,线程和进程在内核中都被视为相同的调度单元,并且在调度方案上几乎没有区别。但是,我很好奇在线程和进程之间切换的一般成本。
例如,在2个不同进程之间切换时,内核需要更改PTBR(在x86中是CR3寄存器)来切换进程页表,导致TLB被重新刷新。但是在同一进程的不同线程之间切换似乎没有这种额外的成本,因为这些线程应该共享相同的虚拟地址空间。
docker - docker-compose 规范说 cpus 选项已弃用,但 docker run 说使用 --cpus
阅读docker-compose
规范(https://github.com/compose-spec/compose-spec/blob/master/spec.md#cpus)它说该cpus
选项已弃用,所以即使我使用它时它仍然有效,我认为它这不是一个好主意。
中央处理器
已弃用:使用 deploy.reservations.cpus
cpus 定义分配给服务容器的(可能是虚拟的)CPU 的数量。这是一个小数。0.000 表示没有限制。
另一方面,docker run
文档说(https://docs.docker.com/config/containers/resource_constraints/#configure-the-default-cfs-scheduler)该--cpus
选项更方便。
指定与 --cpu-quota 一起使用的 CPU CFS 调度程序周期。默认为 100000 微秒(100 毫秒)。大多数用户不会更改默认设置。对于大多数用例, --cpus 是一种更方便的选择。
所以我很困惑:我应该或不应该cpus
在 docker-compose 中使用吗?如果不这样做,我如何有效地控制服务 cpu 的使用?
我正在使用没有 swarm 的 docker。
语境
linux - 关于 vruntime 和 CFS 的问题
CFS 为下一次运行选择具有最低 vruntime 的调度实体。并且,vruntime 是根据实际运行时间和权重计算的。此外,vruntime 由 min_vruntime 规范化。
但是,假设有两个线程,A,B。
A已经运行了很长时间,所以它的sum_exec_runtime是10000000
B 刚刚启动,其 sum_exec_runtime 为 100000
并且他们都有相同的优先级。
在这种情况下,B 是否保留 CPU 直到 B 的运行时间高于 A?
这听起来像是很久以前启动的线程可能没有任何机会获得 CPU。
在 Linux 中必须有一些方法来防止这种情况发生。
我认为这与vruntime的规范化有关。
但我不认为简单地将 min_vruntime 添加到 vruntime 可以解决问题。你有什么主意吗?
linux - 如何从 /proc/schedstat 获取增量百分比
我正在尝试以百分比限制节点 CFS 调度程序。为此,我从中读取 2 个值 2 次(忽略时间片),/proc/schedstat
格式如下:
所以我从文件中读取,休眠一段时间,再次读取,计算经过的时间和值之间的增量,然后使用以下代码计算百分比:
诀窍是百分比可能是 2000%
我假设 runqtime 是增量的,并以纳秒表示,所以我将其除以 10^7(使其达到 0-100% 范围),timedelta 是以秒为单位的测量值之间的差异。它有什么问题?如何正确地做到这一点?