2013/8/19 SASADA Koichi [email protected]:
(2013/08/01 20:18), naruse (Yui NARUSE) wrote:
http://u32.rubyci.org/~chkbuild/ruby-trunk/log/20130801T103302Z.log.html.gz
$B$G(B 32bit $B$G$b0BDj$7$?$h$&$J5$$,$7$^$9!#(B
$B$b$&$7$P$i$/MM;R$r8+$^$9!#(B
$B$h$jB?$/$N%"%I%l%96u4V$rI,MW$H$9$k$h$&$K$J$C$?;v<+BN$O;EMM$C$FM}2r$G$$$$$s$G$9$h$M!d$5$5$@$5$s(B
$B$3$A$i!“$@$$$?$$$o$+$C$?$s$8$c$J$$$+$J$!!”$H;W$&$N$GD4::7k2L$rJs9p$7$^$9(B
$B!JF|K\8l!K!#>.:j$5$s!"%A%'%C%/$7$F$/$l$k$H=u$+$j$^$9!#(B
$BD4::$*Hh$lMM$G$9!#(B
$B$3$A$i$G3NG’$7$?8B$j$G$O!"$3$NFbMF$G4V0c$$$J$$$H;W$o$l$^$9!#(B
$B$F$$$^$9!#(B
$B%a%b%j$O(B 4GB $B$[$I3NJ]$7$F$$$k$3$H$,4QB,$G$-$^$7$?!#(B
Linux $B$O!"!J%G%U%)%k%H$G$O!K0lEY$KJ*M}%a%b%j!J!&A!K0J>e$N(B mmap $B$O=PMh$J(B
$B$$$h$&$K$J$C$F$$$k$h$&$G$9!#(B
$B$=$&$G$9$M!#(B
passingloop • Linux のオーバーコミットについて調べてみた
0
$B%*!<%P!<%3%_%C%HM-8z(B
$B0l2s$N(B malloc $B$G3NJ]$G$-$k$N$O<B:]$KMxMQ2DG=$J%a%b%j$NBg$-$5$^$G(B
$BB?J,!“$3$N@)8B$G(B fork() $B$,<:GT$7$F$k$s$8$c$J$$$+$J$!!”$H;W$$$^$9!#$A$J$_(B
$B$K!“$3$N%Z!<%8$N(B malloc $B$C$F!”(Bmmap $B$+$J$!!#(B
$B$O$$!#$=$&$G$9(B
Linux kernel $B$N%=!<%9$r$$$6$C$Q$KDI$C$?$N$G$9$,!“(Bfork() $B$,$3$N%A%'%C%/(B
$B$r$9$k$H$3$m$K$I$&E~C#$9$k$+$O8+$k$3$H$,=PMh$^$;$s$G$7$?!#$N$G!”?dB,$K$J(B
$B$j$^$9!#(B
$B$7$F$^$9!#(B
do_fork()
copy_process()
copy_mm()
dup_mm()
dup_mmap()
security_vm_enough_memory_mm()
__vm_enough_memory()
$B$H$$$&%k!<%H$K$J$j$^$9!#(B
$B9M$($i$l$k2r7h:v!'(B
- TestFiber#test_many_fibers $B$r:o=|(B
- TestFiber#test_many_fibers $B$rJL%W%m%;%9$G<B9T(B
- TestFiber#test_many_fibers $B8e$K$A$c$s$HJ*M}%a%b%j$r2rJ|$9$k$h$&$K4hD%$k(B
$B%7%9%F%A4BN$G@)8B$,$+$+$C$F$$$k$N$GJL%W%m%;%9$G<B9T$OK\<AE*$G$O(B $B$J$$$h$&$K;W$$$^$9!#(B $B$A$c$s$H3+J|$9$k$h$&$K%F%9%H!J$H!"(BGC$B!K$rJQ$($F!"$=$b$=$b%7%9%F%
$N(B
$B%a%b%j$,>.$5$9$.$k$H$-$O%F%9%H$r%9%-%C%W$9$k$h$&$K$7$J$$$H!"(B
$BIT;W5D$J2U=j$G%(%i!<$rEG$/$H;W$$$^$9!#(B
$B$r=q$-9~$_2DG=$K$9$k$3$H$,2DG=$G$9!#$D$^$j!"(B
size = 4GB;
addr = mmap(0, size, PROT_EXEC | PROT_READ, ...);
mprotect(addr , size/2, $B=q$-9~$_2DG=$K(B);
mprotect(addr+size/2, size/2, $B=q$-9~$_2DG=$K(B);
$B$H$9$k$H!“=q$-9~$_2DG=$J(B 4GB $B$NO"B3NN0h$rF@$k$3$H$,=PMh$^$9!#$b$A$m$s!”(B
$B<B:]$K=q$-9~$s$G$$$/$H%Z!<%8$,3d$jEv$F$i$l$F%a%b%jB-$j$J$/$J$j$^$9$,!#(B
$BA4$/$=$NDL$j$G$9!#(B
$B$3$&$$$&@_7W$J$N$O!“$J$K$,$7$+$NM}M3$,$”$k$s$G$7$g$&$1$l$I$b!"0U30$G$7$?!#(B
$B$$$d!"$3$l$ONr;KE*$J%4%$J$N$G!“$”$s$^$j5$$K$7$J$/$F$$$$$G$9!#(B
overcommit_always
$B$,$-$A$C$H$7$?4IM}$G!“(Bovercommit_guess$B$O4pK\E*$K(B
$B%A%'%C%/$7$J$$$1$I!”$“$^$j$K$b%”%[$J%5%$%:$O$-$C$H%*%Z%%9$@$+$i(B
$B=u$1$F$d$m$&!#$0$i$$$N%N%j(B
$B$A$c$s$H@_7W$5$l$F$J$$$N$G!“(Bmprotect$B$^$o$j$GL7=b$,H/@8$7$F$$j!“(B
$B:G=i$K(B PROT_READ$B$G(Bmap$B$7$F$+$i!”(BPROT_WRITE$B$KJQ$($k$H(B
$B%“%+%&%s%H$5$l$J$$(B $B”(B $B%”%+%&%s%H$5$l$k(B $B$HA+0$9$k$1$I!“(B
$B5U$K(BPROT_WRITE$B$G(Bmap$B$7$F(BPROT_READ$B$KJQ99$9$k$H%”%+%&%s%H$5$l$k(B
$B$^$^$J$N$@$h!#0l2s(Bwrite mode$B$K$J$C$F$7$^$&$H2?$,=q$$$F$“$k$+(B
$BJ,$+$i$J$$$+$i$=$&$9$k$7$+$J$$$s$@$1$I!“1x$$!#(B
$B$=$7$F?t!9$N4*0c$$%”%W%j%3!<%I$r@8$s$@$N$G$”$C$?!#(B