[PyKDE] PyQT module size

Ulrich Berning ulrich.berning at desys.de
Fri Feb 18 14:30:11 GMT 2005


Brian Thomason schrieb:

> We've been using PyQT/PyKDE here at Linspire for some time now to 
> develop a handful of applications.  One of these is Lsongs, and it has 
> grown quite large and has a very large memory footprint.  We're trying 
> to reduce this a bit in various ways (switching to gstreamer from 
> libxine for instance) and I was curious if there was a way to reduce 
> the footprint size of pyqt/pykde.  The shared object files themselves 
> are quite large - Larger than their C++ counterparts.
> I'm totally ignorant on python bindings so this may just be "the way 
> it is" and that's fine.  Just curious if there's a way to "shrink" 
> these down a bit.
>
First, the size of a shared object file has no direct impact on the memory needed when the shared object gets loaded. Because (all?) systems map shared objects into memory via mmap page by page, even a very large shared object can have a small memory footprint.

Second, take a look into the ChangeLog of SIP v4.2rc2 or the latest SIP snapshot. By default, only the modules init function is exported now and the modules are stripped on installation. This reduces the size of the shared objects significantly and gives a better load performance.

The following platforms are supported (until now):

AIX:
Tested on AIX 4.3.3 with VisualAge C++ 6.0.
gcc should work, but has not been tested yet.

HP-UX:
Tested on HP-UX B.11.00 with HP aC++ Compiler C.03.50.

Linux:
Tested on SuSE Linux 8.2 with gcc 3.3 20030226 (prerelease).
Tested on SuSE Linux 9.2 with 3.3.4 (pre 3.3.5 20040809).

IRIX:
Unfortunately this doesn't work with recent gcc releases.
To get test results, I have linked the modules by hand.
When gcc 4 is available, it should work.
With the MipsPro compiler it should work.

In general, it should work on all platforms where the linker supports explicit export of symbols, but it requires a few changes to SIP's build system to support new platforms.

On Windows, exporting only the modules init function is the default. There is nothing more that you can do on this platform to reduce the shared object size. You can get slightly better load performance by proper rebasing all the .dll and .pyd files that make up your Python/PyQt/Qt runtime environment.

I have attached my test results from the supporte platforms, so you can see the effect on module size and load performace. The absolute timing value is the real time needed to import all of the modules listed in the table. The relative timing is the time needed if the machine would give me a PyStone value of 30000, so the relative timing values are comparable across platforms.

I have also attached a test result for Windows that shows the performance effect after rebasing.

NOTE: To have the modules stripped on installation, either QMAKE_STRIP has to be defined in the qmake specs, or you can use

  python configure.py STRIP=strip

Of course, you can also simply call strip on all modules after installation.

Ulli








-------------- next part --------------
#==================================================================================#
# Platform:      AIX                                                               #
# PyStone Value: 5632.73                                                           #
#----------------------------------------------------------------------------------#
# Module size is in bytes. Timing values are in seconds. Relative timing is based  #
# on a PyStone value of 30000.00                                                   #
#==================================================================================#

+-----------+----------+-------------------+-------------------+-------------------+
|           | Normal   | Strip             | Export            | Both              |
+-----------+----------+-------------------+-------------------+-------------------+
| Size:     |          |                   |                   |                   |
+-----------+----------+-------------------+-------------------+-------------------+
| sip       |   133903 |    80825 (-39.6%) |   130157 ( -2.8%) |    78087 (-41.7%) |
+-----------+----------+-------------------+-------------------+-------------------+
| qt        | 15580542 |  8390451 (-46.1%) | 13874765 (-10.9%) |  6964553 (-55.3%) |
+-----------+----------+-------------------+-------------------+-------------------+
| qtcanvas  |  1036057 |   537083 (-48.2%) |   636142 (-38.6%) |   305009 (-70.6%) |
+-----------+----------+-------------------+-------------------+-------------------+
| qtnetwork |   960539 |   499447 (-48.0%) |   552481 (-42.5%) |   269676 (-71.9%) |
+-----------+----------+-------------------+-------------------+-------------------+
| qttable   |   921178 |   470397 (-48.9%) |   540129 (-41.4%) |   250560 (-72.8%) |
+-----------+----------+-------------------+-------------------+-------------------+
| qtxml     |  1046034 |   573489 (-45.2%) |   651208 (-37.7%) |   342234 (-67.3%) |
+-----------+----------+-------------------+-------------------+-------------------+
| qtsql     |  1788639 |   936737 (-47.6%) |  1324913 (-25.9%) |   645693 (-63.9%) |
+-----------+----------+-------------------+-------------------+-------------------+
| qtui      |   378549 |   197984 (-47.7%) |    39885 (-89.5%) |    20069 (-94.7%) |
+-----------+----------+-------------------+-------------------+-------------------+
| qtgl      |   637091 |   323856 (-49.2%) |   283706 (-55.5%) |   128122 (-79.9%) |
+-----------+----------+-------------------+-------------------+-------------------+
| qtext     |  3439229 |  2183923 (-36.5%) |  2940923 (-14.5%) |  1855771 (-46.0%) |
+-----------+----------+-------------------+-------------------+-------------------+
| qwt       |  5248463 |  2964315 (-43.5%) |  4483736 (-14.6%) |  2421150 (-53.9%) |
+-----------+----------+-------------------+-------------------+-------------------+
| Timing:   |          |                   |                   |                   |
+-----------+----------+-------------------+-------------------+-------------------+
| Absolute  |     0.73 |     0.72 ( -1.4%) |     0.63 (-14.2%) |     0.64 (-13.1%) |
+-----------+----------+-------------------+-------------------+-------------------+
| Relative  |     0.14 |              0.14 |              0.12 |              0.12 |
+-----------+----------+-------------------+-------------------+-------------------+
-------------- next part --------------
#==================================================================================#
# Platform:      HP-UX                                                             #
# PyStone Value: 9863.88                                                           #
#----------------------------------------------------------------------------------#
# Module size is in bytes. Timing values are in seconds. Relative timing is based  #
# on a PyStone value of 30000.00                                                   #
#==================================================================================#

+-----------+----------+-------------------+-------------------+-------------------+
|           | Normal   | Strip             | Export            | Both              |
+-----------+----------+-------------------+-------------------+-------------------+
| Size:     |          |                   |                   |                   |
+-----------+----------+-------------------+-------------------+-------------------+
| sip       |   155648 |   114688 (-26.3%) |   143360 ( -7.9%) |   102400 (-34.2%) |
+-----------+----------+-------------------+-------------------+-------------------+
| qt        | 14938112 | 11227136 (-24.8%) | 12550144 (-16.0%) |  9080832 (-39.2%) |
+-----------+----------+-------------------+-------------------+-------------------+
| qtcanvas  |  1183744 |   843776 (-28.7%) |   872448 (-26.3%) |   540672 (-54.3%) |
+-----------+----------+-------------------+-------------------+-------------------+
| qtnetwork |  1110016 |   786432 (-29.2%) |   811008 (-26.9%) |   495616 (-55.4%) |
+-----------+----------+-------------------+-------------------+-------------------+
| qttable   |  1052672 |   749568 (-28.8%) |   761856 (-27.6%) |   466944 (-55.6%) |
+-----------+----------+-------------------+-------------------+-------------------+
| qtxml     |  1208320 |   851968 (-29.5%) |   909312 (-24.7%) |   557056 (-53.9%) |
+-----------+----------+-------------------+-------------------+-------------------+
| qtsql     |  1863680 |  1355776 (-27.3%) |  1441792 (-22.6%) |   950272 (-49.0%) |
+-----------+----------+-------------------+-------------------+-------------------+
| qtui      |   540672 |   376832 (-30.3%) |   323584 (-40.2%) |   163840 (-69.7%) |
+-----------+----------+-------------------+-------------------+-------------------+
| qtgl      |   782336 |   557056 (-28.8%) |   536576 (-31.4%) |   315392 (-59.7%) |
+-----------+----------+-------------------+-------------------+-------------------+
| qtext     |  3993600 |  3026944 (-24.2%) |  3272704 (-18.1%) |  2363392 (-40.8%) |
+-----------+----------+-------------------+-------------------+-------------------+
| qwt       |  6217728 |  4657152 (-25.1%) |  5013504 (-19.4%) |  3584000 (-42.4%) |
+-----------+----------+-------------------+-------------------+-------------------+
| Timing:   |          |                   |                   |                   |
+-----------+----------+-------------------+-------------------+-------------------+
| Absolute  |     0.61 |     0.61 ( +0.0%) |     0.46 (-24.6%) |     0.46 (-24.4%) |
+-----------+----------+-------------------+-------------------+-------------------+
| Relative  |     0.20 |              0.20 |              0.15 |              0.15 |
+-----------+----------+-------------------+-------------------+-------------------+
-------------- next part --------------
#==================================================================================#
# Platform:      IRIX                                                              #
# PyStone Value: 3240.03                                                           #
#----------------------------------------------------------------------------------#
# Module size is in bytes. Timing values are in seconds. Relative timing is based  #
# on a PyStone value of 30000.00                                                   #
#==================================================================================#

+-----------+----------+-------------------+-------------------+-------------------+
|           | Normal   | Strip             | Export            | Both              |
+-----------+----------+-------------------+-------------------+-------------------+
| Size:     |          |                   |                   |                   |
+-----------+----------+-------------------+-------------------+-------------------+
| sip       |    89468 |    88400 ( -1.2%) |    89468 ( +0.0%) |    88400 ( -1.2%) |
+-----------+----------+-------------------+-------------------+-------------------+
| qt        |  8060360 |  8051008 ( -0.1%) |  8056264 ( -0.1%) |  8046912 ( -0.2%) |
+-----------+----------+-------------------+-------------------+-------------------+
| qtcanvas  |   545288 |   544060 ( -0.2%) |   545288 ( +0.0%) |   544060 ( -0.2%) |
+-----------+----------+-------------------+-------------------+-------------------+
| qtnetwork |   505524 |   504292 ( -0.2%) |   505524 ( +0.0%) |   504292 ( -0.2%) |
+-----------+----------+-------------------+-------------------+-------------------+
| qttable   |   484572 |   483412 ( -0.2%) |   484572 ( +0.0%) |   483412 ( -0.2%) |
+-----------+----------+-------------------+-------------------+-------------------+
| qtxml     |   550804 |   549576 ( -0.2%) |   550804 ( +0.0%) |   549576 ( -0.2%) |
+-----------+----------+-------------------+-------------------+-------------------+
| qtsql     |   900612 |   899432 ( -0.1%) |   900612 ( -0.0%) |   899432 ( -0.1%) |
+-----------+----------+-------------------+-------------------+-------------------+
| qtui      |   241644 |   240600 ( -0.4%) |   241644 ( +0.0%) |   240600 ( -0.4%) |
+-----------+----------+-------------------+-------------------+-------------------+
| qtgl      |   350652 |   349504 ( -0.3%) |   350652 ( +0.0%) |   349504 ( -0.3%) |
+-----------+----------+-------------------+-------------------+-------------------+
| qtext     |  2074120 |  2070216 ( -0.2%) |  2074120 ( +0.0%) |  2070216 ( -0.2%) |
+-----------+----------+-------------------+-------------------+-------------------+
| qwt       |  3002384 |  2998840 ( -0.1%) |  3002384 ( +0.0%) |  2998840 ( -0.1%) |
+-----------+----------+-------------------+-------------------+-------------------+
| Timing:   |          |                   |                   |                   |
+-----------+----------+-------------------+-------------------+-------------------+
| Absolute  |     1.45 |     1.41 ( -2.8%) |     0.92 (-36.7%) |     0.91 (-37.3%) |
+-----------+----------+-------------------+-------------------+-------------------+
| Relative  |     0.16 |              0.15 |              0.10 |              0.10 |
+-----------+----------+-------------------+-------------------+-------------------+
-------------- next part --------------
#==================================================================================#
# Platform:      Linux                                                             #
# PyStone Value: 30625.04                                                          #
#----------------------------------------------------------------------------------#
# Module size is in bytes. Timing values are in seconds. Relative timing is based  #
# on a PyStone value of 30000.00                                                   #
#==================================================================================#

+-----------+----------+-------------------+-------------------+-------------------+
|           | Normal   | Strip             | Export            | Both              |
+-----------+----------+-------------------+-------------------+-------------------+
| Size:     |          |                   |                   |                   |
+-----------+----------+-------------------+-------------------+-------------------+
| sip       |    71626 |    54636 (-23.7%) |    70010 ( -2.3%) |    53024 (-26.0%) |
+-----------+----------+-------------------+-------------------+-------------------+
| qt        |  8335177 |  6242564 (-25.1%) |  6863721 (-17.7%) |  4771108 (-42.8%) |
+-----------+----------+-------------------+-------------------+-------------------+
| qtcanvas  |   630758 |   425140 (-32.6%) |   439406 (-30.3%) |   233788 (-62.9%) |
+-----------+----------+-------------------+-------------------+-------------------+
| qtnetwork |   590296 |   394084 (-33.2%) |   405400 (-31.3%) |   209188 (-64.6%) |
+-----------+----------+-------------------+-------------------+-------------------+
| qttable   |   569048 |   382448 (-32.8%) |   392312 (-31.1%) |   205712 (-63.8%) |
+-----------+----------+-------------------+-------------------+-------------------+
| qtxml     |   612744 |   423548 (-30.9%) |   424112 (-30.8%) |   234916 (-61.7%) |
+-----------+----------+-------------------+-------------------+-------------------+
| qtsql     |  1009981 |   717364 (-29.0%) |   755773 (-25.2%) |   463156 (-54.1%) |
+-----------+----------+-------------------+-------------------+-------------------+
| qtui      |   288295 |   176416 (-38.8%) |   156343 (-45.8%) |    44464 (-84.6%) |
+-----------+----------+-------------------+-------------------+-------------------+
| qtgl      |   422830 |   275624 (-34.8%) |   270942 (-35.9%) |   123736 (-70.7%) |
+-----------+----------+-------------------+-------------------+-------------------+
| qtext     |  2173235 |  1696716 (-21.9%) |  1750739 (-19.4%) |  1274220 (-41.4%) |
+-----------+----------+-------------------+-------------------+-------------------+
| qwt       |  3002345 |  2276504 (-24.2%) |  2321961 (-22.7%) |  1596120 (-46.8%) |
+-----------+----------+-------------------+-------------------+-------------------+
| Timing:   |          |                   |                   |                   |
+-----------+----------+-------------------+-------------------+-------------------+
| Absolute  |     0.34 |     0.34 ( +1.8%) |     0.19 (-43.5%) |     0.20 (-40.5%) |
+-----------+----------+-------------------+-------------------+-------------------+
| Relative  |     0.34 |              0.35 |              0.19 |              0.20 |
+-----------+----------+-------------------+-------------------+-------------------+
-------------- next part --------------
#==========================================#
# Platform:      win32                     #
# PyStone Value: 36769.04                  #
#------------------------------------------#
# Module size is in bytes. Timing values   #
# in seconds. Relative timing is base on a #
# PyStone value of 30000.00                #
#==========================================#

+-----------+----------+-------------------+
|           | Normal   | Rebase            |
+-----------+----------+-------------------+
| Absolute  |     0.14 |     0.11 (-26.9%) |
+-----------+----------+-------------------+
| Relative  |     0.18 |              0.13 |
+-----------+----------+-------------------+


More information about the PyQt mailing list