RFR: 8334489: Add function os::used_memory [v2]
Thomas Stuefe
stuefe at openjdk.org
Thu Jun 20 06:54:09 UTC 2024
On Wed, 19 Jun 2024 16:47:38 GMT, Johan Sjölen <jsjolen at openjdk.org> wrote:
>> A function os::used_memory is needed for GC ergonomics.
>>
>> A naïve implementation is:
>>
>> ```c++
>> julong os::used_memory() {
>> return os::physical_memory() - os::available_memory();
>> }
>>
>>
>> This function does not work well in a containerized environment, as the amount of physical memory may change. To understand why, we must look under the hood.
>>
>> ```c++
>> julong os::used_memory() {
>> return os::physical_memory() - os::available_memory();
>> }
>>
>> // can be expanded into
>>
>> julong os::used_memory() {
>> // The os::physical_memory() call
>> julong mem_physical1 = OSContainer::memory_limit_in_bytes();
>> // The os::available_memory() call
>> julong mem_used = OSContainer::memory_usage_in_bytes();
>> julong mem_physical2 = OSContainer::memory_limit_in_bytes();
>>
>> // Uh-oh: mem_physical1 may differ from mem_physical2 at this point
>> // That means that this number is wrong
>> return mem_physical1 - (mem_physical2 - mem_used);
>> }
>>
>>
>> The fix is to expose OSContainer::memory_usage_in_bytes if it's available, as this call does not depend on OSContainer::memory_limit_in_bytes. The default implementation will use the naïve implementation.
>
> Johan Sjölen has updated the pull request incrementally with one additional commit since the last revision:
>
> Ifdef instead
BTW does anyone know whats the deal with os::physical_memory vs os::Linux::physical_memory on Linux? The former is not cgroup-aware, the latter is. Why do we have two variants?
-------------
PR Comment: https://git.openjdk.org/jdk/pull/19772#issuecomment-2179946302
More information about the hotspot-runtime-dev
mailing list