<font size=1 face="Segoe UI">Just wanted to mention that I printed out
the addresses being returned from jemalloc() and those addresses fit within
the range of the smaps in question. So I'm certain the smaps with
large Private_Clean bytes belongs to jemalloc.</font>
<br>
<br><font size=1 face="Segoe UI">Questions:</font>
<br>
<br><font size=1 face="Segoe UI">1) Why does jemalloc have smaps with such
large Private_Clean size? I'm actually surprised jemalloc has such
large smaps in general. I would expect a bunch of smaller smaps that
match the configured chunk size.</font>
<br>
<br><font size=1 face="Segoe UI">2) Will the Linux kernel ever reclaim
private clean pages, or at least move them out of physical memory? Eventually
we see RSS for several of our processes (that use jemalloc) grow beyond
what's expected and the OOM killer in the kernel takes out our process(es).</font>
<br>
<br><font size=1 face="Segoe UI">3) Are there any configurations that can
be done to influence the handling of private clean pages? Either
jemalloc or Linux tuning.</font>
<br>
<br><font size=1 face="Segoe UI"> thx
again !</font>
<br>
<br>
<br>
<br>
<br>
<br>
<br>
<table width=100% style="border-collapse:collapse;">
<tr valign=top height=8>
<td width=96 style="border-style:solid;border-color:#000000;border-width:0px 0px 0px 0px;padding:0px 0px;"><font size=1 color=#5f5f5f face="sans-serif">From:</font>
<td style="border-style:solid;border-color:#000000;border-width:0px 0px 0px 0px;padding:0px 0px;"><font size=1 face="sans-serif">Kurtis
Martin/Raleigh/IBM</font>
<tr valign=top height=8>
<td width=96 style="border-style:solid;border-color:#000000;border-width:0px 0px 0px 0px;padding:0px 0px;"><font size=1 color=#5f5f5f face="sans-serif">To:</font>
<td style="border-style:solid;border-color:#000000;border-width:0px 0px 0px 0px;padding:0px 0px;"><font size=1 face="sans-serif">jemalloc-discuss@canonware.com,
</font>
<tr valign=top height=8>
<td width=96 style="border-style:solid;border-color:#000000;border-width:0px 0px 0px 0px;padding:0px 0px;"><font size=1 color=#5f5f5f face="sans-serif">Date:</font>
<td style="border-style:solid;border-color:#000000;border-width:0px 0px 0px 0px;padding:0px 0px;"><font size=1 face="sans-serif">05/29/2013
04:52 PM</font>
<tr valign=top height=8>
<td width=96 style="border-style:solid;border-color:#000000;border-width:0px 0px 0px 0px;padding:0px 0px;"><font size=1 color=#5f5f5f face="sans-serif">Subject:</font>
<td style="border-style:solid;border-color:#000000;border-width:0px 0px 0px 0px;padding:0px 0px;"><font size=1 face="sans-serif">High
amount of private clean data in smaps</font></table>
<br>
<hr noshade>
<br>
<br><font size=1 face="Segoe UI">We have a java application which has a
native component written in C, that makes use of JNI to manage several
of our objects that we directly allocate via jemalloc. One of the
goals for our C code is to not allow our processes RSS size to grow beyond
a certain point. To do this our app monitors jemallocs stats.cactive,
when it sees that cactive reach a certain point we write certain some of
our objects to disk then we free the allocated memory. In this case,
the objects that we are freeing are 4K and above, so when we free the pages
holding these objects should no longer be active. That part seems
to be working.</font>
<br>
<br><font size=1 face="Segoe UI">After several hours of running our application
at full load, we start to see our RSS go beyond what is expected. This
unexpected growth seems to happen faster for some instances of our application
vs others. I compared the /proc smaps file between instances of our
app that had a high RSS to those with expected RSS. In both cases
smap shows a really large map that I think belongs to jemalloc. I
believe it belongs to jemalloc, because if it didn't the sum of jemallocs
active size + the RSS size of this map goes well beyond our processes overall
RSS size. </font>
<br>
<br><font size=1 face="Segoe UI">The thing that is really strange about
this mmap is that it's Private_Clean sizes is really high, e.g. 1.4 GBs.
I don't know much about private clean pages, other than what a few
google searchs told me about them being pages that have not been modified
since they were mapped. I'm hopeful that you can tell me more about
private clean pages and if/why jemalloc would have maps with such high
private clean pages.</font>
<br>
<br><font size=1 face="Segoe UI">Here's one such map from my smaps file
and the jemalloc stats around the same time. At this time /proc status
showed our VmRSS size was 10440804 kB:</font>
<br>
<br><font size=1 face="Segoe UI">7f41dc200000-7f437a400000 rw-p 00000000
00:00 0 </font>
<br><font size=1 face="Segoe UI">Size:
6785024 kB</font>
<br><font size=1 face="Segoe UI">Rss:
4037056 kB</font>
<br><font size=1 face="Segoe UI">Pss:
4037056 kB</font>
<br><font size=1 face="Segoe UI">Shared_Clean:
0 kB</font>
<br><font size=1 face="Segoe UI">Shared_Dirty:
0 kB</font>
<br><font size=1 face="Segoe UI">Private_Clean: 1499364 kB</font>
<br><font size=1 face="Segoe UI">Private_Dirty: 2537692 kB</font>
<br><font size=1 face="Segoe UI">Referenced: 2536428
kB</font>
<br><font size=1 face="Segoe UI">Swap:
0 kB</font>
<br><font size=1 face="Segoe UI">KernelPageSize: 4
kB</font>
<br><font size=1 face="Segoe UI">MMUPageSize:
4 kB</font>
<br>
<br><font size=1 face="Segoe UI">Jemalloc stats:</font>
<br>
<br><font size=1 face="Segoe UI">___ Begin jemalloc statistics ___</font>
<br><font size=1 face="Segoe UI">Version: 3.3.1-0-g9ef9d9e8c271cdf14f664b871a8f98c827714784</font>
<br><font size=1 face="Segoe UI">Assertions disabled</font>
<br><font size=1 face="Segoe UI">Run-time option settings:</font>
<br><font size=1 face="Segoe UI"> opt.abort: false</font>
<br><font size=1 face="Segoe UI"> opt.lg_chunk: 21</font>
<br><font size=1 face="Segoe UI"> opt.dss: "secondary"</font>
<br><font size=1 face="Segoe UI"> opt.narenas: 96</font>
<br><font size=1 face="Segoe UI"> opt.lg_dirty_mult: 6</font>
<br><font size=1 face="Segoe UI"> opt.stats_print: false</font>
<br><font size=1 face="Segoe UI"> opt.junk: false</font>
<br><font size=1 face="Segoe UI"> opt.quarantine: 0</font>
<br><font size=1 face="Segoe UI"> opt.redzone: false</font>
<br><font size=1 face="Segoe UI"> opt.zero: false</font>
<br><font size=1 face="Segoe UI">CPUs: 24</font>
<br><font size=1 face="Segoe UI">Arenas: 96</font>
<br><font size=1 face="Segoe UI">Pointer size: 8</font>
<br><font size=1 face="Segoe UI">Quantum size: 16</font>
<br><font size=1 face="Segoe UI">Page size: 4096</font>
<br><font size=1 face="Segoe UI">Min active:dirty page ratio per arena:
64:1</font>
<br><font size=1 face="Segoe UI">Chunk size: 2097152 (2^21)</font>
<br><font size=1 face="Segoe UI">Allocated: 7350097392, active: 7438028800,
mapped: 13549699072</font>
<br><font size=1 face="Segoe UI">Current active ceiling: 7486832640</font>
<br><font size=1 face="Segoe UI">chunks: nchunks highchunks
curchunks</font>
<br><font size=1 face="Segoe UI"> 6927
6622 6461</font>
<br><font size=1 face="Segoe UI">huge: nmalloc ndalloc
allocated</font>
<br><font size=1 face="Segoe UI">
0 0
0</font>
<br>
<br><font size=1 face="Segoe UI">Merged arenas stats:</font>
<br><font size=1 face="Segoe UI">assigned threads: 93</font>
<br><font size=1 face="Segoe UI">dss allocation precedence: N/A</font>
<br><font size=1 face="Segoe UI">dirty pages: 1815925:2559 active:dirty,
10091062 sweeps, 30421949 madvises, 135567186 purged</font>
<br><font size=1 face="Segoe UI">
allocated nmalloc ndalloc
nrequests</font>
<br><font size=1 face="Segoe UI">small: 1072125424
106372291 99191380 106372291</font>
<br><font size=1 face="Segoe UI">large: 6277971968
51052119 50542543 51052119</font>
<br><font size=1 face="Segoe UI">total: 7350097392
157424410 149733923 157424410</font>
<br><font size=1 face="Segoe UI">active: 7438028800</font>
<br><font size=1 face="Segoe UI">mapped: 13545504768</font>
<br><font size=1 face="Segoe UI">bins: bin size regs
pgs allocated nmalloc ndalloc
newruns reruns curruns</font>
<br><font size=1 face="Segoe UI">
0 8 501 1 128
30
14 11
0 7</font>
<br><font size=1 face="Segoe UI">
1 16 252 1 672
42
0 11
0 11</font>
<br><font size=1 face="Segoe UI">
2 32 126 1
64 2
0 1
0 1</font>
<br><font size=1 face="Segoe UI">
3 48 84 1 114892800
16709174 14315574 43714
1159683 30488</font>
<br><font size=1 face="Segoe UI">
4 64 63 1 851264
167481 154180
3075 1219 235</font>
<br><font size=1 face="Segoe UI">
5 80 50 1 190426160
36559908 34179581 115227
4236615 50957</font>
<br><font size=1 face="Segoe UI">
6 96 84 2 2112
30 8
11
0 7</font>
<br><font size=1 face="Segoe UI">[7..10]</font>
<br><font size=1 face="Segoe UI"> 11
224 72 4 224
1
0 1
0 1</font>
<br><font size=1 face="Segoe UI">[12]</font>
<br><font size=1 face="Segoe UI"> 13
320 63 5 765952000 52935623
50542023 64485 14712013
40300</font>
<br><font size=1 face="Segoe UI">[14..27]</font>
<br><font size=1 face="Segoe UI">large: size pages
nmalloc ndalloc nrequests
curruns</font>
<br><font size=1 face="Segoe UI">[1]</font>
<br><font size=1 face="Segoe UI"> 8192
2 30
8 30
22</font>
<br><font size=1 face="Segoe UI"> 12288
3 51050157 50542023 51050157
508134</font>
<br><font size=1 face="Segoe UI"> 16384
4 1920 512
1920 1408</font>
<br><font size=1 face="Segoe UI">[13]</font>
<br><font size=1 face="Segoe UI"> 73728
18 1
0 1
1</font>
<br><font size=1 face="Segoe UI">[23]</font>
<br><font size=1 face="Segoe UI"> 172032
42 1
0 1
1</font>
<br><font size=1 face="Segoe UI">[214]</font>
<br><font size=1 face="Segoe UI"> 1052672 257
10
0 10
10</font>
<br><font size=1 face="Segoe UI">[252]</font>
<br><font size=1 face="Segoe UI">--- End jemalloc statistics ---</font>
<br>
<br>
<br><font size=1 face="Segoe UI">Any help is greatly appreciated</font>
<br><font size=1 face="Segoe UI">.</font>
<br>
<br>
<br>