RFR: 8334489: Add function os::used_memory [v2]

Severin Gehwolf sgehwolf at openjdk.org
Wed Jun 19 18:57:22 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

src/hotspot/share/runtime/os.hpp line 341:

> 339: #ifdef LINUX
> 340:   static julong used_memory();
> 341: #endif

I don't understand. Now it's a linux only API? Wasn't the intention to have it available on all, but a shared impl for all except Linux, like in `os.cpp`?

Something like:

LINUX_ONLY(static julong pd_used_memory();)
...
julong os::used_memory() {
#ifdef LINUX
  return os::pd_used_memory();
#else
  return os::physical_memory() - os::available_memory();
#endif
}

-------------

PR Review Comment: https://git.openjdk.org/jdk/pull/19772#discussion_r1646597601


More information about the hotspot-runtime-dev mailing list