Skip to content

Commit 72e7258

Browse files
author
Matthew Wilcox (Oracle)
committed
selftests/vm/transhuge-stress: Support file-backed PMD folios
Add a -f <filename> option to test PMD folios on files Signed-off-by: Matthew Wilcox (Oracle) <[email protected]>
1 parent 4687fdb commit 72e7258

File tree

1 file changed

+24
-11
lines changed

1 file changed

+24
-11
lines changed

tools/testing/selftests/vm/transhuge-stress.c

Lines changed: 24 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,17 @@
2626
#define PAGEMAP_PFN(ent) ((ent) & ((1ull << 55) - 1))
2727

2828
int pagemap_fd;
29+
int backing_fd = -1;
30+
int mmap_flags = MAP_ANONYMOUS | MAP_NORESERVE | MAP_PRIVATE;
31+
#define PROT_RW (PROT_READ | PROT_WRITE)
2932

3033
int64_t allocate_transhuge(void *ptr)
3134
{
3235
uint64_t ent[2];
3336

3437
/* drop pmd */
35-
if (mmap(ptr, HPAGE_SIZE, PROT_READ | PROT_WRITE,
36-
MAP_FIXED | MAP_ANONYMOUS |
37-
MAP_NORESERVE | MAP_PRIVATE, -1, 0) != ptr)
38+
if (mmap(ptr, HPAGE_SIZE, PROT_RW, MAP_FIXED | mmap_flags,
39+
backing_fd, 0) != ptr)
3840
errx(2, "mmap transhuge");
3941

4042
if (madvise(ptr, HPAGE_SIZE, MADV_HUGEPAGE))
@@ -60,6 +62,8 @@ int main(int argc, char **argv)
6062
size_t ram, len;
6163
void *ptr, *p;
6264
struct timespec a, b;
65+
int i = 0;
66+
char *name = NULL;
6367
double s;
6468
uint8_t *map;
6569
size_t map_len;
@@ -69,13 +73,23 @@ int main(int argc, char **argv)
6973
ram = SIZE_MAX / 4;
7074
else
7175
ram *= sysconf(_SC_PAGESIZE);
76+
len = ram;
77+
78+
while (++i < argc) {
79+
if (!strcmp(argv[i], "-h"))
80+
errx(1, "usage: %s [size in MiB]", argv[0]);
81+
else if (!strcmp(argv[i], "-f"))
82+
name = argv[++i];
83+
else
84+
len = atoll(argv[i]) << 20;
85+
}
7286

73-
if (argc == 1)
74-
len = ram;
75-
else if (!strcmp(argv[1], "-h"))
76-
errx(1, "usage: %s [size in MiB]", argv[0]);
77-
else
78-
len = atoll(argv[1]) << 20;
87+
if (name) {
88+
backing_fd = open(name, O_RDWR);
89+
if (backing_fd == -1)
90+
errx(2, "open %s", name);
91+
mmap_flags = MAP_SHARED;
92+
}
7993

8094
warnx("allocate %zd transhuge pages, using %zd MiB virtual memory"
8195
" and %zd MiB of ram", len >> HPAGE_SHIFT, len >> 20,
@@ -86,8 +100,7 @@ int main(int argc, char **argv)
86100
err(2, "open pagemap");
87101

88102
len -= len % HPAGE_SIZE;
89-
ptr = mmap(NULL, len + HPAGE_SIZE, PROT_READ | PROT_WRITE,
90-
MAP_ANONYMOUS | MAP_NORESERVE | MAP_PRIVATE, -1, 0);
103+
ptr = mmap(NULL, len + HPAGE_SIZE, PROT_RW, mmap_flags, backing_fd, 0);
91104
if (ptr == MAP_FAILED)
92105
err(2, "initial mmap");
93106
ptr += HPAGE_SIZE - (uintptr_t)ptr % HPAGE_SIZE;

0 commit comments

Comments
 (0)