Open iaGuoZhi opened 2 years ago
Linux中大页需要进行compaction,来获得连续的地址空间来分配大页。但是存在着unmovable pages(是因为kernel address space是direct mapping,没有页表。因此kernel object所在的页都是unmovable)。Linux应对这个问题的解决办法是在物理内存层次对内核与用户态进行划分。一个page block(hugepage大小,eg, 2M)要么是movable(分配用户态的页),要么是unmovable(分配内核态的页)。不过尽管如此,Linux中大页在compaction进行时的时延仍然不能够接受。
作者通过分析发现了是由于unmovable page以及当前实现导致的几个问题引起的:
这些问题的背后的核心就是内核没有对hybrid page block 进行处理。在第一个问题,如果内核能够识别hybrid block,就能够在hybrid block中分配空闲页作为unmovable page,而不用pollute 所有的blocks。对于第二个问题,如果内核能够识别hybrid block,就不会在要分配hugepage的时候,对这个hybrid block进行无效的compaction。
因此作者在Linux上实现了Illuminator,能够针对hybrid block进行处理。根据测试,在overall performance测试中,mysql最差情况下的查询延迟从1-4s下降到了0.1s以下。
Linux中大页需要进行compaction,来获得连续的地址空间来分配大页。但是存在着unmovable pages(是因为kernel address space是direct mapping,没有页表。因此kernel object所在的页都是unmovable)。Linux应对这个问题的解决办法是在物理内存层次对内核与用户态进行划分。一个page block(hugepage大小,eg, 2M)要么是movable(分配用户态的页),要么是unmovable(分配内核态的页)。不过尽管如此,Linux中大页在compaction进行时的时延仍然不能够接受。
作者通过分析发现了是由于unmovable page以及当前实现导致的几个问题引起的:
这些问题的背后的核心就是内核没有对hybrid page block 进行处理。在第一个问题,如果内核能够识别hybrid block,就能够在hybrid block中分配空闲页作为unmovable page,而不用pollute 所有的blocks。对于第二个问题,如果内核能够识别hybrid block,就不会在要分配hugepage的时候,对这个hybrid block进行无效的compaction。
因此作者在Linux上实现了Illuminator,能够针对hybrid block进行处理。根据测试,在overall performance测试中,mysql最差情况下的查询延迟从1-4s下降到了0.1s以下。