All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] docs/zh_CN: add active_mm and balance translation
@ 2022-01-07  2:40 Yanteng Si
  2022-01-07  2:40 ` [PATCH 1/3] docs/zh_CN: add vm/index translation Yanteng Si
                   ` (2 more replies)
  0 siblings, 3 replies; 11+ messages in thread
From: Yanteng Si @ 2022-01-07  2:40 UTC (permalink / raw)
  To: corbet, alexs, seakeel
  Cc: Yanteng Si, tangyizhou, chenhuacai, jiaxun.yang, linux-doc, siyanteng01

* add vm into zh_CN/index.
* Translate active_mm and balance into Chinese.

Yanteng Si (3):
  docs/zh_CN: add vm/index translation
  docs_zh_CN: add active_mm translation
  docs/zh_CN: add balance translation

 Documentation/translations/zh_CN/index.rst    |  2 +-
 .../translations/zh_CN/vm/active_mm.rst       | 85 +++++++++++++++++++
 .../translations/zh_CN/vm/balance.rst         | 81 ++++++++++++++++++
 Documentation/translations/zh_CN/vm/index.rst | 52 ++++++++++++
 4 files changed, 219 insertions(+), 1 deletion(-)
 create mode 100644 Documentation/translations/zh_CN/vm/active_mm.rst
 create mode 100644 Documentation/translations/zh_CN/vm/balance.rst
 create mode 100644 Documentation/translations/zh_CN/vm/index.rst

-- 
2.27.0


^ permalink raw reply	[flat|nested] 11+ messages in thread

* [PATCH 1/3] docs/zh_CN: add vm/index translation
  2022-01-07  2:40 [PATCH 0/3] docs/zh_CN: add active_mm and balance translation Yanteng Si
@ 2022-01-07  2:40 ` Yanteng Si
  2022-01-07  8:03   ` Tang Yizhou
  2022-01-07  2:40 ` [PATCH 2/3] docs_zh_CN: add active_mm translation Yanteng Si
  2022-01-07  2:40 ` [PATCH 3/3] docs/zh_CN: add balance translation Yanteng Si
  2 siblings, 1 reply; 11+ messages in thread
From: Yanteng Si @ 2022-01-07  2:40 UTC (permalink / raw)
  To: corbet, alexs, seakeel
  Cc: Yanteng Si, tangyizhou, chenhuacai, jiaxun.yang, linux-doc, siyanteng01

Translate ../vm/index.rst into Chinese.

Signed-off-by: Yanteng Si <siyanteng@loongson.cn>
---
 Documentation/translations/zh_CN/index.rst    |  2 +-
 Documentation/translations/zh_CN/vm/index.rst | 52 +++++++++++++++++++
 2 files changed, 53 insertions(+), 1 deletion(-)
 create mode 100644 Documentation/translations/zh_CN/vm/index.rst

diff --git a/Documentation/translations/zh_CN/index.rst b/Documentation/translations/zh_CN/index.rst
index 46e14ec9963d..911fb64d4073 100644
--- a/Documentation/translations/zh_CN/index.rst
+++ b/Documentation/translations/zh_CN/index.rst
@@ -112,6 +112,7 @@ TODOList:
    infiniband/index
    accounting/index
    scheduler/index
+   vm/index
 
 TODOList:
 
@@ -140,7 +141,6 @@ TODOList:
 * gpu/index
 * security/index
 * crypto/index
-* vm/index
 * bpf/index
 * usb/index
 * PCI/index
diff --git a/Documentation/translations/zh_CN/vm/index.rst b/Documentation/translations/zh_CN/vm/index.rst
new file mode 100644
index 000000000000..0fda40c602ac
--- /dev/null
+++ b/Documentation/translations/zh_CN/vm/index.rst
@@ -0,0 +1,52 @@
+.. include:: ../disclaimer-zh_CN.rst
+
+:Original: Documentation/vm/index.rst
+
+:翻译:
+
+ 司延腾 Yanteng Si <siyanteng@loongson.cn>
+
+:校译:
+
+=================
+Linux内存管理文档
+=================
+
+这是一个关于Linux内存管理(mm)子系统内部的文档集,其中有不同层次的细节,包括注释
+和邮件列表的回复,用于阐述数据结构和算法的基本情况。如果你正在寻找关于简单分配内存的建
+议,请参阅(Documentation/translations/zh_CN/core-api/memory-allocation.rst)。
+对于控制和调整指南,请参阅(Documentation/admin-guide/mm/index)。
+TODO:待引用文档集被翻译完毕后请及时修改此处)
+
+.. toctree::
+   :maxdepth: 1
+
+
+TODOLIST:
+* active_mm
+* arch_pgtable_helpers
+* balance
+* damon/index
+* free_page_reporting
+* frontswap
+* highmem
+* hmm
+* hwpoison
+* hugetlbfs_reserv
+* ksm
+* memory-model
+* mmu_notifier
+* numa
+* overcommit-accounting
+* page_migration
+* page_frags
+* page_owner
+* page_table_check
+* remap_file_pages
+* slub
+* split_page_table_lock
+* transhuge
+* unevictable-lru
+* vmalloced-kernel-stacks
+* z3fold
+* zsmalloc
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 2/3] docs_zh_CN: add active_mm translation
  2022-01-07  2:40 [PATCH 0/3] docs/zh_CN: add active_mm and balance translation Yanteng Si
  2022-01-07  2:40 ` [PATCH 1/3] docs/zh_CN: add vm/index translation Yanteng Si
@ 2022-01-07  2:40 ` Yanteng Si
  2022-01-07  8:04   ` Tang Yizhou
  2022-01-07  2:40 ` [PATCH 3/3] docs/zh_CN: add balance translation Yanteng Si
  2 siblings, 1 reply; 11+ messages in thread
From: Yanteng Si @ 2022-01-07  2:40 UTC (permalink / raw)
  To: corbet, alexs, seakeel
  Cc: Yanteng Si, tangyizhou, chenhuacai, jiaxun.yang, linux-doc, siyanteng01

Translatr .../vm/active_mm.rst into Chinese.

Signed-off-by: Yanteng Si <siyanteng@loongson.cn>
---
 .../translations/zh_CN/vm/active_mm.rst       | 85 +++++++++++++++++++
 Documentation/translations/zh_CN/vm/index.rst |  2 +-
 2 files changed, 86 insertions(+), 1 deletion(-)
 create mode 100644 Documentation/translations/zh_CN/vm/active_mm.rst

diff --git a/Documentation/translations/zh_CN/vm/active_mm.rst b/Documentation/translations/zh_CN/vm/active_mm.rst
new file mode 100644
index 000000000000..33f8193e6135
--- /dev/null
+++ b/Documentation/translations/zh_CN/vm/active_mm.rst
@@ -0,0 +1,85 @@
+.. include:: ../disclaimer-zh_CN.rst
+
+:Original: Documentation/vm/active_mm.rst
+
+:翻译:
+
+ 司延腾 Yanteng Si <siyanteng@loongson.cn>
+
+:校译:
+
+
+=========
+Active MM
+=========
+
+这是一封linux之父回复开发者的一封邮件,所以翻译时我尽量保持邮件格式的完整。
+
+::
+
+ List:       linux-kernel
+ Subject:    Re: active_mm
+ From:       Linus Torvalds <torvalds () transmeta ! com>
+ Date:       1999-07-30 21:36:24
+
+ 因为我并不经常写解释,所以已经抄送到linux-kernel邮件列表,而当我做这些,
+ 且更多的人在阅读它们时,我觉得棒极了。
+
+ 1999年7月30日 星期五, David Mosberger 写道:
+ >
+ > 是否有一个简短的描述,说明task_struct中的
+ >  "mm" 和 "active_mm"应该如何使用? (如果
+ > 这个问题在邮件列表中讨论过,我表示歉意--我刚
+ > 刚度假回来,有一段时间没能关注linux-kernel了)。
+
+ 基本上,新的设定是:
+
+  - 我们有“真实地址空间”和“匿名地址空间”。区别在于,匿名地址空间根本不关心用
+    户级页表,所以当我们做上下文切换到匿名地址空间时,我们只是让以前的地址空间
+    处于活动状态。
+
+    一个“匿名地址空间”的明显用途是任何不需要任何用户映射的线程--所有的内核线
+    程基本上都属于这一类,但即使是“真正的”线程也可以暂时说在一定时间内它们不
+    会对用户空间感兴趣,调度器不妨试着避免在切换VM状态上浪费时间。目前只有老
+    式的bdflush sync能做到这一点。
+
+  - “tsk->mm” 指向 “真实地址空间”。对于一个匿名进程来说,tsk->mm将是NULL,
+    其逻辑原因是匿名进程实际上根本就 “没有” 真正的地址空间。
+
+  - 然而,我们显然需要跟踪我们为这样的匿名用户“偷用”了哪个地址空间。为此,我们
+    有 “tsk->active_mm”,它显示了当前活动的地址空间是什么。
+
+    规则是,对于一个有真实地址空间的进程(即tsk->mm是 non-NULL),active_mm
+    显然必须与realone相同。
+
+    对于一个匿名进程,tsk->mm == NULL,而tsk->active_mm是匿名进程运行时
+    “借用”的mm。当匿名进程被调度走时,借用的地址空间被返回并清除。
+
+ 为了支持所有这些,“struct mm_struct”现在有两个计数器:一个是 “mm_users”
+ 计数器,即有多少 “真正的地址空间用户”,另一个是 “mm_count”计数器,即 “lazy”
+ 用户(即匿名用户)的数量,如果有任何真正的用户,则加1。
+
+ 通常情况下,至少有一个真正的用户,但也可能是真正的用户在另一个CPU上退出,而
+ 一个lazy的用户仍在活动,所以你实际上得到的情况是,你有一个地址空间 **只**
+ 被lazy的用户使用。这通常是一个短暂的生命周期状态,因为一旦这个线程被安排给一
+ 个真正的线程,这个 “僵尸” mm就会被释放,因为 “mm_count”变成了零。
+
+ 另外,一个新的规则是,**没有人** 再把 “init_mm” 作为一个真正的MM了。
+ “init_mm”应该被认为只是一个 “没有其他上下文时的lazy上下文”,事实上,它主
+ 要是在启动时使用,当时还没有真正的VM被创建。因此,用来检查的代码
+
+   if (current->mm == &init_mm)
+
+ 一般来说,应该仅执行
+
+   if (!current->mm)
+
+ 反之(这更有意义--测试基本上是 “我们是否有一个用户环境”,并且通常由缺页
+ 异常处理程序和类似的东西来完成)。
+
+ 总之,我刚才在ftp.kernel.org上放了一个pre-patch-2.3.13-1,因为它稍微改
+ 变了接口以适应alpha(谁会想到呢,但alpha实际上最终有一个最难看的上下文切换
+ 代码--不像其他架构的MM和寄存器状态是分开的,alpha的PALcode将两者连接起来,
+ 你需要同时切换两者)。
+
+ (文档来源 http://marc.info/?l=linux-kernel&m=93337278602211&w=2)
diff --git a/Documentation/translations/zh_CN/vm/index.rst b/Documentation/translations/zh_CN/vm/index.rst
index 0fda40c602ac..5fcdb75d8682 100644
--- a/Documentation/translations/zh_CN/vm/index.rst
+++ b/Documentation/translations/zh_CN/vm/index.rst
@@ -21,9 +21,9 @@ TODO:待引用文档集被翻译完毕后请及时修改此处)
 .. toctree::
    :maxdepth: 1
 
+   active_mm
 
 TODOLIST:
-* active_mm
 * arch_pgtable_helpers
 * balance
 * damon/index
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* [PATCH 3/3] docs/zh_CN: add balance translation
  2022-01-07  2:40 [PATCH 0/3] docs/zh_CN: add active_mm and balance translation Yanteng Si
  2022-01-07  2:40 ` [PATCH 1/3] docs/zh_CN: add vm/index translation Yanteng Si
  2022-01-07  2:40 ` [PATCH 2/3] docs_zh_CN: add active_mm translation Yanteng Si
@ 2022-01-07  2:40 ` Yanteng Si
  2022-01-07 12:26   ` Tang Yizhou
  2 siblings, 1 reply; 11+ messages in thread
From: Yanteng Si @ 2022-01-07  2:40 UTC (permalink / raw)
  To: corbet, alexs, seakeel
  Cc: Yanteng Si, tangyizhou, chenhuacai, jiaxun.yang, linux-doc, siyanteng01

Translate .../vm/balance.rst into Chinese.

Signed-off-by: Yanteng Si <siyanteng@loongson.cn>
---
 .../translations/zh_CN/vm/balance.rst         | 81 +++++++++++++++++++
 Documentation/translations/zh_CN/vm/index.rst |  2 +-
 2 files changed, 82 insertions(+), 1 deletion(-)
 create mode 100644 Documentation/translations/zh_CN/vm/balance.rst

diff --git a/Documentation/translations/zh_CN/vm/balance.rst b/Documentation/translations/zh_CN/vm/balance.rst
new file mode 100644
index 000000000000..1cc7555650de
--- /dev/null
+++ b/Documentation/translations/zh_CN/vm/balance.rst
@@ -0,0 +1,81 @@
+.. include:: ../disclaimer-zh_CN.rst
+
+:Original: Documentation/vm/balance.rst
+
+:翻译:
+
+ 司延腾 Yanteng Si <siyanteng@loongson.cn>
+
+:校译:
+
+
+========
+内存平衡
+========
+
+2000年1月开始,作者:Kanoj Sarcar <kanoj@sgi.com>
+
+对于 !__GFP_HIGH 和 !__GFP_KSWAPD_RECLAIM 以及非 __GFP_IO 的分配,需要进行
+内存平衡。
+
+调用者避免回收的第一个原因是调用者由于持有自旋锁或处于中断环境中而无法睡眠。第二个
+原因可能是,调用者愿意在不产生页面回收开销的情况下失败分配。这可能发生在有0阶回退
+选项的机会主义高阶分配请求中。在这种情况下,调用者可能也希望避免唤醒kswapd。
+
+__GFP_IO分配请求是为了防止文件系统死锁。
+
+在没有非睡眠分配请求的情况下,做平衡似乎是有害的。页面回收可以被懒散地启动,也就是
+说,只有在需要的时候(也就是空闲内存为0的区域),而不是让它成为一个主动的过程。
+
+也就是说,内核应该尝试从直接映射池中满足对直接映射页的请求,而不是回落到dma池中,
+这样就可以保持dma池为dma请求(不管是不是原子的)所填充。类似的说法也适用于高内存
+和直接映射的页面。相反,如果有很多空闲的dma页,最好是通过从dma池中分配一个来满足
+常规的内存请求,而不是产生常规区域平衡的开销。
+
+在2.2中,只有当空闲页总数低于总内存的1/64时,才会启动内存平衡/页面回收。如果dma
+和普通内存的比例合适,即使dma区完全空了,也很可能不会进行平衡。2.2已经在不同内存
+大小的生产机器上运行,即使有这个问题存在,似乎也做得不错。在2.3中,由于HIGHMEM的
+存在,这个问题变得更加严重。
+
+在2.3中,区域平衡可以用两种方式之一来完成:根据区域的大小(可能还有低级区域的大小),
+我们可以在初始化阶段决定在平衡任何区域时应该争取多少空闲页。好的方面是,在平衡的时
+候,我们不需要看低级区的大小,坏的方面是,我们可能会因为忽略低级区可能较低的使用率
+而做过于频繁的平衡。另外,只要对分配程序稍作修改,就有可能将memclass()宏简化为一
+个简单的等式。
+
+另一个可能的解决方案是,我们只在一个区 **和** 其所有低级区的空闲内存低于该区及其
+低级区总内存的1/64时进行平衡。这就解决了2.2的平衡问题,并尽可能地保持了与2.2行为
+的接近。另外,平衡算法在各种架构上的工作方式也是一样的,这些架构有不同数量和类型的
+内存区。如果我们想变得更花哨一点,我们可以在未来为不同区域的自由页面分配不同的权重。
+
+请注意,如果普通区的大小与dma区相比是巨大的,那么在决定是否平衡普通区的时候,考虑
+空闲的dma页就变得不那么重要了。那么第一个解决方案就变得更有吸引力。
+
+所附的补丁实现了第二个解决方案。它还 “修复”了两个问题:首先,在低内存条件下,kswapd
+被唤醒,就像2.2中的非睡眠分配。第二,HIGHMEM区也被平衡了,以便给replace_with_highmem()
+一个争取获得HIGHMEM页的机会,同时确保HIGHMEM分配不会落回普通区。这也确保了HIGHMEM
+页不会被泄露(例如,在一个HIGHMEM页在交换缓存中但没有被任何人使用的情况下)。
+
+kswapd还需要知道它应该平衡哪些区。kswapd主要是在无法进行平衡的情况下需要的,可能
+是因为所有的分配请求都来自intr context,而所有的进程上下文都在睡眠。对于2.3,
+kswapd并不真正需要平衡高内存区,因为intr context并不请求高内存页。kswapd看zone
+结构体中的zone_wake_kswapd字段来决定一个区是否需要平衡。
+
+如果从进程内存和shm中偷取页面可以减轻该页面节点中任何区的内存压力,而该区的内存压力
+已经低于其水位,则会进行偷取。
+
+watemark[WMARK_MIN/WMARK_LOW/WMARK_HIGH]/low_on_memory/zone_wake_kswapd:
+这些是每个区的字段,用于确定一个区何时需要平衡。当页面数低于水位[WMARK_MIN]时,
+hysteric 的字段low_on_memory被设置。这个字段会一直被设置,直到空闲页数变成水位
+[WMARK_HIGH]。当low_on_memory被设置时,页面分配请求将尝试释放该区域的一些页面(如果
+请求中设置了GFP_WAIT)。与此正交的是,决定戳开kswapd以释放一些区的页。这个决定不是基于
+hysteresis 的,而是当空闲页的数量低于watermark[WMARK_LOW]时就会进行;在这种情况下,
+zone_wake_kswapd也被设置。
+
+
+我所听到的(超棒的)想法:
+
+1. 动态实践应该影响平衡:可以跟踪一个区的失败请求的数量,并反馈到平衡方案中(jalvo@mbay.net)。
+
+2. 实现一个类似于replace_with_highmem()的replace_with_regular(),以保留dma页面。
+   (lkd@tantalophile.demon.co.uk)
diff --git a/Documentation/translations/zh_CN/vm/index.rst b/Documentation/translations/zh_CN/vm/index.rst
index 5fcdb75d8682..fc39f0d60318 100644
--- a/Documentation/translations/zh_CN/vm/index.rst
+++ b/Documentation/translations/zh_CN/vm/index.rst
@@ -22,10 +22,10 @@ TODO:待引用文档集被翻译完毕后请及时修改此处)
    :maxdepth: 1
 
    active_mm
+   balance
 
 TODOLIST:
 * arch_pgtable_helpers
-* balance
 * damon/index
 * free_page_reporting
 * frontswap
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 11+ messages in thread

* Re: [PATCH 1/3] docs/zh_CN: add vm/index translation
  2022-01-07  2:40 ` [PATCH 1/3] docs/zh_CN: add vm/index translation Yanteng Si
@ 2022-01-07  8:03   ` Tang Yizhou
  0 siblings, 0 replies; 11+ messages in thread
From: Tang Yizhou @ 2022-01-07  8:03 UTC (permalink / raw)
  To: Yanteng Si, corbet, alexs, seakeel
  Cc: Yanteng Si, chenhuacai, jiaxun.yang, linux-doc

On 2022/1/7 10:40, Yanteng Si wrote:
> Translate ../vm/index.rst into Chinese.
> 
> Signed-off-by: Yanteng Si <siyanteng@loongson.cn>
> ---
>  Documentation/translations/zh_CN/index.rst    |  2 +-
>  Documentation/translations/zh_CN/vm/index.rst | 52 +++++++++++++++++++
>  2 files changed, 53 insertions(+), 1 deletion(-)
>  create mode 100644 Documentation/translations/zh_CN/vm/index.rst
> 

Reviewed-by: Tang Yizhou <tangyizhou@huawei.com>

Thanks,
Tang

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 2/3] docs_zh_CN: add active_mm translation
  2022-01-07  2:40 ` [PATCH 2/3] docs_zh_CN: add active_mm translation Yanteng Si
@ 2022-01-07  8:04   ` Tang Yizhou
  2022-01-08  9:37     ` yanteng si
  0 siblings, 1 reply; 11+ messages in thread
From: Tang Yizhou @ 2022-01-07  8:04 UTC (permalink / raw)
  To: Yanteng Si, corbet, alexs, seakeel
  Cc: Yanteng Si, chenhuacai, jiaxun.yang, linux-doc

On 2022/1/7 10:40, Yanteng Si wrote:> Translatr .../vm/active_mm.rst into Chinese.
> 
> Signed-off-by: Yanteng Si <siyanteng@loongson.cn>
> ---
>  .../translations/zh_CN/vm/active_mm.rst       | 85 +++++++++++++++++++
>  Documentation/translations/zh_CN/vm/index.rst |  2 +-
>  2 files changed, 86 insertions(+), 1 deletion(-)
>  create mode 100644 Documentation/translations/zh_CN/vm/active_mm.rst
> 
> diff --git a/Documentation/translations/zh_CN/vm/active_mm.rst b/Documentation/translations/zh_CN/vm/active_mm.rst
> new file mode 100644
> index 000000000000..33f8193e6135
> --- /dev/null
> +++ b/Documentation/translations/zh_CN/vm/active_mm.rst
> @@ -0,0 +1,85 @@
> +.. include:: ../disclaimer-zh_CN.rst
> +
> +:Original: Documentation/vm/active_mm.rst
> +
> +:翻译:
> +
> + 司延腾 Yanteng Si <siyanteng@loongson.cn>
> +
> +:校译:
> +
> +
> +=========
> +Active MM
> +=========
> +
> +这是一封linux之父回复开发者的一封邮件,所以翻译时我尽量保持邮件格式的完整。
> +
> +::
> +
> + List:       linux-kernel
> + Subject:    Re: active_mm
> + From:       Linus Torvalds <torvalds () transmeta ! com>
> + Date:       1999-07-30 21:36:24
> +
> + 因为我并不经常写解释,所以已经抄送到linux-kernel邮件列表,而当我做这些,
> + 且更多的人在阅读它们时,我觉得棒极了。
> +
> + 1999年7月30日 星期五, David Mosberger 写道:
> + >
> + > 是否有一个简短的描述,说明task_struct中的
> + >  "mm" 和 "active_mm"应该如何使用? (如果
> + > 这个问题在邮件列表中讨论过,我表示歉意--我刚
> + > 刚度假回来,有一段时间没能关注linux-kernel了)。
> +
> + 基本上,新的设定是:
> +
> +  - 我们有“真实地址空间”和“匿名地址空间”。区别在于,匿名地址空间根本不关心用
> +    户级页表,所以当我们做上下文切换到匿名地址空间时,我们只是让以前的地址空间
> +    处于活动状态。
> +
> +    一个“匿名地址空间”的明显用途是任何不需要任何用户映射的线程--所有的内核线
> +    程基本上都属于这一类,但即使是“真正的”线程也可以暂时说在一定时间内它们不
> +    会对用户空间感兴趣,调度器不妨试着避免在切换VM状态上浪费时间。目前只有老
> +    式的bdflush sync能做到这一点。
> +
> +  - “tsk->mm” 指向 “真实地址空间”。对于一个匿名进程来说,tsk->mm将是NULL,
> +    其逻辑原因是匿名进程实际上根本就 “没有” 真正的地址空间。
> +
> +  - 然而,我们显然需要跟踪我们为这样的匿名用户“偷用”了哪个地址空间。为此,我们
> +    有 “tsk->active_mm”,它显示了当前活动的地址空间是什么。
> +
> +    规则是,对于一个有真实地址空间的进程(即tsk->mm是 non-NULL),active_mm
> +    显然必须与realone相同。

please translate: realone

> +
> +    对于一个匿名进程,tsk->mm == NULL,而tsk->active_mm是匿名进程运行时
> +    “借用”的mm。当匿名进程被调度走时,借用的地址空间被返回并清除。
> +
> + 为了支持所有这些,“struct mm_struct”现在有两个计数器:一个是 “mm_users”
> + 计数器,即有多少 “真正的地址空间用户”,另一个是 “mm_count”计数器,即 “lazy”
> + 用户(即匿名用户)的数量,如果有任何真正的用户,则加1。
> +
> + 通常情况下,至少有一个真正的用户,但也可能是真正的用户在另一个CPU上退出,而
> + 一个lazy的用户仍在活动,所以你实际上得到的情况是,你有一个地址空间 **只**
> + 被lazy的用户使用。这通常是一个短暂的生命周期状态,因为一旦这个线程被安排给一
> + 个真正的线程,这个 “僵尸” mm就会被释放,因为 “mm_count”变成了零。
> +
> + 另外,一个新的规则是,**没有人** 再把 “init_mm” 作为一个真正的MM了。
> + “init_mm”应该被认为只是一个 “没有其他上下文时的lazy上下文”,事实上,它主
> + 要是在启动时使用,当时还没有真正的VM被创建。因此,用来检查的代码
> +
> +   if (current->mm == &init_mm)
> +
> + 一般来说,应该仅执行
> +
> +   if (!current->mm)
> +
> + 反之(这更有意义--测试基本上是 “我们是否有一个用户环境”,并且通常由缺页

这里的翻译有问题。原文是current->mm == &init_mm的写法通常应当替换成!current->mm


> + 异常处理程序和类似的东西来完成)。
> +
> + 总之,我刚才在ftp.kernel.org上放了一个pre-patch-2.3.13-1,因为它稍微改
> + 变了接口以适应alpha(谁会想到呢,但alpha实际上最终有一个最难看的上下文切换

适应 -> 适配。 alpha -> alpah体系结构
实际上最终有一个最难看的上下文切换代码 -> 上下文切换代码实际上最终是最丑陋的之一。

> + 代码--不像其他架构的MM和寄存器状态是分开的,alpha的PALcode将两者连接起来,
> + 你需要同时切换两者)。
> +
> + (文档来源 http://marc.info/?l=linux-kernel&m=93337278602211&w=2)
> diff --git a/Documentation/translations/zh_CN/vm/index.rst b/Documentation/translations/zh_CN/vm/index.rst
> index 0fda40c602ac..5fcdb75d8682 100644
> --- a/Documentation/translations/zh_CN/vm/index.rst
> +++ b/Documentation/translations/zh_CN/vm/index.rst
> @@ -21,9 +21,9 @@ TODO:待引用文档集被翻译完毕后请及时修改此处)
>  .. toctree::
>     :maxdepth: 1
>  
> +   active_mm
>  
>  TODOLIST:
> -* active_mm
>  * arch_pgtable_helpers
>  * balance
>  * damon/index
> 

Thanks,
Tang

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 3/3] docs/zh_CN: add balance translation
  2022-01-07  2:40 ` [PATCH 3/3] docs/zh_CN: add balance translation Yanteng Si
@ 2022-01-07 12:26   ` Tang Yizhou
  2022-01-08  9:57     ` yanteng si
  0 siblings, 1 reply; 11+ messages in thread
From: Tang Yizhou @ 2022-01-07 12:26 UTC (permalink / raw)
  To: Yanteng Si, corbet, alexs, seakeel
  Cc: Yanteng Si, chenhuacai, jiaxun.yang, linux-doc

On 2022/1/7 10:40, Yanteng Si wrote:
> Translate .../vm/balance.rst into Chinese.
> 
> Signed-off-by: Yanteng Si <siyanteng@loongson.cn>
> ---
>  .../translations/zh_CN/vm/balance.rst         | 81 +++++++++++++++++++
>  Documentation/translations/zh_CN/vm/index.rst |  2 +-
>  2 files changed, 82 insertions(+), 1 deletion(-)
>  create mode 100644 Documentation/translations/zh_CN/vm/balance.rst
> 
> diff --git a/Documentation/translations/zh_CN/vm/balance.rst b/Documentation/translations/zh_CN/vm/balance.rst
> new file mode 100644
> index 000000000000..1cc7555650de
> --- /dev/null
> +++ b/Documentation/translations/zh_CN/vm/balance.rst
> @@ -0,0 +1,81 @@
> +.. include:: ../disclaimer-zh_CN.rst
> +
> +:Original: Documentation/vm/balance.rst
> +
> +:翻译:
> +
> + 司延腾 Yanteng Si <siyanteng@loongson.cn>
> +
> +:校译:
> +
> +
> +========
> +内存平衡
> +========
> +
> +2000年1月开始,作者:Kanoj Sarcar <kanoj@sgi.com>
> +
> +对于 !__GFP_HIGH 和 !__GFP_KSWAPD_RECLAIM 以及非 __GFP_IO 的分配,需要进行
> +内存平衡。
> +
> +调用者避免回收的第一个原因是调用者由于持有自旋锁或处于中断环境中而无法睡眠。第二个
> +原因可能是,调用者愿意在不产生页面回收开销的情况下失败分配。这可能发生在有0阶回退

失败分配 -> 分配失败

> +选项的机会主义高阶分配请求中。在这种情况下,调用者可能也希望避免唤醒kswapd。
> +
> +__GFP_IO分配请求是为了防止文件系统死锁。
> +
> +在没有非睡眠分配请求的情况下,做平衡似乎是有害的。页面回收可以被懒散地启动,也就是

启动:这里可能可以翻译成“踢出”。大意就是不用的时候不启动。

> +说,只有在需要的时候(也就是空闲内存为0的区域),而不是让它成为一个主动的过程。

空闲内存为0的区域 -> 区域的空闲内存为0

> +
> +也就是说,内核应该尝试从直接映射池中满足对直接映射页的请求,而不是回落到dma池中,

回落 -> 回退,这个应该是比较通行的翻译

> +这样就可以保持dma池为dma请求(不管是不是原子的)所填充。类似的说法也适用于高内存

说法 -> 争论

> +和直接映射的页面。相反,如果有很多空闲的dma页,最好是通过从dma池中分配一个来满足
> +常规的内存请求,而不是产生常规区域平衡的开销。
> +
> +在2.2中,只有当空闲页总数低于总内存的1/64时,才会启动内存平衡/页面回收。如果dma

这里翻译没问题。对照上文的kick off,可知就是踢出或者不运行的意思。

> +和普通内存的比例合适,即使dma区完全空了,也很可能不会进行平衡。2.2已经在不同内存

普通内存:注意你在上文翻译了“常规区域”。普通和常规,两个词统一一下吧。

> +大小的生产机器上运行,即使有这个问题存在,似乎也做得不错。在2.3中,由于HIGHMEM的
> +存在,这个问题变得更加严重。
> +
> +在2.3中,区域平衡可以用两种方式之一来完成:根据区域的大小(可能还有低级区域的大小),

可能还有 -> 可能是

> +我们可以在初始化阶段决定在平衡任何区域时应该争取多少空闲页。好的方面是,在平衡的时
> +候,我们不需要看低级区的大小,坏的方面是,我们可能会因为忽略低级区可能较低的使用率
> +而做过于频繁的平衡。另外,只要对分配程序稍作修改,就有可能将memclass()宏简化为一
> +个简单的等式。
> +
> +另一个可能的解决方案是,我们只在一个区 **和** 其所有低级区的空闲内存低于该区及其
> +低级区总内存的1/64时进行平衡。这就解决了2.2的平衡问题,并尽可能地保持了与2.2行为
> +的接近。另外,平衡算法在各种架构上的工作方式也是一样的,这些架构有不同数量和类型的
> +内存区。如果我们想变得更花哨一点,我们可以在未来为不同区域的自由页面分配不同的权重。
> +
> +请注意,如果普通区的大小与dma区相比是巨大的,那么在决定是否平衡普通区的时候,考虑
> +空闲的dma页就变得不那么重要了。那么第一个解决方案就变得更有吸引力。
> +
> +所附的补丁实现了第二个解决方案。它还 “修复”了两个问题:首先,在低内存条件下,kswapd
> +被唤醒,就像2.2中的非睡眠分配。第二,HIGHMEM区也被平衡了,以便给replace_with_highmem()
> +一个争取获得HIGHMEM页的机会,同时确保HIGHMEM分配不会落回普通区。这也确保了HIGHMEM
> +页不会被泄露(例如,在一个HIGHMEM页在交换缓存中但没有被任何人使用的情况下)。
> +
> +kswapd还需要知道它应该平衡哪些区。kswapd主要是在无法进行平衡的情况下需要的,可能
> +是因为所有的分配请求都来自intr context,而所有的进程上下文都在睡眠。对于2.3,

intr context -> 中断上下文

> +kswapd并不真正需要平衡高内存区,因为intr context并不请求高内存页。kswapd看zone
> +结构体中的zone_wake_kswapd字段来决定一个区是否需要平衡。
> +
> +如果从进程内存和shm中偷取页面可以减轻该页面节点中任何区的内存压力,而该区的内存压力
> +已经低于其水位,则会进行偷取。
> +
> +watemark[WMARK_MIN/WMARK_LOW/WMARK_HIGH]/low_on_memory/zone_wake_kswapd:
> +这些是每个区的字段,用于确定一个区何时需要平衡。当页面数低于水位[WMARK_MIN]时,
> +hysteric 的字段low_on_memory被设置。这个字段会一直被设置,直到空闲页数变成水位
> +[WMARK_HIGH]。当low_on_memory被设置时,页面分配请求将尝试释放该区域的一些页面(如果
> +请求中设置了GFP_WAIT)。与此正交的是,决定戳开kswapd以释放一些区的页。这个决定不是基于

正交 -> 相反。戳开 -> 唤醒。

> +hysteresis 的,而是当空闲页的数量低于watermark[WMARK_LOW]时就会进行;在这种情况下,
> +zone_wake_kswapd也被设置。
> +
> +
> +我所听到的(超棒的)想法:
> +
> +1. 动态实践应该影响平衡:可以跟踪一个区的失败请求的数量,并反馈到平衡方案中(jalvo@mbay.net)。

实践 -> 经历

> +
> +2. 实现一个类似于replace_with_highmem()的replace_with_regular(),以保留dma页面。
> +   (lkd@tantalophile.demon.co.uk)
> diff --git a/Documentation/translations/zh_CN/vm/index.rst b/Documentation/translations/zh_CN/vm/index.rst
> index 5fcdb75d8682..fc39f0d60318 100644
> --- a/Documentation/translations/zh_CN/vm/index.rst
> +++ b/Documentation/translations/zh_CN/vm/index.rst
> @@ -22,10 +22,10 @@ TODO:待引用文档集被翻译完毕后请及时修改此处)
>     :maxdepth: 1
>  
>     active_mm
> +   balance
>  
>  TODOLIST:
>  * arch_pgtable_helpers
> -* balance
>  * damon/index
>  * free_page_reporting
>  * frontswap
> 

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 2/3] docs_zh_CN: add active_mm translation
  2022-01-07  8:04   ` Tang Yizhou
@ 2022-01-08  9:37     ` yanteng si
  2022-01-08 11:13       ` Tang Yizhou
  0 siblings, 1 reply; 11+ messages in thread
From: yanteng si @ 2022-01-08  9:37 UTC (permalink / raw)
  To: Tang Yizhou
  Cc: Jonathan Corbet, Alex Shi, Alex Shi, Yanteng Si, Huacai Chen,
	Jiaxun Yang, Linux Doc Mailing List

Tang Yizhou <tangyizhou@huawei.com> 于2022年1月7日周五 16:04写道:
>
> On 2022/1/7 10:40, Yanteng Si wrote:> Translatr .../vm/active_mm.rst into Chinese.
> >
> > Signed-off-by: Yanteng Si <siyanteng@loongson.cn>
> > ---
> >  .../translations/zh_CN/vm/active_mm.rst       | 85 +++++++++++++++++++
> >  Documentation/translations/zh_CN/vm/index.rst |  2 +-
> >  2 files changed, 86 insertions(+), 1 deletion(-)
> >  create mode 100644 Documentation/translations/zh_CN/vm/active_mm.rst
> >
> > diff --git a/Documentation/translations/zh_CN/vm/active_mm.rst b/Documentation/translations/zh_CN/vm/active_mm.rst
> > new file mode 100644
> > index 000000000000..33f8193e6135
> > --- /dev/null
> > +++ b/Documentation/translations/zh_CN/vm/active_mm.rst
> > @@ -0,0 +1,85 @@
> > +.. include:: ../disclaimer-zh_CN.rst
> > +
> > +:Original: Documentation/vm/active_mm.rst
> > +
> > +:翻译:
> > +
> > + 司延腾 Yanteng Si <siyanteng@loongson.cn>
> > +
> > +:校译:
> > +
> > +
> > +=========
> > +Active MM
> > +=========
> > +
> > +这是一封linux之父回复开发者的一封邮件,所以翻译时我尽量保持邮件格式的完整。
> > +
> > +::
> > +
> > + List:       linux-kernel
> > + Subject:    Re: active_mm
> > + From:       Linus Torvalds <torvalds () transmeta ! com>
> > + Date:       1999-07-30 21:36:24
> > +
> > + 因为我并不经常写解释,所以已经抄送到linux-kernel邮件列表,而当我做这些,
> > + 且更多的人在阅读它们时,我觉得棒极了。
> > +
> > + 1999年7月30日 星期五, David Mosberger 写道:
> > + >
> > + > 是否有一个简短的描述,说明task_struct中的
> > + >  "mm" 和 "active_mm"应该如何使用? (如果
> > + > 这个问题在邮件列表中讨论过,我表示歉意--我刚
> > + > 刚度假回来,有一段时间没能关注linux-kernel了)。
> > +
> > + 基本上,新的设定是:
> > +
> > +  - 我们有“真实地址空间”和“匿名地址空间”。区别在于,匿名地址空间根本不关心用
> > +    户级页表,所以当我们做上下文切换到匿名地址空间时,我们只是让以前的地址空间
> > +    处于活动状态。
> > +
> > +    一个“匿名地址空间”的明显用途是任何不需要任何用户映射的线程--所有的内核线
> > +    程基本上都属于这一类,但即使是“真正的”线程也可以暂时说在一定时间内它们不
> > +    会对用户空间感兴趣,调度器不妨试着避免在切换VM状态上浪费时间。目前只有老
> > +    式的bdflush sync能做到这一点。
> > +
> > +  - “tsk->mm” 指向 “真实地址空间”。对于一个匿名进程来说,tsk->mm将是NULL,
> > +    其逻辑原因是匿名进程实际上根本就 “没有” 真正的地址空间。
> > +
> > +  - 然而,我们显然需要跟踪我们为这样的匿名用户“偷用”了哪个地址空间。为此,我们
> > +    有 “tsk->active_mm”,它显示了当前活动的地址空间是什么。
> > +
> > +    规则是,对于一个有真实地址空间的进程(即tsk->mm是 non-NULL),active_mm
> > +    显然必须与realone相同。
>
> please translate: realone
OK, realone -> 真实地址
>
> > +
> > +    对于一个匿名进程,tsk->mm == NULL,而tsk->active_mm是匿名进程运行时
> > +    “借用”的mm。当匿名进程被调度走时,借用的地址空间被返回并清除。
> > +
> > + 为了支持所有这些,“struct mm_struct”现在有两个计数器:一个是 “mm_users”
> > + 计数器,即有多少 “真正的地址空间用户”,另一个是 “mm_count”计数器,即 “lazy”
> > + 用户(即匿名用户)的数量,如果有任何真正的用户,则加1。
> > +
> > + 通常情况下,至少有一个真正的用户,但也可能是真正的用户在另一个CPU上退出,而
> > + 一个lazy的用户仍在活动,所以你实际上得到的情况是,你有一个地址空间 **只**
> > + 被lazy的用户使用。这通常是一个短暂的生命周期状态,因为一旦这个线程被安排给一
> > + 个真正的线程,这个 “僵尸” mm就会被释放,因为 “mm_count”变成了零。
> > +
> > + 另外,一个新的规则是,**没有人** 再把 “init_mm” 作为一个真正的MM了。
> > + “init_mm”应该被认为只是一个 “没有其他上下文时的lazy上下文”,事实上,它主
> > + 要是在启动时使用,当时还没有真正的VM被创建。因此,用来检查的代码
> > +
> > +   if (current->mm == &init_mm)
> > +
> > + 一般来说,应该仅执行
> > +
> > +   if (!current->mm)
> > +
> > + 反之(这更有意义--测试基本上是 “我们是否有一个用户环境”,并且通常由缺页
>
> 这里的翻译有问题。原文是current->mm == &init_mm的写法通常应当替换成!current->mm
how about:

一般来说,应该用

if (!current->mm)

取代以上上面的写法(这更有意义--测试基本上是 “我们是否有一个用户环境”,并且通常由缺页


>
>
> > + 异常处理程序和类似的东西来完成)。
> > +
> > + 总之,我刚才在ftp.kernel.org上放了一个pre-patch-2.3.13-1,因为它稍微改
> > + 变了接口以适应alpha(谁会想到呢,但alpha实际上最终有一个最难看的上下文切换
>
> 适应 -> 适配。 alpha -> alpah体系结构
> 实际上最终有一个最难看的上下文切换代码 -> 上下文切换代码实际上最终是最丑陋的之一。
OK, Thanks!
>
> > + 代码--不像其他架构的MM和寄存器状态是分开的,alpha的PALcode将两者连接起来,
> > + 你需要同时切换两者)。
> > +
> > + (文档来源 http://marc.info/?l=linux-kernel&m=93337278602211&w=2)
> > diff --git a/Documentation/translations/zh_CN/vm/index.rst b/Documentation/translations/zh_CN/vm/index.rst
> > index 0fda40c602ac..5fcdb75d8682 100644
> > --- a/Documentation/translations/zh_CN/vm/index.rst
> > +++ b/Documentation/translations/zh_CN/vm/index.rst
> > @@ -21,9 +21,9 @@ TODO:待引用文档集被翻译完毕后请及时修改此处)
> >  .. toctree::
> >     :maxdepth: 1
> >
> > +   active_mm
> >
> >  TODOLIST:
> > -* active_mm
> >  * arch_pgtable_helpers
> >  * balance
> >  * damon/index
> >
>
> Thanks,
> Tang

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 3/3] docs/zh_CN: add balance translation
  2022-01-07 12:26   ` Tang Yizhou
@ 2022-01-08  9:57     ` yanteng si
  2022-01-08 11:15       ` Tang Yizhou
  0 siblings, 1 reply; 11+ messages in thread
From: yanteng si @ 2022-01-08  9:57 UTC (permalink / raw)
  To: Tang Yizhou
  Cc: Jonathan Corbet, Alex Shi, Alex Shi, Yanteng Si, Huacai Chen,
	Jiaxun Yang, Linux Doc Mailing List

Tang Yizhou <tangyizhou@huawei.com> 于2022年1月7日周五 20:26写道:
>
> On 2022/1/7 10:40, Yanteng Si wrote:
> > Translate .../vm/balance.rst into Chinese.
> >
> > Signed-off-by: Yanteng Si <siyanteng@loongson.cn>
> > ---
> >  .../translations/zh_CN/vm/balance.rst         | 81 +++++++++++++++++++
> >  Documentation/translations/zh_CN/vm/index.rst |  2 +-
> >  2 files changed, 82 insertions(+), 1 deletion(-)
> >  create mode 100644 Documentation/translations/zh_CN/vm/balance.rst
> >
> > diff --git a/Documentation/translations/zh_CN/vm/balance.rst b/Documentation/translations/zh_CN/vm/balance.rst
> > new file mode 100644
> > index 000000000000..1cc7555650de
> > --- /dev/null
> > +++ b/Documentation/translations/zh_CN/vm/balance.rst
> > @@ -0,0 +1,81 @@
> > +.. include:: ../disclaimer-zh_CN.rst
> > +
> > +:Original: Documentation/vm/balance.rst
> > +
> > +:翻译:
> > +
> > + 司延腾 Yanteng Si <siyanteng@loongson.cn>
> > +
> > +:校译:
> > +
> > +
> > +========
> > +内存平衡
> > +========
> > +
> > +2000年1月开始,作者:Kanoj Sarcar <kanoj@sgi.com>
> > +
> > +对于 !__GFP_HIGH 和 !__GFP_KSWAPD_RECLAIM 以及非 __GFP_IO 的分配,需要进行
> > +内存平衡。
> > +
> > +调用者避免回收的第一个原因是调用者由于持有自旋锁或处于中断环境中而无法睡眠。第二个
> > +原因可能是,调用者愿意在不产生页面回收开销的情况下失败分配。这可能发生在有0阶回退
>
> 失败分配 -> 分配失败
OK, Thanks!
>
> > +选项的机会主义高阶分配请求中。在这种情况下,调用者可能也希望避免唤醒kswapd。
> > +
> > +__GFP_IO分配请求是为了防止文件系统死锁。
> > +
> > +在没有非睡眠分配请求的情况下,做平衡似乎是有害的。页面回收可以被懒散地启动,也就是
>
> 启动:这里可能可以翻译成“踢出”。大意就是不用的时候不启动。
"kicked off" is a football term, In Chinese, it means 开球.
日常使用中都是用做:启动、执行
eg: Apart from Nasa, missions from the UAE and China to Mars also
kicked off last year.
China kicked off the protection program in 2012.


> > +说,只有在需要的时候(也就是空闲内存为0的区域),而不是让它成为一个主动的过程。
>
> 空闲内存为0的区域 -> 区域的空闲内存为0
OK, Thanks!
>
> > +
> > +也就是说,内核应该尝试从直接映射池中满足对直接映射页的请求,而不是回落到dma池中,
>
> 回落 -> 回退,这个应该是比较通行的翻译
great!
>
> > +这样就可以保持dma池为dma请求(不管是不是原子的)所填充。类似的说法也适用于高内存
>
> 说法 -> 争论
OK, Thanks!
>
> > +和直接映射的页面。相反,如果有很多空闲的dma页,最好是通过从dma池中分配一个来满足
> > +常规的内存请求,而不是产生常规区域平衡的开销。
> > +
> > +在2.2中,只有当空闲页总数低于总内存的1/64时,才会启动内存平衡/页面回收。如果dma
>
> 这里翻译没问题。对照上文的kick off,可知就是踢出或者不运行的意思。
>
> > +和普通内存的比例合适,即使dma区完全空了,也很可能不会进行平衡。2.2已经在不同内存
>
> 普通内存:注意你在上文翻译了“常规区域”。普通和常规,两个词统一一下吧。
OK, Thanks!
>
> > +大小的生产机器上运行,即使有这个问题存在,似乎也做得不错。在2.3中,由于HIGHMEM的
> > +存在,这个问题变得更加严重。
> > +
> > +在2.3中,区域平衡可以用两种方式之一来完成:根据区域的大小(可能还有低级区域的大小),
>
> 可能还有 -> 可能是
OK, Thanks!
>
> > +我们可以在初始化阶段决定在平衡任何区域时应该争取多少空闲页。好的方面是,在平衡的时
> > +候,我们不需要看低级区的大小,坏的方面是,我们可能会因为忽略低级区可能较低的使用率
> > +而做过于频繁的平衡。另外,只要对分配程序稍作修改,就有可能将memclass()宏简化为一
> > +个简单的等式。
> > +
> > +另一个可能的解决方案是,我们只在一个区 **和** 其所有低级区的空闲内存低于该区及其
> > +低级区总内存的1/64时进行平衡。这就解决了2.2的平衡问题,并尽可能地保持了与2.2行为
> > +的接近。另外,平衡算法在各种架构上的工作方式也是一样的,这些架构有不同数量和类型的
> > +内存区。如果我们想变得更花哨一点,我们可以在未来为不同区域的自由页面分配不同的权重。
> > +
> > +请注意,如果普通区的大小与dma区相比是巨大的,那么在决定是否平衡普通区的时候,考虑
> > +空闲的dma页就变得不那么重要了。那么第一个解决方案就变得更有吸引力。
> > +
> > +所附的补丁实现了第二个解决方案。它还 “修复”了两个问题:首先,在低内存条件下,kswapd
> > +被唤醒,就像2.2中的非睡眠分配。第二,HIGHMEM区也被平衡了,以便给replace_with_highmem()
> > +一个争取获得HIGHMEM页的机会,同时确保HIGHMEM分配不会落回普通区。这也确保了HIGHMEM
> > +页不会被泄露(例如,在一个HIGHMEM页在交换缓存中但没有被任何人使用的情况下)。
> > +
> > +kswapd还需要知道它应该平衡哪些区。kswapd主要是在无法进行平衡的情况下需要的,可能
> > +是因为所有的分配请求都来自intr context,而所有的进程上下文都在睡眠。对于2.3,
>
> intr context -> 中断上下文
OK, Thanks!
>
> > +kswapd并不真正需要平衡高内存区,因为intr context并不请求高内存页。kswapd看zone
> > +结构体中的zone_wake_kswapd字段来决定一个区是否需要平衡。
> > +
> > +如果从进程内存和shm中偷取页面可以减轻该页面节点中任何区的内存压力,而该区的内存压力
> > +已经低于其水位,则会进行偷取。
> > +
> > +watemark[WMARK_MIN/WMARK_LOW/WMARK_HIGH]/low_on_memory/zone_wake_kswapd:
> > +这些是每个区的字段,用于确定一个区何时需要平衡。当页面数低于水位[WMARK_MIN]时,
> > +hysteric 的字段low_on_memory被设置。这个字段会一直被设置,直到空闲页数变成水位
> > +[WMARK_HIGH]。当low_on_memory被设置时,页面分配请求将尝试释放该区域的一些页面(如果
> > +请求中设置了GFP_WAIT)。与此正交的是,决定戳开kswapd以释放一些区的页。这个决定不是基于
>
> 正交 -> 相反。戳开 -> 唤醒。
OK, Thanks!
>
> > +hysteresis 的,而是当空闲页的数量低于watermark[WMARK_LOW]时就会进行;在这种情况下,
> > +zone_wake_kswapd也被设置。
> > +
> > +
> > +我所听到的(超棒的)想法:
> > +
> > +1. 动态实践应该影响平衡:可以跟踪一个区的失败请求的数量,并反馈到平衡方案中(jalvo@mbay.net)。
>
> 实践 -> 经历
OK, Thanks!

Thank you very much!

Thanks,
Yanteng
>
> > +
> > +2. 实现一个类似于replace_with_highmem()的replace_with_regular(),以保留dma页面。
> > +   (lkd@tantalophile.demon.co.uk)
> > diff --git a/Documentation/translations/zh_CN/vm/index.rst b/Documentation/translations/zh_CN/vm/index.rst
> > index 5fcdb75d8682..fc39f0d60318 100644
> > --- a/Documentation/translations/zh_CN/vm/index.rst
> > +++ b/Documentation/translations/zh_CN/vm/index.rst
> > @@ -22,10 +22,10 @@ TODO:待引用文档集被翻译完毕后请及时修改此处)
> >     :maxdepth: 1
> >
> >     active_mm
> > +   balance
> >
> >  TODOLIST:
> >  * arch_pgtable_helpers
> > -* balance
> >  * damon/index
> >  * free_page_reporting
> >  * frontswap
> >

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 2/3] docs_zh_CN: add active_mm translation
  2022-01-08  9:37     ` yanteng si
@ 2022-01-08 11:13       ` Tang Yizhou
  0 siblings, 0 replies; 11+ messages in thread
From: Tang Yizhou @ 2022-01-08 11:13 UTC (permalink / raw)
  To: yanteng si
  Cc: Jonathan Corbet, Alex Shi, Alex Shi, Yanteng Si, Huacai Chen,
	Jiaxun Yang, Linux Doc Mailing List

On 2022/1/8 17:37, yanteng si wrote:
> Tang Yizhou <tangyizhou@huawei.com> 于2022年1月7日周五 16:04写道:
>>
>> On 2022/1/7 10:40, Yanteng Si wrote:> Translatr .../vm/active_mm.rst into Chinese.
>>>
>>> Signed-off-by: Yanteng Si <siyanteng@loongson.cn>
>>> ---
>>>  .../translations/zh_CN/vm/active_mm.rst       | 85 +++++++++++++++++++
>>>  Documentation/translations/zh_CN/vm/index.rst |  2 +-
>>>  2 files changed, 86 insertions(+), 1 deletion(-)
>>>  create mode 100644 Documentation/translations/zh_CN/vm/active_mm.rst
>>>
>>> diff --git a/Documentation/translations/zh_CN/vm/active_mm.rst b/Documentation/translations/zh_CN/vm/active_mm.rst
>>> new file mode 100644
>>> index 000000000000..33f8193e6135
>>> --- /dev/null
>>> +++ b/Documentation/translations/zh_CN/vm/active_mm.rst
>>> @@ -0,0 +1,85 @@
>>> +.. include:: ../disclaimer-zh_CN.rst
>>> +
>>> +:Original: Documentation/vm/active_mm.rst
>>> +
>>> +:翻译:
>>> +
>>> + 司延腾 Yanteng Si <siyanteng@loongson.cn>
>>> +
>>> +:校译:
>>> +
>>> +
>>> +=========
>>> +Active MM
>>> +=========
>>> +
>>> +这是一封linux之父回复开发者的一封邮件,所以翻译时我尽量保持邮件格式的完整。
>>> +
>>> +::
>>> +
>>> + List:       linux-kernel
>>> + Subject:    Re: active_mm
>>> + From:       Linus Torvalds <torvalds () transmeta ! com>
>>> + Date:       1999-07-30 21:36:24
>>> +
>>> + 因为我并不经常写解释,所以已经抄送到linux-kernel邮件列表,而当我做这些,
>>> + 且更多的人在阅读它们时,我觉得棒极了。
>>> +
>>> + 1999年7月30日 星期五, David Mosberger 写道:
>>> + >
>>> + > 是否有一个简短的描述,说明task_struct中的
>>> + >  "mm" 和 "active_mm"应该如何使用? (如果
>>> + > 这个问题在邮件列表中讨论过,我表示歉意--我刚
>>> + > 刚度假回来,有一段时间没能关注linux-kernel了)。
>>> +
>>> + 基本上,新的设定是:
>>> +
>>> +  - 我们有“真实地址空间”和“匿名地址空间”。区别在于,匿名地址空间根本不关心用
>>> +    户级页表,所以当我们做上下文切换到匿名地址空间时,我们只是让以前的地址空间
>>> +    处于活动状态。
>>> +
>>> +    一个“匿名地址空间”的明显用途是任何不需要任何用户映射的线程--所有的内核线
>>> +    程基本上都属于这一类,但即使是“真正的”线程也可以暂时说在一定时间内它们不
>>> +    会对用户空间感兴趣,调度器不妨试着避免在切换VM状态上浪费时间。目前只有老
>>> +    式的bdflush sync能做到这一点。
>>> +
>>> +  - “tsk->mm” 指向 “真实地址空间”。对于一个匿名进程来说,tsk->mm将是NULL,
>>> +    其逻辑原因是匿名进程实际上根本就 “没有” 真正的地址空间。
>>> +
>>> +  - 然而,我们显然需要跟踪我们为这样的匿名用户“偷用”了哪个地址空间。为此,我们
>>> +    有 “tsk->active_mm”,它显示了当前活动的地址空间是什么。
>>> +
>>> +    规则是,对于一个有真实地址空间的进程(即tsk->mm是 non-NULL),active_mm
>>> +    显然必须与realone相同。
>>
>> please translate: realone
> OK, realone -> 真实地址

真实的mm

>>
>>> +
>>> +    对于一个匿名进程,tsk->mm == NULL,而tsk->active_mm是匿名进程运行时
>>> +    “借用”的mm。当匿名进程被调度走时,借用的地址空间被返回并清除。
>>> +
>>> + 为了支持所有这些,“struct mm_struct”现在有两个计数器:一个是 “mm_users”
>>> + 计数器,即有多少 “真正的地址空间用户”,另一个是 “mm_count”计数器,即 “lazy”
>>> + 用户(即匿名用户)的数量,如果有任何真正的用户,则加1。
>>> +
>>> + 通常情况下,至少有一个真正的用户,但也可能是真正的用户在另一个CPU上退出,而
>>> + 一个lazy的用户仍在活动,所以你实际上得到的情况是,你有一个地址空间 **只**
>>> + 被lazy的用户使用。这通常是一个短暂的生命周期状态,因为一旦这个线程被安排给一
>>> + 个真正的线程,这个 “僵尸” mm就会被释放,因为 “mm_count”变成了零。
>>> +
>>> + 另外,一个新的规则是,**没有人** 再把 “init_mm” 作为一个真正的MM了。
>>> + “init_mm”应该被认为只是一个 “没有其他上下文时的lazy上下文”,事实上,它主
>>> + 要是在启动时使用,当时还没有真正的VM被创建。因此,用来检查的代码
>>> +
>>> +   if (current->mm == &init_mm)
>>> +
>>> + 一般来说,应该仅执行
>>> +
>>> +   if (!current->mm)
>>> +
>>> + 反之(这更有意义--测试基本上是 “我们是否有一个用户环境”,并且通常由缺页
>>
>> 这里的翻译有问题。原文是current->mm == &init_mm的写法通常应当替换成!current->mm
> how about:
> 
> 一般来说,应该用
> 
> if (!current->mm)
> 
> 取代以上上面的写法(这更有意义--测试基本上是 “我们是否有一个用户环境”,并且通常由缺页

OK

> 
> 
>>
>>
>>> + 异常处理程序和类似的东西来完成)。
>>> +
>>> + 总之,我刚才在ftp.kernel.org上放了一个pre-patch-2.3.13-1,因为它稍微改
>>> + 变了接口以适应alpha(谁会想到呢,但alpha实际上最终有一个最难看的上下文切换
>>
>> 适应 -> 适配。 alpha -> alpah体系结构
>> 实际上最终有一个最难看的上下文切换代码 -> 上下文切换代码实际上最终是最丑陋的之一。
> OK, Thanks!
>>
>>> + 代码--不像其他架构的MM和寄存器状态是分开的,alpha的PALcode将两者连接起来,
>>> + 你需要同时切换两者)。
>>> +
>>> + (文档来源 http://marc.info/?l=linux-kernel&m=93337278602211&w=2)
>>> diff --git a/Documentation/translations/zh_CN/vm/index.rst b/Documentation/translations/zh_CN/vm/index.rst
>>> index 0fda40c602ac..5fcdb75d8682 100644
>>> --- a/Documentation/translations/zh_CN/vm/index.rst
>>> +++ b/Documentation/translations/zh_CN/vm/index.rst
>>> @@ -21,9 +21,9 @@ TODO:待引用文档集被翻译完毕后请及时修改此处)
>>>  .. toctree::
>>>     :maxdepth: 1
>>>
>>> +   active_mm
>>>
>>>  TODOLIST:
>>> -* active_mm
>>>  * arch_pgtable_helpers
>>>  * balance
>>>  * damon/index
>>>
>>
>> Thanks,
>> Tang

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [PATCH 3/3] docs/zh_CN: add balance translation
  2022-01-08  9:57     ` yanteng si
@ 2022-01-08 11:15       ` Tang Yizhou
  0 siblings, 0 replies; 11+ messages in thread
From: Tang Yizhou @ 2022-01-08 11:15 UTC (permalink / raw)
  To: yanteng si
  Cc: Jonathan Corbet, Alex Shi, Alex Shi, Yanteng Si, Huacai Chen,
	Jiaxun Yang, Linux Doc Mailing List

On 2022/1/8 17:57, yanteng si wrote:
> Tang Yizhou <tangyizhou@huawei.com> 于2022年1月7日周五 20:26写道:
>>
>> On 2022/1/7 10:40, Yanteng Si wrote:
>>> Translate .../vm/balance.rst into Chinese.
>>>
>>> Signed-off-by: Yanteng Si <siyanteng@loongson.cn>
>>> ---
>>>  .../translations/zh_CN/vm/balance.rst         | 81 +++++++++++++++++++
>>>  Documentation/translations/zh_CN/vm/index.rst |  2 +-
>>>  2 files changed, 82 insertions(+), 1 deletion(-)
>>>  create mode 100644 Documentation/translations/zh_CN/vm/balance.rst
>>>
>>> diff --git a/Documentation/translations/zh_CN/vm/balance.rst b/Documentation/translations/zh_CN/vm/balance.rst
>>> new file mode 100644
>>> index 000000000000..1cc7555650de
>>> --- /dev/null
>>> +++ b/Documentation/translations/zh_CN/vm/balance.rst
>>> @@ -0,0 +1,81 @@
>>> +.. include:: ../disclaimer-zh_CN.rst
>>> +
>>> +:Original: Documentation/vm/balance.rst
>>> +
>>> +:翻译:
>>> +
>>> + 司延腾 Yanteng Si <siyanteng@loongson.cn>
>>> +
>>> +:校译:
>>> +
>>> +
>>> +========
>>> +内存平衡
>>> +========
>>> +
>>> +2000年1月开始,作者:Kanoj Sarcar <kanoj@sgi.com>
>>> +
>>> +对于 !__GFP_HIGH 和 !__GFP_KSWAPD_RECLAIM 以及非 __GFP_IO 的分配,需要进行
>>> +内存平衡。
>>> +
>>> +调用者避免回收的第一个原因是调用者由于持有自旋锁或处于中断环境中而无法睡眠。第二个
>>> +原因可能是,调用者愿意在不产生页面回收开销的情况下失败分配。这可能发生在有0阶回退
>>
>> 失败分配 -> 分配失败
> OK, Thanks!
>>
>>> +选项的机会主义高阶分配请求中。在这种情况下,调用者可能也希望避免唤醒kswapd。
>>> +
>>> +__GFP_IO分配请求是为了防止文件系统死锁。
>>> +
>>> +在没有非睡眠分配请求的情况下,做平衡似乎是有害的。页面回收可以被懒散地启动,也就是
>>
>> 启动:这里可能可以翻译成“踢出”。大意就是不用的时候不启动。
> "kicked off" is a football term, In Chinese, it means 开球.
> 日常使用中都是用做:启动、执行
> eg: Apart from Nasa, missions from the UAE and China to Mars also
> kicked off last year.
> China kicked off the protection program in 2012.

OK. That's my fault!

Thanks,
Tang

> 
> 
>>> +说,只有在需要的时候(也就是空闲内存为0的区域),而不是让它成为一个主动的过程。
>>
>> 空闲内存为0的区域 -> 区域的空闲内存为0
> OK, Thanks!
>>
>>> +
>>> +也就是说,内核应该尝试从直接映射池中满足对直接映射页的请求,而不是回落到dma池中,
>>
>> 回落 -> 回退,这个应该是比较通行的翻译
> great!
>>
>>> +这样就可以保持dma池为dma请求(不管是不是原子的)所填充。类似的说法也适用于高内存
>>
>> 说法 -> 争论
> OK, Thanks!
>>
>>> +和直接映射的页面。相反,如果有很多空闲的dma页,最好是通过从dma池中分配一个来满足
>>> +常规的内存请求,而不是产生常规区域平衡的开销。
>>> +
>>> +在2.2中,只有当空闲页总数低于总内存的1/64时,才会启动内存平衡/页面回收。如果dma
>>
>> 这里翻译没问题。对照上文的kick off,可知就是踢出或者不运行的意思。
>>
>>> +和普通内存的比例合适,即使dma区完全空了,也很可能不会进行平衡。2.2已经在不同内存
>>
>> 普通内存:注意你在上文翻译了“常规区域”。普通和常规,两个词统一一下吧。
> OK, Thanks!
>>
>>> +大小的生产机器上运行,即使有这个问题存在,似乎也做得不错。在2.3中,由于HIGHMEM的
>>> +存在,这个问题变得更加严重。
>>> +
>>> +在2.3中,区域平衡可以用两种方式之一来完成:根据区域的大小(可能还有低级区域的大小),
>>
>> 可能还有 -> 可能是
> OK, Thanks!
>>
>>> +我们可以在初始化阶段决定在平衡任何区域时应该争取多少空闲页。好的方面是,在平衡的时
>>> +候,我们不需要看低级区的大小,坏的方面是,我们可能会因为忽略低级区可能较低的使用率
>>> +而做过于频繁的平衡。另外,只要对分配程序稍作修改,就有可能将memclass()宏简化为一
>>> +个简单的等式。
>>> +
>>> +另一个可能的解决方案是,我们只在一个区 **和** 其所有低级区的空闲内存低于该区及其
>>> +低级区总内存的1/64时进行平衡。这就解决了2.2的平衡问题,并尽可能地保持了与2.2行为
>>> +的接近。另外,平衡算法在各种架构上的工作方式也是一样的,这些架构有不同数量和类型的
>>> +内存区。如果我们想变得更花哨一点,我们可以在未来为不同区域的自由页面分配不同的权重。
>>> +
>>> +请注意,如果普通区的大小与dma区相比是巨大的,那么在决定是否平衡普通区的时候,考虑
>>> +空闲的dma页就变得不那么重要了。那么第一个解决方案就变得更有吸引力。
>>> +
>>> +所附的补丁实现了第二个解决方案。它还 “修复”了两个问题:首先,在低内存条件下,kswapd
>>> +被唤醒,就像2.2中的非睡眠分配。第二,HIGHMEM区也被平衡了,以便给replace_with_highmem()
>>> +一个争取获得HIGHMEM页的机会,同时确保HIGHMEM分配不会落回普通区。这也确保了HIGHMEM
>>> +页不会被泄露(例如,在一个HIGHMEM页在交换缓存中但没有被任何人使用的情况下)。
>>> +
>>> +kswapd还需要知道它应该平衡哪些区。kswapd主要是在无法进行平衡的情况下需要的,可能
>>> +是因为所有的分配请求都来自intr context,而所有的进程上下文都在睡眠。对于2.3,
>>
>> intr context -> 中断上下文
> OK, Thanks!
>>
>>> +kswapd并不真正需要平衡高内存区,因为intr context并不请求高内存页。kswapd看zone
>>> +结构体中的zone_wake_kswapd字段来决定一个区是否需要平衡。
>>> +
>>> +如果从进程内存和shm中偷取页面可以减轻该页面节点中任何区的内存压力,而该区的内存压力
>>> +已经低于其水位,则会进行偷取。
>>> +
>>> +watemark[WMARK_MIN/WMARK_LOW/WMARK_HIGH]/low_on_memory/zone_wake_kswapd:
>>> +这些是每个区的字段,用于确定一个区何时需要平衡。当页面数低于水位[WMARK_MIN]时,
>>> +hysteric 的字段low_on_memory被设置。这个字段会一直被设置,直到空闲页数变成水位
>>> +[WMARK_HIGH]。当low_on_memory被设置时,页面分配请求将尝试释放该区域的一些页面(如果
>>> +请求中设置了GFP_WAIT)。与此正交的是,决定戳开kswapd以释放一些区的页。这个决定不是基于
>>
>> 正交 -> 相反。戳开 -> 唤醒。
> OK, Thanks!
>>
>>> +hysteresis 的,而是当空闲页的数量低于watermark[WMARK_LOW]时就会进行;在这种情况下,
>>> +zone_wake_kswapd也被设置。
>>> +
>>> +
>>> +我所听到的(超棒的)想法:
>>> +
>>> +1. 动态实践应该影响平衡:可以跟踪一个区的失败请求的数量,并反馈到平衡方案中(jalvo@mbay.net)。
>>
>> 实践 -> 经历
> OK, Thanks!
> 
> Thank you very much!
> 
> Thanks,
> Yanteng
>>
>>> +
>>> +2. 实现一个类似于replace_with_highmem()的replace_with_regular(),以保留dma页面。
>>> +   (lkd@tantalophile.demon.co.uk)
>>> diff --git a/Documentation/translations/zh_CN/vm/index.rst b/Documentation/translations/zh_CN/vm/index.rst
>>> index 5fcdb75d8682..fc39f0d60318 100644
>>> --- a/Documentation/translations/zh_CN/vm/index.rst
>>> +++ b/Documentation/translations/zh_CN/vm/index.rst
>>> @@ -22,10 +22,10 @@ TODO:待引用文档集被翻译完毕后请及时修改此处)
>>>     :maxdepth: 1
>>>
>>>     active_mm
>>> +   balance
>>>
>>>  TODOLIST:
>>>  * arch_pgtable_helpers
>>> -* balance
>>>  * damon/index
>>>  * free_page_reporting
>>>  * frontswap
>>>

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2022-01-08 11:15 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-01-07  2:40 [PATCH 0/3] docs/zh_CN: add active_mm and balance translation Yanteng Si
2022-01-07  2:40 ` [PATCH 1/3] docs/zh_CN: add vm/index translation Yanteng Si
2022-01-07  8:03   ` Tang Yizhou
2022-01-07  2:40 ` [PATCH 2/3] docs_zh_CN: add active_mm translation Yanteng Si
2022-01-07  8:04   ` Tang Yizhou
2022-01-08  9:37     ` yanteng si
2022-01-08 11:13       ` Tang Yizhou
2022-01-07  2:40 ` [PATCH 3/3] docs/zh_CN: add balance translation Yanteng Si
2022-01-07 12:26   ` Tang Yizhou
2022-01-08  9:57     ` yanteng si
2022-01-08 11:15       ` Tang Yizhou

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.