摘要
建立排程器設定檔。
宣告
#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 物件。
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 的預設資源,後者則代表所有核心
請避免在套用設定檔的物件上啟動重回功能。
根據預設,如果將設定檔指派給執行緒,而該執行緒在 futex 中以指派的擁有者阻斷 (請參閱 zx_futex_wait()
),則設定檔會參與設定檔繼承。使用 ZX_PROFILE_INFO_FLAG_NO_INHERIT
建立的設定檔則不會。當執行緒在具有擁有者的 futex 中指派此類剖析資料區塊時,futex 的擁有者不會收到來自封鎖執行緒的直接剖析資料壓力 (但可能會收到來自封鎖執行緒後方封鎖的其他執行緒的壓力)。
期限設定檔必須一律可以沿用。嘗試建立非可繼承的截止時間設定檔時,系統會傳回 ZX_ERR_INVALID_ARGS,並導致建立作業失敗。
成功後,系統會傳回新設定檔的句柄。
權限
profile_rsrc 必須具有資源類型 ZX_RESOURCE_KIND_SYSTEM
和 base ZX_RSRC_SYSTEM_PROFILE_BASE
。
呼叫端工作政策必須允許 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:包含未知的選項
- 標記未能指定排程規則、CPU 相依性遮罩或記憶體優先順序。
- flags [旗標] 一次指定多個排程規範。
- 標記指定排程規則為期限,但設定檔也標示為「不繼承」。
- flags 指定了排程紀律和記憶體優先順序。
- options 不是零
- Priority 的優先順序無效
ZX_ERR_NO_MEMORY
記憶體不足而導致失敗。