preempt_count 为什么会变成per-thread.
时间: 2023-08-17 08:41:10 浏览: 60
`preempt_count` 变量是 per-CPU 的,因为它用于跟踪每个 CPU 上线程的抢占计数。然而,在某些情况下,可能会出现将 `preempt_count` 变成 per-thread 的情况。
具体来说,当使用 Linux 内核中的抢占禁用机制时,可能会出现这种情况。抢占禁用机制允许内核在某些情况下禁用抢占,以确保某些关键代码段不会被抢占。在这种情况下,`preempt_count` 变量的值将会被保存在线程的内核栈中,而不是 per-CPU 变量中。
需要注意的是,这种情况只是临时的,当抢占被重新启用时,`preempt_count` 变量将恢复为 per-CPU 的。因此,`preempt_count` 变量在大多数情况下仍然是 per-CPU 的。
相关问题
preempt_count 是per-cpu的还是per-thread.并指明出处和相应内核版本
`preempt_count` 是 per-CPU 的。这个变量用于记录每个 CPU 上的抢占计数。具体来说,当内核抢占一个运行中的线程时,它会增加 `preempt_count` 的值;当线程重新获得 CPU 时,它会将 `preempt_count` 的值减少。因此,`preempt_count` 的值反映了当前 CPU 上正在运行的线程是否可以被抢占。
该信息可以在 Linux 内核源代码中找到。这个变量最初是在 Linux 2.6.0 内核版本中引入的,它位于 `include/linux/preempt.h` 文件中。该文件中还包括了许多涉及抢占的宏定义和函数声明。
linux安装实时内核时出现选项,是什么意思:Preemption Model 1. No Forced Preemption (Server) (PREEMPT_NONE) > 2. Voluntary Kernel Preemption (Desktop) (PREEMPT_VOLUNTARY) 3. Preemptible Kernel (Low-Latency Desktop) (PREEMPT__LL) (NEW) 4. Preemptible Kernel (Basic RT) (PREEMPT_RTB) (NEW) 5. Fully Preemptible Kernel (RT) (PREEMPT_RT_FULL) (NEW)
这是实时内核安装时的预处理模型选项。这些选项用于指定系统内核的调度方式和响应性能。
1. No Forced Preemption (Server) (PREEMPT_NONE):这个选项适合于服务器系统,内核不会被强制抢占,而是只有在进程主动释放CPU时才会进行切换,因此可以保证系统稳定性。
2. Voluntary Kernel Preemption (Desktop) (PREEMPT_VOLUNTARY):这个选项适合桌面系统,内核可以被抢占,但只有在进程主动释放CPU时才会进行切换,同样可以保证系统稳定性。
3. Preemptible Kernel (Low-Latency Desktop) (PREEMPT__LL):这个选项适合对响应性要求很高的桌面系统,内核可以被抢占,但仅在一些特定的位置上,这可以提高系统的响应性能。
4. Preemptible Kernel (Basic RT) (PREEMPT_RTB):这个选项适合于对实时性要求不高的系统,内核可以被抢占,但只在进程执行时间超过某个阈值时才会进行切换,可以提高系统的响应性能。
5. Fully Preemptible Kernel (RT) (PREEMPT_RT_FULL):这个选项适合对实时性要求极高的系统,内核可以被强制抢占,任何时刻都可能进行切换,可以最大限度地提高系统的响应性能。