Cgroup 内核 API

设备内存 Cgroup API (dmemcg)

bool dmem_cgroup_state_evict_valuable(struct dmem_cgroup_pool_state *limit_pool, struct dmem_cgroup_pool_state *test_pool, bool ignore_low, bool *ret_hit_low)

检查是否应从 test_pool 中驱逐

参数

struct dmem_cgroup_pool_state *limit_pool

达到限制的池

struct dmem_cgroup_pool_state *test_pool

要测试的池

bool ignore_low

是否必须遵守低水位线。

bool *ret_hit_low

指向是否考虑低水位线的指针。

描述

如果可以从 test_pool 中驱逐,此函数返回 true,否则返回 false。当返回 false 且 ignore_low 为 false 时,ret_hit_low 可能会被设置为 true,表示此函数可以重新尝试,并将 ignore_low 设置为 true。

返回

bool

void dmem_cgroup_unregister_region(struct dmem_cgroup_region *region)

注销之前注册的区域。

参数

struct dmem_cgroup_region *region

要注销的区域。

描述

此函数撤销 dmem_cgroup_register_region 的效果。

struct dmem_cgroup_region *dmem_cgroup_register_region(u64 size, const char *fmt, ...)

为设备 cgroup 注册区域。

参数

u64 size

要注册区域的大小,以字节为单位。

const char *fmt

要注册的区域参数

...

可变参数

描述

此函数在 dmem cgroup 中注册一个具有给定名称的节点。调用此函数后,该区域可用于分配。

返回

成功时返回 NULL 或结构体,失败时返回 PTR_ERR。

void dmem_cgroup_pool_state_put(struct dmem_cgroup_pool_state *pool)

丢弃对 dmem_cgroup_pool_state 的引用

参数

struct dmem_cgroup_pool_state *pool

dmem_cgroup_pool_state

描述

调用此函数以丢弃对 dmem_cgroup_try_charge() 返回的限制池的引用。

void dmem_cgroup_uncharge(struct dmem_cgroup_pool_state *pool, u64 size)

解除池的费用。

参数

struct dmem_cgroup_pool_state *pool

要解除费用的池。

u64 size

要解除费用的大小。

描述

撤销 dmem_cgroup_try_charge 的效果。必须以返回的池作为参数调用,并且 **index** 和 **size** 相同。

int dmem_cgroup_try_charge(struct dmem_cgroup_region *region, u64 size, struct dmem_cgroup_pool_state **ret_pool, struct dmem_cgroup_pool_state **ret_limit_pool)

尝试对区域进行新的分配计费。

参数

struct dmem_cgroup_region *region

要计费的 dmem 区域

u64 size

要计费的大小(字节)。

struct dmem_cgroup_pool_state **ret_pool

成功分配后,被计费的池。

struct dmem_cgroup_pool_state **ret_limit_pool

分配失败时,限制池。

描述

此函数对 **region** 区域按 **size** 字节大小进行计费。

如果函数成功,将设置 **ret_pool**,在撤销分配时必须将其传递给 dmem_cgroup_uncharge()

当此函数因 -EAGAIN 失败且 **ret_limit_pool** 不为空时,它将被设置为达到限制的池。这可以用作 dmem_cgroup_evict_valuable() 的参数进行驱逐。此引用必须使用 **dmem_cgroup_pool_state_put()** 释放。

返回

成功时返回 0,达到限制时返回 -EAGAIN,失败时返回负错误码。