Re: [PATCH v2 12/12] docs/zh_CN: add vm zsmalloc translation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, Mar 17, 2022 at 2:51 PM Yanteng Si <siyanteng01@xxxxxxxxx> wrote:
>
> From: Yanteng Si <siyanteng01@xxxxxxxxx>
>
> Translate .../vm/zsmalloc.rst into Chinese.
>
> Signed-off-by: Yanteng Si <siyanteng@xxxxxxxxxxx>

Reviewed-by: Alex Shi <alexs@xxxxxxxxxx>

> ---
>  Documentation/translations/zh_CN/vm/index.rst |  2 +-
>  .../translations/zh_CN/vm/zsmalloc.rst        | 78 +++++++++++++++++++
>  2 files changed, 79 insertions(+), 1 deletion(-)
>  create mode 100644 Documentation/translations/zh_CN/vm/zsmalloc.rst
>
> diff --git a/Documentation/translations/zh_CN/vm/index.rst b/Documentation/translations/zh_CN/vm/index.rst
> index e28d0e919bfe..c7148125e659 100644
> --- a/Documentation/translations/zh_CN/vm/index.rst
> +++ b/Documentation/translations/zh_CN/vm/index.rst
> @@ -38,6 +38,7 @@ TODO:待引用文档集被翻译完毕后请及时修改此处)
>     remap_file_pages
>     split_page_table_lock
>     z3fold
> +   zsmalloc
>
>  TODOLIST:
>  * arch_pgtable_helpers
> @@ -50,4 +51,3 @@ TODOLIST:
>  * transhuge
>  * unevictable-lru
>  * vmalloced-kernel-stacks
> -* zsmalloc
> diff --git a/Documentation/translations/zh_CN/vm/zsmalloc.rst b/Documentation/translations/zh_CN/vm/zsmalloc.rst
> new file mode 100644
> index 000000000000..29e9c70a8eb6
> --- /dev/null
> +++ b/Documentation/translations/zh_CN/vm/zsmalloc.rst
> @@ -0,0 +1,78 @@
> +:Original: Documentation/vm/zs_malloc.rst
> +
> +:翻译:
> +
> + 司延腾 Yanteng Si <siyanteng@xxxxxxxxxxx>
> +
> +:校译:
> +
> +========
> +zsmalloc
> +========
> +
> +这个分配器是为与zram一起使用而设计的。因此,该分配器应该在低内存条件下工作良好。特别是,
> +它从未尝试过higher order页面的分配,这在内存压力下很可能会失败。另一方面,如果我们只
> +是使用单(0-order)页,它将遭受非常高的碎片化 - 任何大小为PAGE_SIZE/2或更大的对象将
> +占据整个页面。这是其前身(xvmalloc)的主要问题之一。
> +
> +为了克服这些问题,zsmalloc分配了一堆0-order页面,并使用各种"struct page"字段将它
> +们链接起来。这些链接的页面作为一个单一的higher order页面,即一个对象可以跨越0-order
> +页面的边界。代码将这些链接的页面作为一个实体,称为zspage。
> +
> +为了简单起见,zsmalloc只能分配大小不超过PAGE_SIZE的对象,因为这满足了所有当前用户的
> +要求(在最坏的情况下,页面是不可压缩的,因此以"原样"即未压缩的形式存储)。对于大于这
> +个大小的分配请求,会返回失败(见zs_malloc)。
> +
> +此外,zs_malloc()并不返回一个可重复引用的指针。相反,它返回一个不透明的句柄(无符号
> +长),它编码了被分配对象的实际位置。这种间接性的原因是zsmalloc并不保持zspages的永久
> +映射,因为这在32位系统上会导致问题,因为内核空间映射的VA区域非常小。因此,在使用分配
> +的内存之前,对象必须使用zs_map_object()进行映射以获得一个可用的指针,随后使用
> +zs_unmap_object()解除映射。
> +
> +stat
> +====
> +
> +通过CONFIG_ZSMALLOC_STAT,我们可以通过 ``/sys/kernel/debug/zsmalloc/<user name>``
> +看到zsmalloc内部信息。下面是一个统计输出的例子。::
> +
> + # cat /sys/kernel/debug/zsmalloc/zram0/classes
> +
> + class  size almost_full almost_empty obj_allocated   obj_used pages_used pages_per_zspage
> +    ...
> +    ...
> +     9   176           0            1           186        129          8                4
> +    10   192           1            0          2880       2872        135                3
> +    11   208           0            1           819        795         42                2
> +    12   224           0            1           219        159         12                4
> +    ...
> +    ...
> +
> +
> +class
> +       索引
> +size
> +       zspage存储对象大小
> +almost_empty
> +       ZS_ALMOST_EMPTY zspage的数量(见下文)。
> +almost_full
> +       ZS_ALMOST_FULL zspage的数量(见下图)
> +obj_allocated
> +       已分配对象的数量
> +obj_used
> +       分配给用户的对象的数量
> +pages_used
> +       为该类分配的页数
> +pages_per_zspage
> +       组成一个zspage的0-order页面的数量
> +
> +当n <= N / f时,我们将一个zspage分配给ZS_ALMOST_EMPTYfullness组,其中
> +
> +* n = 已分配对象的数量
> +* N = zspage可以存储的对象总数
> +* f = fullness_threshold_frac(即,目前是4个)
> +
> +同样地,我们将zspage分配给:
> +
> +* ZS_ALMOST_FULL  when n > N / f
> +* ZS_EMPTY        when n == 0
> +* ZS_FULL         when n == N
> --
> 2.27.0
>




[Index of Archives]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux FS]     [Yosemite Forum]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Device Mapper]     [Linux Resources]

  Powered by Linux