Skip to content

Instantly share code, notes, and snippets.

@azat
Last active December 16, 2023 17:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save azat/aad8c509355970e3f09fe90279f7825d to your computer and use it in GitHub Desktop.
Save azat/aad8c509355970e3f09fe90279f7825d to your computer and use it in GitHub Desktop.
MADV_FREE vs MADV_DONTNEED benchmark
#!/usr/bin/env python3
import mmap
import time
NUMBER_VMAS = 10000
VMA_SIZE = 1<<20
buffer = b'0' * VMA_SIZE
def make_vma():
vma = mmap.mmap(-1, VMA_SIZE, mmap.MAP_PRIVATE, mmap.MADV_NOHUGEPAGE)
vma.write(buffer)
return vma
def elapsed_ns(func):
start = time.time_ns()
func()
end = time.time_ns()
return end - start
def main():
vmas = [make_vma() for _ in range(NUMBER_VMAS)]
def run_MADV_FREE():
for vma in vmas:
vma.madvise(mmap.MADV_FREE)
e = elapsed_ns(run_MADV_FREE)
print('MADV_FREE: {:.3f} us'.format(e / 1e3))
del vmas
vmas = [make_vma() for _ in range(NUMBER_VMAS)]
def run_MADV_DONTNEED():
for vma in vmas:
vma.madvise(mmap.MADV_DONTNEED)
e = elapsed_ns(run_MADV_DONTNEED)
print('MADV_DONTNEED: {:.3f} us'.format(e / 1e3))
del vmas
if __name__ == "__main__":
main()
@azat
Copy link
Author

azat commented Dec 16, 2023

$ ./bench-madvise.py
MADV_FREE: 149425.587 us
MADV_DONTNEED: 204954.892 us

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment