Hi YanTeng, I build it, and find some small problems. On Thu, Jun 03, 2021 at 09:58:02AM +0800, Yanteng Si wrote: > Translate Documentation/core-api/cachetlb.rst into Chinese. > > Signed-off-by: Yanteng Si > --- > v2: > > * add 校译者(proofreading) sign. > If you don't want me to do this, please let me know. > > * Modified some words under Xiangcheng's and Alex's advices. > > .../translations/zh_CN/core-api/cachetlb.rst | 337 ++++++++++++++++++ > .../translations/zh_CN/core-api/index.rst | 7 +- > 2 files changed, 343 insertions(+), 1 deletion(-) > create mode 100644 Documentation/translations/zh_CN/core-api/cachetlb.rst > > diff --git a/Documentation/translations/zh_CN/core-api/cachetlb.rst b/Documentation/translations/zh_CN/core-api/cachetlb.rst > new file mode 100644 > index 000000000000..d37653e029d8 > --- /dev/null > +++ b/Documentation/translations/zh_CN/core-api/cachetlb.rst [...] > +5) ``void update_mmu_cache(struct vm_area_struct *vma, > + unsigned long address, pte_t *ptep)`` > + > + 在每个页面故障结束时,这个程序被调用,以告诉体系结构特定的代码,在 > + 软件页表中,在地址空间“vma->vm_mm”的虚拟地址“地址”处,现在存在 > + 一个翻译。 > + > + 可以用它所选择的任何方式使用这个信息来进行移植。例如,它可以使用这 > + 个事件来为软件管理的TLB配置预装TLB转换。目前sparc64移植就是这么干 > + 的。 > + > + [...] > +3) ``void flush_cache_range(struct vm_area_struct *vma, > + unsigned long start, unsigned long end)`` > + > + 在这里,我们要从缓存中刷新一个特定范围的(用户)虚拟地址。运行 > + 后,在“start”到“end-1”范围内的虚拟地址的“vma->vm_mm”的缓存中 > + 将没有页表项。 > + > + “vma”是被用于该区域的备份存储。主要是用于munmap()类型的操作。 > + > + 提供这个接口是希望端口能够找到一个合适的有效方法来从缓存中删 > + 除多个页面大小的区域, 而不是让内核为每个可能被修改的页表项调 > + 用 flush_cache_page (见下文)。 > + > + [...] > +6) ``void flush_cache_vmap(unsigned long start, unsigned long end)`` > + ``void flush_cache_vunmap(unsigned long start, unsigned long end)`` > + > + 在这里,在这两个接口中,我们从缓存中刷新一个特定范围的(内核) > + 虚拟地址。运行后,在“start”到“end-1”范围内的虚拟地址的内核地 > + 址空间的缓存中不会有页表项。 > + > + 这两个程序中的第一个是在vmap_range()安装了页表项之后调用的。 > + 第二个是在vunmap_range()删除页表项之前调用的。 > + For above three point, annotation text is not indented correctly. They are different from others. > +还有一类cpu缓存问题,目前需要一套完全不同的接口来正确处理。最大 > +的问题是处理器的数据缓存中的虚拟别名。 > + > +.. 译者有话说: And this did not be rendered, so use below? .. note:: 译者有话说: > + > + 这段内容有些晦涩,为了减轻中文阅读压力,特作此译注。 > + > + 别名(alias)属于缓存一致性问题,当不同的虚拟地址映射相同的 > + 物理地址,而这些虚拟地址的index不同,此时就发生了别名现象(多 > + 个虚拟地址被称为别名)。通俗点来说就是指同一个物理地址的数据被 > + 加载到不同的cacheline中就会出现别名现象。 > + > + 常见的解决方法有两种:第一种是硬件维护一致性,设计特定的cpu电 > + 路来解决问题(例如设计为PIPT的cache);第二种是软件维护一致性, > + 就是下面介绍的sparc的解决方案——页面染色,涉及的技术细节太多, > + 译者不便展开,请读者自行查阅相关资料。 > + All others are good. Reviewed-by: Wu XiangCheng Thanks! Wu X.C.