thread_set_smt_priority 或 thread_read_smt_priority 系统调用
用途
设置或读取用户-线程的当前同时多线程 (SMT) 线程优先级。
语法
#include <sys/errno.h>
#include <sys/thread.h>
#include <sys/processor.h> int thread_set_smt_priority ( Priority )
smt_thread_priority_t Priority;
smt_thread_priority_t Priority;
#include <sys/errno.h>
#include <sys/thread.h>
#include <sys/processor.h> smt_thread_priority_t thread_read_smt_priority ( )
描述
与逻辑 CPU 相关联的 SMT 线程优先级,即 SMT 硬件线程,用于控制逻辑 CPU 相对于同一处理器核心上其他逻辑 CPU 的相对优先级。 处理器核心上的 SMT 硬件线程之间的相对优先级决定了如何向每个 SMT 硬件线程授予解码周期。 可以使用 SMT 线程优先级来使特定应用程序线程优先于在同一处理器核心中的其他 SMT 硬件线程上运行的其他应用程序线程。 通过提高运行应用程序的逻辑 CPU 的 SMT 线程优先级,或者通过降低运行在与同一处理器核心关联的其他逻辑 CPU 上的应用程序线程的 SMT 线程优先级来完成此任务。
thread_set_smt_priority 和 thread_read_smt_priority 系统调用提供了一种方法,用于在每个进程线程的基础上注册和读取当前 SMT 线程优先级。
注意:
这些接口在某些处理器体系结构上不受支持。
如果将进程线程分派到正在以非 SMT 方式运行的逻辑 CPU ,那么 SMT 线程优先级级别将无效。
具有正常用户级别特权的 thread_set_smt_priority 系统调用的调用者可以将其 SMT 线程优先级级别设置为下列其中一个级别:
- 低
- 中低
- 正常
- 非常低
- 低
- 中低
- 正常
- 中等高
- 高
注: 唯一受支持的改变 SMT 线程优先级级别的方法是使用 thread_set_smt_priority 系统调用。 如果使用了设置 SMT 优先级的替代方法,那么内核不知道进程线程的当前 SMT 优先级级别,并且会覆盖所需的 SMT 优先级级别而不恢复它。
thread_read_smt_priority 系统调用将返回由进程线程注册的当前 SMT 优先级。 如果进程线程未注册必需的 SMT 优先级级别,那么会返回缺省优先级级别 NORMAL。
参数
| 项 | 描述 |
|---|---|
| Priority | 用来指定下列其中一个参数:
|
执行环境
只能从流程环境中调用 thread_read_smt_priority 和 thread_set_smt_priority 系统调用。
返回值
成功完成时, thread_set_smt_priority 系统调用将返回 0。 否则,将返回 -1 ,并设置 errno 全局变量以指示错误。
成功完成时, thread_read_smt_priority 系统调用将返回当前必需的 SMT 优先级。 否则,将返回 -1 ,并设置 errno 全局变量以指示错误。
错误代码
| 项 | 描述 |
|---|---|
| EPERM | 进程尝试将 SMT 线程优先级级别设置为除 T_LOW_SMT_PRI , T_MEDIUMLOW_SMT_PRI 或 T_NORMAL_SMT_PRI 以外的值,但没有必需的特权。 |
| EINVAL | 所指定必需的优先级值无效。 |
| ENOSYS | 在此系统上不支持 SMT 线程优先级级别操作。 |