# Day 26 Page migration (一)

文件

.. _page_migration:

========
分页迁移
========

页面迁移可以在程序运行时,在 NUMA 系统中的不同节点间,
移动分页的实体记忆体位置;这意味着,程序所看到的虚拟位址是不变的。
然而,系统会重新排列这些分页的实体位置。

分页迁移的主要目的是,把分页移动到,
与存取该分页的程序执行时,所在的处理器较近的位置,
以减少存取记忆体的延迟。

分页迁移使一个程序可以透过 MF_MOVE 和 MF_MOVE_ALL 选项手
动重新定位其分页所在的节点,
并同时透过 mbind() 来设置新的记忆体策略。
程序分页也可以透过 sys_migrate_pages(),从另一个程序重新定位过来。
migrate_pages() 函数接受两组节点为参数,
并从来源节点移动分页到目的节点。
分页迁移功能由 Andi Kleen 的 numactl 工具包提供
(需要 0.9.3 以上的版本。
从ftp://oss.sgi.com/www/projects/libnuma/download/ 取得)。
numactl 提供 libnuma,
libnuma 提供了与其它 numa 功能相似的分页迁移介面。
cat ``/proc/<pid>/numa_maps`` 可以简单的查看程序所拥有的分页位在何处。
另请参阅 proc(5) man page 中 numa_maps 的文件。

手动迁移是很有用的,
例如排程器已重新定位程序到一个较远的处理器节点上的这个情境。
批次排程器或是管理程序可能会侦测到这个状况,
并移动程序分页更接近新的处理器。
核心本身只提供手动的分页迁移。
自动分页迁移可能可以透过,搬移分页的使用者空间程序来实作。
“move_pages” 这个特殊的函数能够在程序内移动个别的分页。
NUMA 分析器(profiler)可能会,
例如(f.e. for example) 获取频繁的、非节点的存取日志(log)
并可能使用日志结果将分页移动到更有利的位置。

较大的系统通常使用 cpuset 将系统划分为多个节点区块(section)。
Paul Jackson 为 cpuset 配备了
当一个任务正在被移动到另一个 cpuset 上,
也能移动分页的能力
(见文件 /admin-guide/cgroup-v1/cpusets.rst)。
Cpusets 使得程序局部性可以自动化。
如果任务被移至一个新的 cpuset,它的所有分页也随之移动,
以使该过程的性能不会显着下降。
如果 cpuset 允许的记忆体节点被更改,cpuset 内的程序分页也会被移动。

分页迁移能够在一个节点群组中,
保留分页的相对位置,以供所有的迁移技术使用,
即使是在程序迁移後,
也会保留一个生成的特定记忆体分配模式,
这是必要的步骤,以保留记忆体延迟。
迁移後程序将以大约相同的性能运行。

分页迁移分几个步骤进行。
首先是高阶层地描述试图从核心使用 migrate_pages() 的步骤;
(对於使用者空间的使用,
请参阅上面提到的 Andi Kleen 的 numactl 工具包)
然後是低阶层地描述细节是如何运作的。

後记

今天比较晚开始,先附上今天阅读的翻译,明天再来详细的研究研究!
今天的文件很多子句接来接去的,真的有难懂XDDD
像是 Page migration allows the preservation of the relative location of pages within a group of nodes for all migration techniques which will preserve a particular memory allocation pattern generated even after migrating a process

  • The main intend of page migration ... 应该改为 main intension,intend 好像只有动词用法。
  • ... allowed memory nodes ... 可能是和 cgroup 有关的用语吗(?

<<:  连续 30 天 玩玩看 ProtoPie - Day 20

>>:  Day20 - 物理模拟篇 - 弹力、引力与磁力IV - 成为Canvas Ninja ~ 理解2D渲染的精髓

【15】图片标准化 [0,1] 与 [-1,+1] 的差别实验

Colab连结 昨天我们实验了有无做 Normalization 的差异,但我在 stackover...

与Arduino接起来

前面提到Raspberry pi有哪些传输方式 IIC/SPI/1-wire/UART 书上建议可以...

JavaScript入门 Day15阵列

今天终於没有要讲数字的语法了,要讲的是阵列 那J个是什麽呢,他是方便存放资料的资料型态 今天若是有多...

Day 04:看看 Angular CLI 对我们做了什麽?认识专案架构

今天,我们要来看看在使用 Angular CLI 後,专案的架构会长什麽样? angular.jso...

【第24天】部署API服务-GCP架设VM(二)

摘要 作业流程 安装环境/套件 上传打包後模型 介绍Vim编辑器 惨痛经历 内容 作业流程(今日进度...