summaryrefslogtreecommitdiff
path: root/cmd/ioworkload
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-05-20 07:23:45 +0300
committerPaul Buetow <paul@buetow.org>2026-05-20 07:23:45 +0300
commitdf1225efe494cc81513cf98e93891376e45f9615 (patch)
tree8fe131ba9ae5737022f26fcd60e662c1660329c6 /cmd/ioworkload
parent11a8642b7035ff558fb84d7761e93525c84e4908 (diff)
task 07: add KindMem and separate address-space byte accounting
Diffstat (limited to 'cmd/ioworkload')
-rw-r--r--cmd/ioworkload/scenario_mmap.go28
-rw-r--r--cmd/ioworkload/scenarios.go1
2 files changed, 29 insertions, 0 deletions
diff --git a/cmd/ioworkload/scenario_mmap.go b/cmd/ioworkload/scenario_mmap.go
index e7b9f02..0d953d2 100644
--- a/cmd/ioworkload/scenario_mmap.go
+++ b/cmd/ioworkload/scenario_mmap.go
@@ -7,6 +7,8 @@ import (
"unsafe"
)
+const mremapMayMove = 1
+
// mmapBasic creates a file-backed shared mapping.
// mmap(2) allows closing the fd after mapping without invalidating the mapping.
func mmapBasic() error {
@@ -108,3 +110,29 @@ func mmapMsyncInvalidFlags() error {
}
return nil
}
+
+// mmapMremapMunmap remaps an anonymous mapping and unmaps the resized region.
+// It is used to validate enter_mremap/enter_munmap tracing and memory-byte
+// accounting separation from I/O bytes.
+func mmapMremapMunmap() error {
+ const pageSize = 4096
+
+ mapped, err := syscall.Mmap(-1, 0, pageSize, syscall.PROT_READ|syscall.PROT_WRITE, syscall.MAP_PRIVATE|syscall.MAP_ANON)
+ if err != nil {
+ return fmt.Errorf("mmap: %w", err)
+ }
+
+ oldAddr := uintptr(unsafe.Pointer(&mapped[0]))
+ newSize := uintptr(pageSize * 2)
+ newAddr, _, errno := syscall.Syscall6(syscall.SYS_MREMAP, oldAddr, uintptr(len(mapped)), newSize, mremapMayMove, 0, 0)
+ if errno != 0 {
+ _ = syscall.Munmap(mapped)
+ return fmt.Errorf("mremap: %w", errno)
+ }
+
+ _, _, errno = syscall.Syscall(syscall.SYS_MUNMAP, newAddr, newSize, 0)
+ if errno != 0 {
+ return fmt.Errorf("munmap: %w", errno)
+ }
+ return nil
+}
diff --git a/cmd/ioworkload/scenarios.go b/cmd/ioworkload/scenarios.go
index 6a6e40b..8f4eef2 100644
--- a/cmd/ioworkload/scenarios.go
+++ b/cmd/ioworkload/scenarios.go
@@ -99,6 +99,7 @@ var scenarios = map[string]func() error{
"mmap-basic": mmapBasic,
"mmap-msync-sync": mmapMsyncSync,
"mmap-msync-invalid-flags": mmapMsyncInvalidFlags,
+ "mmap-mremap-munmap": mmapMremapMunmap,
"copy-file-range-basic": copyFileRangeBasic,
"copy-file-range-bad-dst-fd": copyFileRangeBadDstFd,
"truncate-basic": truncateBasic,