Using hard links for debug builds
Ioi Lam
ioi.lam at oracle.com
Wed Jan 11 00:57:03 UTC 2017
Hi Eric,
Thanks for the detailed explanation.
Perhaps this one copy can be changed to a hard link?
Copying jdk/lib/server/libjvm.so
/bin/cp -fP
'/home/iklam/jdk/bld/hs-debug/support/modules_libs/java.base/server/libjvm.so'
'/home/iklam/jdk/bld/hs-debug/jdk/lib/server/libjvm.so'
My script changed it to a hard link and I see no ill effects:
'/home/iklam/jdk/bld/hs-debug/jdk/lib/server/libjvm.so' =>
'/home/iklam/jdk/bld/hs-debug/support/modules_libs/java.base/server/libjvm.so'
15452588 -rwxr-xr-x 2 iklam dba 322793048 Jan 10 16:54
/home/iklam/jdk/bld/hs-debug/jdk/lib/server/libjvm.so
15452588 -rwxr-xr-x 2 iklam dba 322793048 Jan 10 16:54
/home/iklam/jdk/bld/hs-debug/support/modules_libs/java.base/server/libjvm.so
Thanks
- Ioi
On 1/10/17 12:56 AM, Erik Joelsson wrote:
> Hello,
>
> I recently did work to reduce the number of copies. While doing that I
> did investigate using softlinks, but that didn't work for .so files. I
> did not consider hard links. All other files in the exploded image are
> however softlinked when possible. For all the copies in images, any
> kind of linking won't work because those are generated with jlink, not
> cp. This means you would only be able to eliminate 2 copies by linking
> out of the below 8.
>
> I did put in more detailed top level targets to make it possible for
> an active user to get fewer copies. For example, instead of building
> "images", you can build just "jdk-image" and you will skip 2 of the
> copies (jre and serverjre). If you don't need a real jdk image, you
> can build just "exploded-image" and you skip 2 more (jdk and
> support/interim-image). I have tried to optimize the "test*" targets
> to only depend on the appropriate images as well.
>
> If you don't care for the gtest binaries, you can configure
> --disable-hotspot-gtest to get rid of those.
>
> Doing all of this and you are down to 2 copies, which your trick takes
> down to one.
>
> The gtest version of libjvm.so contains all the objects of the normal
> libjvm.so + the gtest unit tests. This is used to run the gtest unit
> tests.
>
> In general, --with-native-debug-symbols=external is easier on disk
> usage since the debug symbols aren't copied everywhere like the
> libraries are. Also note that even if you do =zipped (the default),
> there will be a link to an unzipped copy available in the exploded image.
>
> /Erik
>
> On 2017-01-09 21:40, Ioi Lam wrote:
>> Hi,
>>
>> libjvm.so gets copied a few times during the build. I usually build
>> slowdebug builds with --with-native-debug-symbols=internal (to make
>> it easier with gdb). This gives me 8 libjvm.so files:
>>
>> ./support/interim-image/lib/server/libjvm.so
>> ./support/modules_libs/java.base/server/libjvm.so
>> ./hotspot/variant-server/libjvm/gtest/libjvm.so
>> ./images/test/hotspot/gtest/server/libjvm.so
>> ./images/serverjre/lib/server/libjvm.so
>> ./images/jdk/lib/server/libjvm.so
>> ./images/jre/lib/server/libjvm.so
>> ./jdk/lib/server/libjvm.so
>>
>> Each of them is 320+MB. Even though I have a fast SSD, it's
>> overwhelmed by the large churn and my machine becomes unresponsive
>> for a long time.
>>
>> The 8 libjvm.so files have 2 variants -- the gtest version (2 of
>> them) vs the normal version (6 of them). Would it make sense to
>> change the 'cp' to hard links instead?
>>
>> For now, I am doing a hack by patching this in the generated spec.gmk
>> file:
>>
>> CP:=/bin/cp
>>
>> to point to my script, which uses 'ln' instead of /bin/cp when
>> dealing with libjvm.so ....
>>
>> BTW, what's the use for the 'gtest' versions of libjvm.so?
>>
>> Thanks
>> - Ioi
>
More information about the build-dev
mailing list