Closed
Description
I've got a program that is experiencing lots minor of page faults (>12000 in >100 ms runtime), doubling its runtime. I suspect the issue is because of excessive madvise(..., ..., MADV_DONTNEED) calls. The following excerpts from perf stat, strace output, and perf trace output show the evidence. The behaviour occurs on a nightly from one week ago, and the current stable. However I can't replicate this on an older beta I have (rustc 1.7.0-beta.3), where no such madvise calls, or minor page faults occur.
I can't find any madvise calls in the rust source code, so I'm a bit stumped in how to further investigate this issue.
perf stat output:
32.770167 task-clock (msec) # 0.446 CPUs utilized
4 context-switches # 0.122 K/sec
0 cpu-migrations # 0.000 K/sec
12,904 page-faults # 0.394 M/sec
104,812,609 cycles # 3.198 GHz
<not supported> stalled-cycles-frontend
<not supported> stalled-cycles-backend
128,721,915 instructions # 1.23 insns per cycle
25,328,091 branches # 772.901 M/sec
182,971 branch-misses # 0.72% of all branches
0.073417400 seconds time elapsed
strace output:
madvise(0x7fb41ec6c000, 65536, MADV_DONTNEED) = 0
open("/proc/19/stat", O_RDONLY|O_CLOEXEC) = 4
ioctl(4, FIOCLEX) = 0
read(4, "19 (ksoftirqd/3) S 2 0 0 0 -1 69"..., 65536) = 155
read(4, "", 65536) = 0
close(4) = 0
madvise(0x7fb41ec6c000, 65536, MADV_DONTNEED) = 0
open("/proc/19/status", O_RDONLY|O_CLOEXEC) = 4
ioctl(4, FIOCLEX) = 0
read(4, "Name:\tksoftirqd/3\nState:\tS (slee"..., 65536) = 606
read(4, "", 65536) = 0
close(4) = 0
madvise(0x7fb41ec6c000, 65536, MADV_DONTNEED) = 0
open("/proc/19/cmdline", O_RDONLY|O_CLOEXEC) = 4
ioctl(4, FIOCLEX) = 0
read(4, "", 65536) = 0
close(4) = 0
perf trace output:
12.150 ( 0.003 ms): psq/11143 read(arg0: 4, arg1: 140038575144960, arg2: 65536, arg3: 140038578897296, arg4: 0, arg5: 7976) = 155
12.153 ( 0.001 ms): psq/11143 read(arg0: 4, arg1: 140038575144960, arg2: 65536, arg3: 140038578897296, arg4: 0, arg5: 0) = 0
12.155 ( 0.001 ms): psq/11143 close(arg0: 4, arg1: 256, arg2: 140731978476463, arg3: 140038578897296, arg4: 0, arg5: 0) = 0
12.160 ( 0.004 ms): psq/11143 madvise(arg0: 140038575144960, arg1: 65536, arg2: 4, arg3: -4194304, arg4: 140038574702592, arg5: 140731978474016) = 0
12.166 ( 0.002 ms): psq/11143 open(arg0: 140038575052128, arg1: 524288, arg2: 438, arg3: 140731978478280, arg4: 0, arg5: 0) = 4
12.168 ( 0.001 ms): psq/11143 ioctl(arg0: 4, arg1: 21585, arg2: 438, arg3: 140731978478280, arg4: 0, arg5: 0) = 0
12.170 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x12e] => //anon@0x7f5d4586c000 (d.)
12.171 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d4586d000 (d.)
12.173 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d4586e000 (d.)
12.174 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d4586f000 (d.)
12.176 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d45870000 (d.)
12.177 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d45871000 (d.)
12.179 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d45872000 (d.)
12.180 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d45873000 (d.)
12.182 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d45874000 (d.)
12.183 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d45875000 (d.)
12.185 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d45876000 (d.)
12.186 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d45877000 (d.)
12.188 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d45878000 (d.)
12.189 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d45879000 (d.)
12.191 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d4587a000 (d.)
12.193 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d4587b000 (d.)
12.200 ( 0.007 ms): psq/11143 read(arg0: 4, arg1: 140038575144960, arg2: 65536, arg3: 8, arg4: 2097865012304223517, arg5: 768) = 612
12.212 ( 0.001 ms): psq/11143 read(arg0: 4, arg1: 140038575144960, arg2: 65536, arg3: 6, arg4: 26, arg5: -7900185713307138509) = 0
12.214 ( 0.001 ms): psq/11143 close(arg0: 4, arg1: 0, arg2: 0, arg3: 6, arg4: 2097865012304223517, arg5: -7900185713307138509) = 0
12.219 ( 0.003 ms): psq/11143 madvise(arg0: 140038575144960, arg1: 65536, arg2: 4, arg3: -4194304, arg4: 140038574702592, arg5: 140731978467840) = 0
12.226 ( 0.003 ms): psq/11143 open(arg0: 140038575052256, arg1: 524288, arg2: 438, arg3: 140731978477464, arg4: 0, arg5: 0) = 4
12.228 ( 0.001 ms): psq/11143 ioctl(arg0: 4, arg1: 21585, arg2: 438, arg3: 140731978477464, arg4: 0, arg5: 0) = 0
12.229 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x12e] => //anon@0x7f5d4586c000 (d.)
12.231 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d4586d000 (d.)
12.232 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d4586e000 (d.)
12.234 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d4586f000 (d.)
12.235 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d45870000 (d.)
12.237 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d45871000 (d.)
12.238 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d45872000 (d.)
12.240 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d45873000 (d.)
12.242 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d45874000 (d.)
12.243 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d45875000 (d.)
12.245 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d45876000 (d.)
12.246 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d45877000 (d.)
12.248 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d45878000 (d.)
12.249 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d45879000 (d.)
12.251 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d4587a000 (d.)
12.253 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d4587b000 (d.)
12.255 ( 0.001 ms): psq/11143 read(arg0: 4, arg1: 140038575144960, arg2: 65536, arg3: 140038578897296, arg4: 0, arg5: 7976) = 0
12.256 ( 0.001 ms): psq/11143 close(arg0: 4, arg1: 65536, arg2: 0, arg3: 140038578897296, arg4: 0, arg5: 7976) = 0
12.261 ( 0.003 ms): psq/11143 madvise(arg0: 140038575144960, arg1: 65536, arg2: 4, arg3: -4194304, arg4: 140038574702592, arg5: 140731978474016) = 0
12.267 ( 0.003 ms): psq/11143 open(arg0: 140038574969424, arg1: 524288, arg2: 438, arg3: 0, arg4: 0, arg5: 0) = 4
12.269 ( 0.001 ms): psq/11143 ioctl(arg0: 4, arg1: 21585, arg2: 438, arg3: 0, arg4: 0, arg5: 0 ) = 0
12.270 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x12e] => //anon@0x7f5d4586c000 (d.)
12.272 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d4586d000 (d.)
12.273 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d4586e000 (d.)
12.275 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d4586f000 (d.)
12.276 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d45870000 (d.)
12.278 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d45871000 (d.)
12.279 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d45872000 (d.)
12.281 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d45873000 (d.)
12.282 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d45874000 (d.)
12.284 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d45875000 (d.)
12.285 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d45876000 (d.)
12.287 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d45877000 (d.)
12.288 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d45878000 (d.)
12.290 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d45879000 (d.)
12.292 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d4587a000 (d.)
12.293 ( 0.000 ms): psq/11143 minfault [/lib64/libc-2.22.so@__memset_avx2+0x188] => //anon@0x7f5d4587b000 (d.)
Metadata
Metadata
Assignees
Labels
No labels