<div dir="ltr"><div dir="ltr">><br>> > Ah, another interesting point, this huge slowdown happens only when bm_pickle.py<br>> > is executed through pyperformance.  When run it directly, slowdown is<br>> > not so large.<br>><br>> pyperformance runs benchmarks in a virtual environment. I don't know<br>> if it has any impact on bm_pickle.<br>><br>> Most pyperformance can be run outside a virtual env if required<br>> modules are installed on the system. (bm_pickle only requires the<br>> stdlib and perf.)<br>><br><br>Bingo!<br><br>Without venv:<br><br><font face="monospace, monospace">unpickle: Mean +- std dev: 26.9 us +- 0.0 us<br>% time     seconds  usecs/call     calls    errors syscall<br>------ ----------- ----------- --------- --------- ----------------<br> 28.78    0.000438           0      1440           read<br> 27.33    0.000416           1       440        25 stat<br>  9.72    0.000148           1       144           mmap<br><span class="gmail_default" style="font-family:arial,helvetica,sans-serif">...</span><br>  0.79    0.000012           1        11           munmap</font><div><br></div><div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">With venv:</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default"><span style="font-family:monospace,monospace">% time     seconds  usecs/call     calls    errors syscall</span><br></div><div class="gmail_default"><font face="monospace, monospace">------ ----------- ----------- --------- --------- ----------------</font></div><div class="gmail_default"><font face="monospace, monospace"> 57.12    0.099023           2     61471           munmap</font></div><div class="gmail_default"><font face="monospace, monospace"> 41.87    0.072580           1     61618           mmap</font></div><div class="gmail_default"><font face="monospace, monospace">  0.23    0.000395           1       465        27 stat<br></font></div><br></div><div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">unpickle and unpickle_list creates massive same-sized objects, then all objects are</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">removed.  If all pools in the arena is freed, munmap is called.</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">I think we should save some arenas to reuse.  On recent Linux, </div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">we may be able to use MADV_FREE instead of munmap.</div><br></div></div></div>