Re: [PATCH v4] mm: introduce reference pages
From: Kirill A. Shutemov <hidden>
Date: 2021-06-28 12:25:01
Also in:
linux-arm-kernel, linux-doc, linux-mm
On Sat, Jun 19, 2021 at 02:20:02AM -0700, Peter Collingbourne wrote:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/mman.h>
#include <unistd.h>
constexpr unsigned char pattern_byte = 0xaa;
#define PAGE_SIZE 4096
_Alignas(PAGE_SIZE) static unsigned char pattern[PAGE_SIZE];
int main(int argc, char **argv) {
if (argc < 3)
return 1;
bool use_refpage = argc > 3;
size_t mmap_size = atoi(argv[1]);
size_t touch_size = atoi(argv[2]);
int refpage_fd;
if (use_refpage) {
memset(pattern, pattern_byte, PAGE_SIZE);
refpage_fd = syscall(448, pattern, 0);
}
for (unsigned i = 0; i != 1000; ++i) {
char *p;
if (use_refpage) {
p = (char *)mmap(0, mmap_size, PROT_READ | PROT_WRITE, MAP_PRIVATE,
refpage_fd, 0);
} else {
p = (char *)mmap(0, mmap_size, PROT_READ | PROT_WRITE,
MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
memset(p, pattern_byte, mmap_size);
}
for (unsigned j = 0; j < touch_size; j += PAGE_SIZE)
p[j] = 0;
munmap(p, mmap_size);
}
}I don't like the inteface. It is tied to PAGE_SIZE and this doesn't seem to be very future looking. How would it work with THPs? Maybe we should cosider passing down a filling pattern to kernel and let kernel allocate appropriate page size on read page fault? The pattern has to be power of 2 and limited in lenght. -- Kirill A. Shutemov