V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Aaron7Amelia
V2EX  ›  问与答

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

  •  
  •   Aaron7Amelia · 2023-02-25 07:40:06 +08:00 · 968 次点击
    这是一个创建于 423 天前的主题,其中的信息可能已经有所发展或是发生改变。
    前几天面试,有问到上面的问题。我的理解是系统态 cpu 时间。不过面试官这么问了,我有点不太 自信了。网上搜索了下资料也没有找到答案

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

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

    不知道我这么理解是否正确
    9 条回复    2023-02-27 15:10:07 +08:00
    chuckzhou
        1
    chuckzhou  
       2023-02-25 08:56:37 +08:00
    什么职位,还面试这个。时间记在哪个上面应该就是看当前是 ring 0 还是 3 ,内核调度在 0 ,应该是记在 sys 。
    Aaron7Amelia
        2
    Aaron7Amelia  
    OP
       2023-02-25 10:04:25 +08:00
    #1 我面的 sre
    NoirStrike
        3
    NoirStrike  
       2023-02-25 10:39:47 +08:00
    这种问题, offer 得 30k 以上吧
    Aaron7Amelia
        4
    Aaron7Amelia  
    OP
       2023-02-25 10:44:00 +08:00
    #3 sre 现在也低得很,而且 hr 面后还得比较。我已经有 2 家提交银行流水后,没后续的了
    pipapa
        5
    pipapa  
       2023-02-25 17:26:33 +08:00   ❤️ 1
    采样的,一个 jiffies 触发中断时,如果代码落在内核态就算 system 时间,落在用户态就算 user 时间。
    精度不会高于 jiffies 时间间隔(中断有单独的时间统计,参考 https://lore.kernel.org/lkml/[email protected]/
    julyclyde
        6
    julyclyde  
       2023-02-27 08:58:44 +08:00
    记 sys 也是“某个进程的 sys”啊
    只有内核线程才记内核自己的账上
    pipapa
        7
    pipapa  
       2023-02-27 11:57:49 +08:00
    @julyclyde 并不是,只要落在内核地址空间就算到 sys 头上
    julyclyde
        8
    julyclyde  
       2023-02-27 13:27:21 +08:00
    @pipapa 那 time 命令统计到的 sys 是怎么归属到这个进程的呢?
    pipapa
        9
    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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3581 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 10:57 · PVG 18:57 · LAX 03:57 · JFK 06:57
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.