URGENT: Request for review: 7122222: GC log is limited to 2G for 32-bit
Tao Mao
tao.mao at oracle.com
Thu May 30 00:27:51 UTC 2013
Thank you, Mikael.
Please see inline.
Reviewers, please review it based on the following new observation.
Tao
On 5/27/13 2:05 AM, Mikael Gerdin wrote:
> Tao,
>
> On 2013-05-25 02:19, Tao Mao wrote:
>> 7ux bug
>>
>> webrev:
>> http://cr.openjdk.java.net/~tamao/7122222/webrev.00/
>>
>> changeset:
>> (1) make -D_FILE_OFFSET_BITS=64 only available to generating ostream.o
>>
>> Why conservative rather than making -D_FILE_OFFSET_BITS=64 globally
>> applicable?
>>
>> Global setting of -D_FILE_OFFSET_BITS=64 on linux works fine; however,
>> there are at least five code conflicts if introducing the flag globally
>> to Solaris.
>>
>> One was resolved as in os_solaris.inline.hpp, but the rest four files
>> had conflicts deep in c library. Even if they are excluded from setting
>> -D_FILE_OFFSET_BITS=64, the compiled VM is corrupted.
>>
>> (2) For now, no Windows solution.
>> I haven't found any clean solution for solving this problem on Windows.
>
> This seems like an insufficient fix if you can't make it work on all
> platforms. I tried building with "-D_LARGEFILE64_SOURCE
> -D_FILE_OFFSET_BITS=64" ons Solaris and hit an #error in libelf.h
> saying it wasn't supported so I understand your problem there.
Yes, that's my grief :( you touched them, a bunch of them. That's why I
chose to apply the flag only to the files (ostream.cpp and ostream.hpp)
I want the effect.
>
> Instead I suggest that you use the compatibility API described in
> lf64(5) on Solaris. This API consists of fopen64, ftell64 and friends
> and is exposed when "-D_LARGEFILE64_SOURCE" is set.
>
> The same "-D_LARGEFILE64_SOURCE" is available on Linux and has the
> added advantage of not changing any existing symbols and therefore we
> can set the define for all files instead of just ostream
>
> This approach has the added advantage that it more closely resembles
> the changes which will be needed for Windows anyway. Those changes
> would consist of changing calls to ftell/fseek to 64-bit versions and
> changing fopen to fopen64 on Solaris/Linux.
Both ways have pros and cons. The current implementation excludes the
usage of fopen64, providing portability (since there's no fopen64 for
Windows). Meanwhile, I understand your suggestion provides other benefits.
This Sun White Paper
(http://unix.business.utah.edu/doc/os/solaris/misc/largefiles.pdf)
summarizes the usage of the flags on solaris (Page 5-26). And, it should
apply to Linux the same way as was agreed across platforms.
>
> Since there is no fopen64 on Windows it seems that the default fopen
> already supports large files.
I tested, and you are correct that the 32-bit VM on Windows can write
beyond 2GB (and beyond 4GB). Thank you, it's solved "half of my problem" :)
>
> /Mikael
>
>>
>> test:
>> (1) Ability to write over 2g file for 32-bit builds were verified on the
>> following configurations.
>>
>> Linux * i586
>> Solaris * i586
>> Solaris * sparc
>>
>> (2) Need a JPRT test for sanity check.
>
More information about the hotspot-gc-dev
mailing list