page_owner.rst (c363059c52ced4e3d00d2b0c1dcadcb9f2cbc352) | page_owner.rst (799fb82aa132fa3a3886b7872997a5a84e820062) |
---|---|
1:Original: Documentation/mm/page_owner.rst 2 3:翻译: 4 5 司延腾 Yanteng Si <siyanteng@loongson.cn> 6 7:校译: 8 --- 20 unchanged lines hidden (view full) --- 29page owner在默认情况下是禁用的。所以,如果你想使用它,你需要在你的启动cmdline 30中加入"page_owner=on"。如果内核是用page owner构建的,并且由于没有启用启动 31选项而在运行时禁用page owner,那么运行时的开销是很小的。如果在运行时禁用,它不 32需要内存来存储所有者信息,所以没有运行时内存开销。而且,页面所有者在页面分配器的 33热路径中只插入了两个不可能的分支,如果不启用,那么分配就会像没有页面所有者的内核 34一样进行。这两个不可能的分支应该不会影响到分配的性能,特别是在静态键跳转标签修补 35功能可用的情况下。以下是由于这个功能而导致的内核代码大小的变化。 36 | 1:Original: Documentation/mm/page_owner.rst 2 3:翻译: 4 5 司延腾 Yanteng Si <siyanteng@loongson.cn> 6 7:校译: 8 --- 20 unchanged lines hidden (view full) --- 29page owner在默认情况下是禁用的。所以,如果你想使用它,你需要在你的启动cmdline 30中加入"page_owner=on"。如果内核是用page owner构建的,并且由于没有启用启动 31选项而在运行时禁用page owner,那么运行时的开销是很小的。如果在运行时禁用,它不 32需要内存来存储所有者信息,所以没有运行时内存开销。而且,页面所有者在页面分配器的 33热路径中只插入了两个不可能的分支,如果不启用,那么分配就会像没有页面所有者的内核 34一样进行。这两个不可能的分支应该不会影响到分配的性能,特别是在静态键跳转标签修补 35功能可用的情况下。以下是由于这个功能而导致的内核代码大小的变化。 36 |
37尽管启用page owner会使内核的大小增加几千字节,但这些代码大部分都在页面分配器和 38热路径之外。构建带有page owner的内核,并在需要时打开它,将是调试内核内存问题的 39最佳选择。 | 37- 没有page owner:: |
40 | 38 |
39 text data bss dec hex filename 40 48392 2333 644 51369 c8a9 mm/page_alloc.o 41 42- 有page owner:: 43 44 text data bss dec hex filename 45 48800 2445 644 51889 cab1 mm/page_alloc.o 46 6662 108 29 6799 1a8f mm/page_owner.o 47 1025 8 8 1041 411 mm/page_ext.o 48 49虽然总共增加了8KB的代码,但page_alloc.o增加了520字节,其中不到一半是在hotpath 50中。构建带有page owner的内核,并在需要时打开它,将是调试内核内存问题的最佳选择。 51 |
|
41有一个问题是由实现细节引起的。页所有者将信息存储到struct page扩展的内存中。这 42个内存的初始化时间比稀疏内存系统中的页面分配器启动的时间要晚一些,所以,在初始化 43之前,许多页面可以被分配,但它们没有所有者信息。为了解决这个问题,这些早期分配的 44页面在初始化阶段被调查并标记为分配。虽然这并不意味着它们有正确的所有者信息,但至 45少,我们可以更准确地判断该页是否被分配。在2GB内存的x86-64虚拟机上,有13343 46个早期分配的页面被捕捉和标记,尽管它们大部分是由结构页扩展功能分配的。总之,在这 47之后,没有任何页面处于未追踪状态。 48 49使用方法 50======== 51 521) 构建用户空间的帮助:: 53 | 52有一个问题是由实现细节引起的。页所有者将信息存储到struct page扩展的内存中。这 53个内存的初始化时间比稀疏内存系统中的页面分配器启动的时间要晚一些,所以,在初始化 54之前,许多页面可以被分配,但它们没有所有者信息。为了解决这个问题,这些早期分配的 55页面在初始化阶段被调查并标记为分配。虽然这并不意味着它们有正确的所有者信息,但至 56少,我们可以更准确地判断该页是否被分配。在2GB内存的x86-64虚拟机上,有13343 57个早期分配的页面被捕捉和标记,尽管它们大部分是由结构页扩展功能分配的。总之,在这 58之后,没有任何页面处于未追踪状态。 59 60使用方法 61======== 62 631) 构建用户空间的帮助:: 64 |
54 cd tools/vm | 65 cd tools/mm |
55 make page_owner_sort 56 572) 启用page owner: 添加 "page_owner=on" 到 boot cmdline. 58 593) 做你想调试的工作。 60 614) 分析来自页面所有者的信息:: 62 --- 108 unchanged lines hidden --- | 66 make page_owner_sort 67 682) 启用page owner: 添加 "page_owner=on" 到 boot cmdline. 69 703) 做你想调试的工作。 71 724) 分析来自页面所有者的信息:: 73 --- 108 unchanged lines hidden --- |