Linux 内核调度算用户态 cpu 时间还是系统态 cpu 时间

2023-02-25 07:40:06 +08:00
 Aaron7Amelia
前几天面试,有问到上面的问题。我的理解是系统态 cpu 时间。不过面试官这么问了,我有点不太 自信了。网上搜索了下资料也没有找到答案

我觉得是 系统态 cpu 时间的理由是:Linux 的调度逻辑是内核代码实现的,所以我认为是系统态 cpu 时间。

另外还有一点,Linux 中用 task_struct 数据结构来代表一个任务,这个数据结构里会有字段存用户指令地址或者内核指令地址。如果 cpu 调度到这个 task_struct ,并且执行的是用户指令,就是用户态时间。执行的是内核指令就是系统态时间

不知道我这么理解是否正确
974 次点击
所在节点    问与答
9 条回复
chuckzhou
2023-02-25 08:56:37 +08:00
什么职位,还面试这个。时间记在哪个上面应该就是看当前是 ring 0 还是 3 ,内核调度在 0 ,应该是记在 sys 。
Aaron7Amelia
2023-02-25 10:04:25 +08:00
#1 我面的 sre
NoirStrike
2023-02-25 10:39:47 +08:00
这种问题, offer 得 30k 以上吧
Aaron7Amelia
2023-02-25 10:44:00 +08:00
#3 sre 现在也低得很,而且 hr 面后还得比较。我已经有 2 家提交银行流水后,没后续的了
pipapa
2023-02-25 17:26:33 +08:00
采样的,一个 jiffies 触发中断时,如果代码落在内核态就算 system 时间,落在用户态就算 user 时间。
精度不会高于 jiffies 时间间隔(中断有单独的时间统计,参考 https://lore.kernel.org/lkml/1279583835-22854-1-git-send-email-venki@google.com/
julyclyde
2023-02-27 08:58:44 +08:00
记 sys 也是“某个进程的 sys”啊
只有内核线程才记内核自己的账上
pipapa
2023-02-27 11:57:49 +08:00
@julyclyde 并不是,只要落在内核地址空间就算到 sys 头上
julyclyde
2023-02-27 13:27:21 +08:00
@pipapa 那 time 命令统计到的 sys 是怎么归属到这个进程的呢?
pipapa
2023-02-27 15:10:07 +08:00
@julyclyde kernel 会有一个 current 变量表示当前 task ,进程统计归属到它的头上,然后看采样前的上下文是在内核态还是用户态,内核态就算 sys 时间。你说的内核线程像是 ksoftirqd 这种应该是归属到 cpu 软中断时间上的。细节记不太清了,可以看下 https://elixir.bootlin.com/linux/latest/source/kernel/time/timer.c#L2064

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/919049

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX