Created
October 3, 2020 22:22
-
-
Save azat/12ba2c825b710653ece34dba7f926ece to your computer and use it in GitHub Desktop.
test-MADV_DONTNEED.c
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // Gist to check possible issues with MADV_DONTNEED | |
| // For example it does not supported by qemu user | |
| // There is a patch for this [1], but it hasn't been applied. | |
| // [1]: https://lists.gnu.org/archive/html/qemu-devel/2018-08/msg05422.html | |
| #include <sys/mman.h> | |
| #include <stdio.h> | |
| #include <stddef.h> | |
| #include <assert.h> | |
| #include <string.h> | |
| int main(int argc, char **argv) | |
| { | |
| void *addr = mmap(NULL, 1<<16, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0); | |
| if (addr == MAP_FAILED) { | |
| perror("mmap"); | |
| return 1; | |
| } | |
| memset(addr, 'A', 1<<16); | |
| if (!madvise(addr, 1<<16, MADV_DONTNEED)) { | |
| puts("MADV_DONTNEED does not return error. Check memory."); | |
| for (int i = 0; i < 1<<16; ++i) { | |
| assert(((unsigned char *)addr)[i] == 0); | |
| } | |
| } else { | |
| perror("madvise"); | |
| } | |
| if (munmap(addr, 1<<16)) { | |
| perror("munmap"); | |
| return 1; | |
| } | |
| return 0; | |
| } |
Author
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
There is also https://patchwork.kernel.org/patch/10576637/ but it hasn't been applied