摘要
建立排程器設定檔。
宣告
#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 的預設資源,後者則代表所有核心
請避免在套用設定檔的物件上啟動重回功能。
在預設情況下,當設定檔指派給某個人員時,
與指派擁有者在 Futex 中封鎖的執行緒 (請參閱 zx_futex_wait()
)。
使用 ZX_PROFILE_INFO_FLAG_NO_INHERIT
建立的設定檔則不支援。時間
與擁有者在外套中被指派的類似設定檔區塊的執行緒,
因此,futex 的主人不會收到
阻塞性測試
但可能會收到來自其他執行緒的壓力
封鎖後)。
期限設定檔必須一律可以沿用。嘗試建立 不可沿用的期限設定檔會因 ZX_ERR_INVALID_ARGS 而失敗。
成功處理後,系統會傳回新設定檔的控制代碼。
權限
profile_rsrc 必須包含具有底數的資源種類 ZX_RESOURCE_KIND_SYSTEM
ZX_RSRC_SYSTEM_PROFILE_BASE
。
呼叫端工作政策必須允許 ZX_POL_NEW_PROFILE
。
傳回值
成功時傳回 ZX_OK
和新設定檔的控制代碼 (透過「傳出」)。在
失敗時,系統會傳回負錯誤值。
錯誤
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 不是零
- Priority 的優先順序無效
ZX_ERR_NO_MEMORY
因記憶體不足而失敗。