Unexpected copy on write when running GC in 2.1.3
Memory is duplicated when forking and calling GC in 2.1.3.
We have written a small program that reproduces the issue (see attached file).
- The program instantiates an object and then forks into two processes.
- The GC is called in the child process.
- The memory allocation (as given by /proc/pid/smaps) changes from shared to private, thereby indicating a doubling of memory consumption.
Here is the output of the program (size is in mb):
ruby version 2.1.3 time pid message shared private 4.011s 4723 Parent pre GC 68 0 4.013s 4737 Child pre GC 68 0 8.019s 4723 Parent post GC 5 62 8.093s 4737 Child post GC 5 66
We have tested the program on Ubuntu 14.04 with ruby 2.1.3 and 2.1.5.
We have also tried to fork 10 children and see a 10 doubling of the memory consumption, the issue only occurs after running the GC.