惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
N
Netflix TechBlog - Medium
博客园 - 叶小钗
大猫的无限游戏
大猫的无限游戏
S
SegmentFault 最新的问题
V
V2EX
IT之家
IT之家
J
Java Code Geeks
Hacker News - Newest:
Hacker News - Newest: "LLM"
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
GbyAI
GbyAI
D
Docker
S
Secure Thoughts
Recent Announcements
Recent Announcements
Webroot Blog
Webroot Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
云风的 BLOG
云风的 BLOG
博客园_首页
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Security Archives - TechRepublic
Security Archives - TechRepublic
酷 壳 – CoolShell
酷 壳 – CoolShell
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
N
News | PayPal Newsroom
S
Security @ Cisco Blogs
I
InfoQ
Last Week in AI
Last Week in AI
SecWiki News
SecWiki News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
W
WeLiveSecurity
T
Troy Hunt's Blog
Recent Commits to openclaw:main
Recent Commits to openclaw:main
H
Hackread – Cybersecurity News, Data Breaches, AI and More
Attack and Defense Labs
Attack and Defense Labs
美团技术团队
T
The Blog of Author Tim Ferriss
Google DeepMind News
Google DeepMind News
Martin Fowler
Martin Fowler
B
Blog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Scott Helme
Scott Helme
T
Tor Project blog
Know Your Adversary
Know Your Adversary
有赞技术团队
有赞技术团队
Hugging Face - Blog
Hugging Face - Blog
Recorded Future
Recorded Future
C
Cyber Attacks, Cyber Crime and Cyber Security
AI
AI
G
Google Developers Blog

博客园 - yooooooo

ftraceoption irq-info MPAM BE/ FE 的区别及功能 IPI与CPU唤醒机制 【ARM CoreLink 系列 5 -- CI-700 控制器介绍 】 ARM CoreLink 系列 4.3 -- NI-700 Component and interface identifiers ARM CCI-500 与 NI0700 的关系. ARM NIC-400 与 NI-700 的区别 claude code命令使用 【ARM Trace32(劳特巴赫) 使用介绍 2.2 -- TRACE32 进阶命令之 DIAG 弹框命令】 trace32 .cmm脚本和.t32文件的区别 【ARM Trace32(劳特巴赫) 使用介绍 2.1 -- TRACE32 Practice 脚本 cmm 脚本学习】 【ARM Trace32(劳特巴赫) 使用介绍 1.1 - Veloce 环境中使用trace32 连接 Cortex-M33】 PCIe 总线的 ASPM 和 链路状态机制总结 fw_devlink 功能 I3C协议详解 UART 协议规范 BPF 调度器 sched_ext 实现机制、调度流程及样例 Android Camera性能分析 录像Buffer Path详解 【UEFI基础】Protocol介绍 【UEFI实战】在库中使用全局变量 【ARM CoreLink 系列 4.2 -- NI-700 Function units 详细介绍】 edk2构建编译流程 UEFI:FDF文件及FD、FV、FFS EDK II PCD的概念、类型、使用 PELT算法浅析 load_balance函数代码详解 UEFI Boot Manager Linux misfit task Linux 内核中sched_prio_to_weight转换关系 CFS任务放置代码详解 CFS任务的负载均衡(load balance)
sched feature TTWU_QUEUE
yooooooo · 2025-11-30 · via 博客园 - yooooooo

TTWU_QUEUE 是 Linux 调度器中的一个 调度特性(sched feature),全称是 Task Wakeup Queue。它决定了在任务唤醒(wake-up)时,是否将任务直接入队到目标 CPU 的运行队列,还是采用更复杂的路径。

作用与背景

  • 当一个任务被唤醒(例如因为 I/O 完成或信号到达),调度器需要决定:
    • 立即入队目标 CPU(快速路径,减少延迟)
    • 通过中间队列或延迟处理(可能更公平,但增加延迟)

TTWU_QUEUE 打开时:

  • 唤醒操作会将任务放入一个 per-CPU 的唤醒队列,然后由该 CPU 的调度器在合适时机批量处理。
  • 优点:减少锁竞争,提高并发性能。
  • 缺点:可能增加唤醒延迟,尤其在低延迟场景(如交互或实时任务)不理想。

关闭 TTWU_QUEUE 时:

  • 任务直接插入目标 CPU 的运行队列(rq),唤醒延迟更低,但可能增加锁争用。

唤醒线程时,通过select_task_rq函数(考虑到负载均衡等因素)选择该线程要运行的目标CPU(可能不是当前执行唤醒操作的cpu)。通过函数cpus_share_cache判断如果目标CPU与当前CPU不共享LLC(即L3 cache,单socket中所有CPU共享的cache,如下图示),则将该线程加到目标cpu的wake_list后,向目标CPU发送IPI中断(这其中还有一个特殊情况不需要发送IPI,就是目前CPU当前正在运行idle线程,并且设置了TIF_POLLING_NRFLAG),让目标CPU在中断中(scheduler_ipi)处理唤醒逻辑。

其中TTWU_QUEUE是内核调度的其中一个feature,默认是打开的(true),可以控制在远程唤醒时是否允许向目标CPU触发IPI中断,如果不允许远程唤醒,则需要通过对目标CPU的运行队列加锁进行处理。可知TTWU_QUEUE就是为了减少运行队列的锁竞争,用中断代替。

  • 开启 TTWU_QUEUE 后,改为把待唤醒任务放入目标 CPU 的 wake_list,并通过 IPI 让目标 CPU 自己在中断上下文处理入队,从而避免当前 CPU 去争抢目标 CPU 的 rq 锁

1

2

3
try_to_wakeup --> ttwu_queue -->ttwu_queue_remote->smp_send_reschedule:
4

5
6

很早之前的做法是,只要不是唤醒在本CPU上,都是通过IPI中断,这样IPI中断负载就比较高:

1