Skip to contentSkip to conversation

Some tests fail with over-commit disabled

LTP Mason 1 participant 2 messages May 18, 2016

lore
Share & tools
lore

Mason

author
#0 lore raw

Hello,

On a system with 1.5 GB of memory and no swap:

$ cat /proc/meminfo 
MemTotal:        1555140 kB
MemFree:         1472304 kB
MemAvailable:    1467212 kB
Buffers:               0 kB
Cached:            71080 kB
SwapCached:            0 kB
Active:            10300 kB
Inactive:          61368 kB
Active(anon):      10300 kB
Inactive(anon):    61368 kB
Active(file):          0 kB
Inactive(file):        0 kB
Unevictable:           0 kB
Mlocked:               0 kB
HighTotal:        794624 kB
HighFree:         721836 kB
LowTotal:         760516 kB
LowFree:          750468 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:           520 kB
Mapped:             1460 kB
Shmem:             71080 kB
Slab:               5264 kB
SReclaimable:       1264 kB
SUnreclaim:         4000 kB
KernelStack:         272 kB
PageTables:           68 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:      777568 kB
Committed_AS:      72764 kB
VmallocTotal:     245760 kB
VmallocUsed:       18708 kB
VmallocChunk:     226272 kB

Some tests PASS when over-commit is enabled, but FAIL when it is disabled.

$ sysctl -w vm.overcommit_memory=0 && msgctl09
vm.overcommit_memory = 0
msgctl09    1  TPASS  :  msgctl09 ran successfully!
$ sysctl -w vm.overcommit_memory=2 && msgctl09
vm.overcommit_memory = 2
Fork failure in the second child of child group 4
Fork failure in the first child of child group 10
msgctl09    1  TFAIL  :  msgctl09.c:203: Child exit status = 1
Fork failure in the first child of child group 14
Fork failure in the second child of child group 15
Fork failure in the first child of child group 3
Fork failure in the second child of child group 2
Fork failure in the second child of child group 8
Fork failure in the second child of child group 7
/tmp$ Fork failure in the first child of child group 6
Fork failure in the first child of child group 11
Fork failure in the first child of child group 9
Fork failure in the first child of child group 12
Fork failure in the first child of child group 1
Fork failure in the first child of child group 0

Raising the overcommit amount doesn't seem to help (much).

$ sysctl -w vm.overcommit_ratio=95
$ grep Commit /proc/meminfo 
CommitLimit:     1477380 kB
Committed_AS:      72764 kB
$ sysctl -w vm.overcommit_memory=2 && msgctl09
vm.overcommit_memory = 2
Fork failure in the second child of child group 9
msgctl09    1  TFAIL  :  msgctl09.c:203: Child exit status = 1
Fork failure in the second child of child group 4
/tmp$ Fork failure in the second child of child group 1
Fork failure in the second child of child group 15
Fork failure in the second child of child group 0
Fork failure in the second child of child group 5
Fork failure in the first child of child group 7

I expected ulimit -s 500 to help, but it doesn't... Not sure why.

$ sysctl -w vm.overcommit_memory=2 && msgctl09
vm.overcommit_memory = 2
Fork failure in the second child of child group 10
Fork failure in the second child of child group 3
Fork failure in the first child of child group 14
Fork failure in the first child of child group 7
Fork failure in the second child of child group 0
Fork failure in the first child of child group 5
Fork failure in the first child of child group 1
Fork failure in the second child of child group 12
Fork failure in the second child of child group 6
Fork failure in the first child of child group 11
Fork failure in the second child of child group 2
msgctl09    1  TFAIL  :  msgctl09.c:203: Child exit status = 1

Does anyone have an idea why fork is failing?

Regards.

author
#1 lore raw
Quoted 62 lines · Mason

On a system with 1.5 GB of memory and no swap...
Some tests PASS when over-commit is enabled, but FAIL when it is disabled.

$ sysctl -w vm.overcommit_memory=0 && msgctl09
vm.overcommit_memory = 0
msgctl09    1  TPASS  :  msgctl09 ran successfully!
$ sysctl -w vm.overcommit_memory=2 && msgctl09
vm.overcommit_memory = 2
Fork failure in the second child of child group 4
Fork failure in the first child of child group 10
msgctl09    1  TFAIL  :  msgctl09.c:203: Child exit status = 1
Fork failure in the first child of child group 14
Fork failure in the second child of child group 15
Fork failure in the first child of child group 3
Fork failure in the second child of child group 2
Fork failure in the second child of child group 8
Fork failure in the second child of child group 7
/tmp$ Fork failure in the first child of child group 6
Fork failure in the first child of child group 11
Fork failure in the first child of child group 9
Fork failure in the first child of child group 12
Fork failure in the first child of child group 1
Fork failure in the first child of child group 0

Raising the overcommit amount doesn't seem to help (much).

$ sysctl -w vm.overcommit_ratio=95
$ grep Commit /proc/meminfo 
CommitLimit:     1477380 kB
Committed_AS:      72764 kB
$ sysctl -w vm.overcommit_memory=2 && msgctl09
vm.overcommit_memory = 2
Fork failure in the second child of child group 9
msgctl09    1  TFAIL  :  msgctl09.c:203: Child exit status = 1
Fork failure in the second child of child group 4
/tmp$ Fork failure in the second child of child group 1
Fork failure in the second child of child group 15
Fork failure in the second child of child group 0
Fork failure in the second child of child group 5
Fork failure in the first child of child group 7

I expected ulimit -s 500 to help, but it doesn't... Not sure why.

$ sysctl -w vm.overcommit_memory=2 && msgctl09
vm.overcommit_memory = 2
Fork failure in the second child of child group 10
Fork failure in the second child of child group 3
Fork failure in the first child of child group 14
Fork failure in the first child of child group 7
Fork failure in the second child of child group 0
Fork failure in the first child of child group 5
Fork failure in the first child of child group 1
Fork failure in the second child of child group 12
Fork failure in the second child of child group 6
Fork failure in the first child of child group 11
Fork failure in the second child of child group 2
msgctl09    1  TFAIL  :  msgctl09.c:203: Child exit status = 1
Quoted 1 line

Does anyone have an idea why fork is failing?

Behavior appears to be non-deterministic...

/tmp$ msgctl09 1000 10 10
msgctl09 1 TPASS : msgctl09 ran successfully!
/tmp$ msgctl09 1000 10 10
Fork failure in the first child of child group 1
msgctl09 1 TFAIL : msgctl09.c:203: Child exit status = 1
/tmp$ msgctl09 1000 10 10
Fork failure in the first child of child group 2
msgctl09 1 TFAIL : msgctl09.c:203: Child exit status = 1
/tmp$ msgctl09 1000 10 10
msgctl09 1 TPASS : msgctl09 ran successfully!
/tmp$ msgctl09 1000 10 10
msgctl09 1 TPASS : msgctl09 ran successfully!
/tmp$ msgctl09 1000 10 10
msgctl09 1 TPASS : msgctl09 ran successfully!

Will take a closer look in a few days.

Regards.