每个核都会有一个CFS运行队列吗
时间: 2024-04-06 08:30:33 浏览: 21
是的,Linux CFS 会为每个 CPU 核心(或 SMT 线程)创建一个 CFS 运行队列,用于维护当前在该核心上运行的所有调度实体。当进程需要在某个 CPU 核心上运行时,Linux 会将其放入该核心对应的运行队列中,然后根据 CFS 调度算法来进行调度。这样做可以保证各个 CPU 核心上的任务调度相互独立,避免了不同核心之间的竞争和干扰,提高了系统的整体性能。
相关问题
每个核心上的cfs_req 只有一个吗
不完全正确。在 Linux CFS 中,每个 CPU 核心(或 SMT 线程)都会有一个 CFS 运行队列,但是对于多个核心之间共享一个运行队列的情况也是存在的。具体来说,当系统中存在一些可运行的进程或线程个数较少时,Linux CFS 会将它们放置在一个全局运行队列中,所有的核心都会从该队列中获取可运行的进程或线程来执行。这种情况下每个核心上的 cfs_rq 就不是唯一的了,而是共享同一个全局运行队列。当系统中存在大量的可运行进程或线程时,为了避免竞争和干扰,Linux CFS 会为每个 CPU 核心都创建一个专属的 CFS 运行队列,来维护本地的可运行进程或线程。
每个进程都有一个进程调度队列 这句话不对把
非常抱歉,我的表述有误。确切地说,每个CPU都有一个运行队列(runqueue),用于存放等待执行的进程或线程。在Linux内核中,每个CPU都有一个运行队列,而不是每个进程都有一个进程调度队列。
当进程中的线程需要执行时,内核会将线程的调度实体插入到某个CPU对应的运行队列中,以便于该CPU进行调度决策。每个运行队列都由多个调度实体组成,每个调度实体表示一个进程或线程。在CFS调度策略下,每个运行队列由多个CFS队列组成,每个CFS队列对应着一组具有相同优先级的调度实体。
因此,应该把上述表述改为:每个CPU都有一个运行队列,用于存放等待执行的进程或线程。在CFS调度策略下,每个运行队列由多个CFS队列组成,每个CFS队列对应着一组具有相同优先级的调度实体。