Author alecsandru.patrascu
Recipients alecsandru.patrascu
Date 2016-02-04.15:56:27
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1454601388.85.0.405033419332.issue26285@psf.upfronthosting.co.za>
In-reply-to
Content
Hi all,

This is Alecsandru from the Dynamic Scripting Languages Optimization Team at Intel Corporation. I would like to submit a patch that enables garbage collection of unused input sections from the CPython2 and CPython3 binaries, by using the "--gc-sections" linker flag, which decides which input sections are used by examining symbols and relocations. In order for this to work, GCC must place each function or data item into its own section in the output file, thus dedicated flags are used. With this technique, an average of 1% is gained in both interpreters, with a few small regressions.

Steps:
======
1. Get the CPython source codes
    hg clone https://hg.python.org/cpython cpython
    cd cpython
    hg update 2.7 (for CPython2)

2. Build the binary
    a) Default:
        ./configure
        make
    
    b) Unused input sections patch
        Copy the attached patch files
        hg import --no-commit cpython2-deadcode-v01.patch.patch (for CPython3)
        hg import --no-commit cpython2-deadcode-v01.patch (for CPython2)
        ./configure
        make

        
Hardware and OS Configuration
=============================
Hardware:           Intel XEON (Haswell-EP) 18 Cores

BIOS settings:      Intel Turbo Boost Technology: false
                    Hyper-Threading: false                  

OS:                 Ubuntu 14.04.3 LTS Server

OS configuration:   Address Space Layout Randomization (ASLR) disabled to reduce run
                    to run variation by echo 0 > /proc/sys/kernel/randomize_va_space
                    CPU frequency set fixed at 2.6GHz

GCC version:        GCC version 4.9.2

Benchmark:          Grand Unified Python Benchmark from 
                    https://hg.python.org/benchmarks/

                    
Measurements and Results
========================
CPython2 and CPython3 sample results, measured using GUPB on a Haswell platform, can be viewed in Table 1 and 2. On the first column (Benchmark) you can see the benchmark name and on the second (%S) the speedup compared with the default version; a higher value is better.

Table 1. CPython3 results:
Benchmark           %S
----------------------
telco               11
etree_parse         7
call_simple         6
etree_iterparse     5
regex_v8            4
meteor_contest      3
etree_process       3
call_method_unknown 3
json_dump_v2        3
formatted_logging   2
hexiom2             2
chaos               2
richards            2
django_v3           2
nbody               2
etree_generate      2
pickle_list         1
go                  1
nqueens             1
call_method         1
mako_v2             1
raytrace            1
chameleon_v2        1
silent_logging      0
fastunpickle        0
2to3                0
float               0
regex_effbot        0
pidigits            0
json_load           0
simple_logging      0
normal_startup      0
startup_nosite      0
fastpickle          0
tornado_http        0
regex_compile       0
fannkuch            0
spectral_norm       0
pickle_dict         0
unpickle_list       0
call_method_slots   0
pathlib             -2
unpack_sequence     -2

Table 2. CPython2 results:
Benchmark           %S
----------------------
simple_logging      4
formatted_logging   3
slowpickle          2
silent_logging      2
pickle_dict         1
chameleon_v2        1
hg_startup          1
pickle_list         1
call_method_unknown 1
pidigits            1
regex_effbot        1
regex_v8            1
html5lib            0
normal_startup      0
regex_compile       0
etree_parse         0
spambayes           0
html5lib_warmup     0
unpack_sequence     0
richards            0
rietveld            0
startup_nosite      0
raytrace            0
etree_iterparse     0
json_dump_v2        0
fastpickle          0
slowspitfire        0
slowunpickle        0
call_simple         0
float               0
2to3                0
bzr_startup         0
json_load           0
hexiom2             0
chaos               0
unpickle_list       0
call_method_slots   0
tornado_http        0
fastunpickle        0
etree_process       0
spectral_norm       0
meteor_contest      0
pybench             0
go                  0
etree_generate      0
mako_v2             0
django_v3           0
fannkuch            0
nbody               0
nqueens             0
telco               -1
call_method         -2
pathlib             -3

Thank you,
Alecsandru
History
Date User Action Args
2016-02-04 15:56:28alecsandru.patrascusetrecipients: + alecsandru.patrascu
2016-02-04 15:56:28alecsandru.patrascusetmessageid: <1454601388.85.0.405033419332.issue26285@psf.upfronthosting.co.za>
2016-02-04 15:56:28alecsandru.patrasculinkissue26285 messages
2016-02-04 15:56:27alecsandru.patrascucreate