摘要
建立排程器設定檔。
宣告
#include <zircon/syscalls.h>
zx_status_t zx_profile_create(zx_handle_t profile_rsrc,
uint32_t options,
const zx_profile_info_t* profile,
zx_handle_t* out);
說明
zx_profile_create()
會建立新的「設定檔」物件。
profile 參數會指定設定檔中的設定,在呼叫 zx_object_set_profile()
時,該設定則會套用至執行緒。以下是 profile 的欄位。options 必須為零。
#define ZX_PROFILE_INFO_FLAG_PRIORITY (1 << 0)
#define ZX_PROFILE_INFO_FLAG_CPU_MASK (1 << 1)
#define ZX_PROFILE_INFO_FLAG_DEADLINE (1 << 2)
#define ZX_PROFILE_INFO_FLAG_NO_INHERIT (1 << 3)
#define ZX_PROFILE_INFO_FLAG_MEMORY_PRIORITY (1 << 4)
typedef struct zx_profile_info {
// A bitmask of ZX_PROFILE_INFO_FLAG_* values. Controls overall profile
// options as well as determining which other fields below have been specified.
// Other fields are considered unset.
uint32_t flags;
uint8_t padding1[4];
union {
struct {
// Scheduling priority. |flags| must have ZX_PROFILE_INFO_FLAG_PRIORITY or
// ZX_PROFILE_INFO_FLAG_MEMORY_PRIORITY set.
int32_t priority;
uint8_t padding2[20];
};
// Scheduling deadline. |flags| must have ZX_PROFILE_INFO_FLAG_DEADLINE set.
zx_sched_deadline_params_t deadline_params;
};
// CPUs that threads may be scheduled on. |flags| must have
// ZX_PROFILE_INFO_FLAG_CPU_MASK set.
zx_cpu_set_t cpu_affinity_mask;
} zx_profile_info_t;
flags
欄位除了能指定 zx_profile_info_t
結構中的哪些欄位還包含有效值以外,還可控制整體設定檔選項。系統會忽略未設定對應 flag
位元的欄位值。這樣一來,即使日後新增了其他欄位,含有 0
值和未設定的欄位也能夠區分。
ZX_PROFILE_INFO_FLAG_PRIORITY
和 ZX_PROFILE_INFO_FLAG_DEADLINE
會為設定檔指定 scheduling discipline
,可以是「公平排程」(適用於 PRIORITY
) 或「期限安排」(DEADLINE
)。無法同時選取多個項目。
ZX_PROFILE_INFO_FLAG_MEMORY_PRIORITY
可讓您建立可套用至 VMAR 的設定檔,而且與任何旗標相關的排程都不相容。目前只有 ZX_PRIORITY_DEFAULT
和 ZX_PRIORITY_HIGH
的記憶體優先順序具有意義,其中原值是一開始所有 VMAR 的預設項目,後者表示應避免在套用設定檔的物件上進行所有核心啟動重建。
根據預設,設定檔指派給某個執行緒後,會在該執行緒中封鎖由指派擁有者的執行緒 (請參閱 zx_futex_wait()
)。使用 ZX_PROFILE_INFO_FLAG_NO_INHERIT
建立的設定檔不會包含設定檔繼承設定。如果在與擁有者同時指派了這類設定檔區塊的執行緒,則代表擁有者並未收到封鎖執行緒的直接設定檔壓力 (但是他們可能會收到封鎖執行緒後封鎖的其他執行緒壓力)。
期限設定檔一律必須可繼承。嘗試建立不可繼承的期限設定檔將會失敗,並顯示 ZX_ERR_INVALID_ARGS。
成功時,系統會傳回新設定檔的控制代碼。
權限
profile_rsrc 必須包含以 ZX_RSRC_SYSTEM_PROFILE_BASE
為底的資源種類 ZX_RESOURCE_KIND_SYSTEM
。
呼叫端工作政策必須允許 ZX_POL_NEW_PROFILE
。
傳回值
在成功時傳回 ZX_OK
和新設定檔的控制代碼 (透過 out)。如果失敗,系統會傳回負值的錯誤值。
錯誤
ZX_ERR_BAD_HANDLE
profile_rsrc 不是有效的控制代碼。
ZX_ERR_ACCESS_DENIED
profile_rsrc 不是設定檔資源。
ZX_ERR_INVALID_ARGS
您提供的一或多個引數無效:
- profile 或 out 為無效指標
- flags 包含不明選項
- flags 無法指定排程器、CPU 相依性遮罩或記憶體優先順序。
- flags 一次指定多個排程器。
- flags 將排程紀律指定為期限,但設定檔會標示為「無沿用」。
- flags 指定排程器和記憶體優先順序。
- options 非零
- 優先順序無效
ZX_ERR_NO_MEMORY
因記憶體不足而失敗。