diff options
Diffstat (limited to 'integrationtests')
| -rw-r--r-- | integrationtests/mmap_test.go | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/integrationtests/mmap_test.go b/integrationtests/mmap_test.go index 74eb14e..ff3ad55 100644 --- a/integrationtests/mmap_test.go +++ b/integrationtests/mmap_test.go @@ -11,6 +11,11 @@ const ( var mmapTraceArgs = []string{"-trace-syscalls", "openat,write,close,mmap,msync,mremap,munmap"} +// mmapMemoryLockTraceArgs traces the memory-locking cluster. mlock/mlock2/ +// munlock are KindMem and mlockall/munlockall are KindNull; in all cases only +// the sys_enter_ tracepoint presence is asserted (return is UNCLASSIFIED). +var mmapMemoryLockTraceArgs = []string{"-trace-syscalls", "mlock,mlock2,munlock,mlockall,munlockall"} + func TestMmapBasic(t *testing.T) { runScenarioResultWithIorArgs(t, "mmap-basic", []ExpectedEvent{ { @@ -78,6 +83,41 @@ func TestMmapMremapMunmap(t *testing.T) { }, 0) } +// TestMmapMemoryLock asserts the memory-locking cluster fires its enter +// tracepoints end-to-end. mlock/mlock2/munlock (KindMem) and mlockall/ +// munlockall (KindNull) all return UNCLASSIFIED, so enter-presence is the +// correct check. mlock/mlock2/mlockall may hit EPERM/ENOMEM under a low +// RLIMIT_MEMLOCK, but the sys_enter_ tracepoint fires regardless. +func TestMmapMemoryLock(t *testing.T) { + runScenarioResultWithIorArgs(t, "mmap-memory-lock", []ExpectedEvent{ + { + Tracepoint: "enter_mlock", + Comm: "ioworkload", + MinCount: 1, + }, + { + Tracepoint: "enter_munlock", + Comm: "ioworkload", + MinCount: 1, + }, + { + Tracepoint: "enter_mlock2", + Comm: "ioworkload", + MinCount: 1, + }, + { + Tracepoint: "enter_mlockall", + Comm: "ioworkload", + MinCount: 1, + }, + { + Tracepoint: "enter_munlockall", + Comm: "ioworkload", + MinCount: 1, + }, + }, mmapMemoryLockTraceArgs) +} + func TestMmapMremapMunmapAddressSpaceBytesInParquet(t *testing.T) { h := newTestHarness(t) h.WorkloadEnv = []string{mmapWorkloadStartupEnv} |
