March 7, 2006 - Nicholas Clark's "Improve Perl 5" grant work

I have just received the first report for Nicholas Clark's grant. So far, things are going rather well. Read on to see what Nicholas has done.


I've completed the planned typeglob (PVGV) structure shrinking. This turned out to be somewhat more complex than I expected. Specifically:

  • Discovered that PVGVs use magic to perform stringification. Removed this need for magic, saving 24 bytes.
  • Discovered that pads use PVGVs for storing C variable names. Changed C variables to be stored in PVMGs
  • Moved the GP pointer to the SV head structure, saving 1 level of dereferencing (and 4 bytes)
  • Managed to merge in all the other fields of PVGVs into the fixed part of SV structure common with all the smaller SVs. (saves 16 bytes)
  • Change from storing the GV's name in a string to using a sharing the hash key structure used by the symbol table holding this typeglob. (saves the length of the typeglob name) sizes for systems with 4 byte pointers and longs, such as x86 and default PPC

I think this roughly halves the size of PVGVs. For an example, the installman script in the perl source tree uses over 1200 PVGVs, so this saves about 50K.

PVLVs had no magic associated, but benefit from all the other savings.

I've completed the planned PVCV and PVFM shrinking. Both are now about 25% smaller (eg 20 bytes). installman uses 600 PVCVs, so this saves about 12K


Is anything known about performance improvements yet? I'm curious if there's extra speed in these changes as well as memory savings.

contributed by Juerd on March 7, 2006 7:49 PM

Tags:

  • Grants
  • I have just received the first report for Nicholas Clark's grant. So far, things are going rather well. Read on to see what Nicholas has done.


    I've completed the planned typeglob (PVGV) structure shrinking. This turned out to be somewhat more complex than I expected. Specifically:

    • Discovered that PVGVs use magic to perform stringification. Removed this need for magic, saving 24 bytes.
    • Discovered that pads use PVGVs for storing C variable names. Changed C variables to be stored in PVMGs
    • Moved the GP pointer to the SV head structure, saving 1 level of dereferencing (and 4 bytes)
    • Managed to merge in all the other fields of PVGVs into the fixed part of SV structure common with all the smaller SVs. (saves 16 bytes)
    • Change from storing the GV's name in a string to using a sharing the hash key structure used by the symbol table holding this typeglob. (saves the length of the typeglob name) sizes for systems with 4 byte pointers and longs, such as x86 and default PPC

    I think this roughly halves the size of PVGVs. For an example, the installman script in the perl source tree uses over 1200 PVGVs, so this saves about 50K.

    PVLVs had no magic associated, but benefit from all the other savings.

    I've completed the planned PVCV and PVFM shrinking. Both are now about 25% smaller (eg 20 bytes). installman uses 600 PVCVs, so this saves about 12K


    Is anything known about performance improvements yet? I'm curious if there's extra speed in these changes as well as memory savings.

    contributed by Juerd on March 7, 2006 7:49 PM

    Post a comment

    If you have an OpenId URL, you can enter it here to post comments on this site.

    Category

    This page contains a single entry from the blog posted on March 07, 2006.

    Many more entries can be found on the main index page or by looking through the archives.

    Powered by
    Socialtext