RFR: 8305770: os::Linux::available_memory() should refer MemAvailable in /proc/meminfo [v5]
David Holmes
dholmes at openjdk.org
Thu May 11 04:21:45 UTC 2023
On Tue, 9 May 2023 08:36:35 GMT, Yasumasa Suenaga <ysuenaga at openjdk.org> wrote:
>> `os::Linux::available_memory()` returns available memory from cgroups or sysinfo(2). In case of the process which run on out of container, that value is based on `freeram` from sysinfo(2).
>>
>> `freeram` is equivalent to `MemFree` in `/proc/meminfo` [1]. However it means just a free RAM. We should use `MemAvailable` when we want to know how much memory is available for the process [2]. `MemAvailable` is available in modern Linux kernel, and it has been backported some older kernels (e.g. RHEL). In `sar` from sysstat, it refers that value and shows it as `kbavail` [3].
>>
>> AFAIK PhysicalMemory event in JFR depends on `os::Linux::available_memory()`, and it is used in automated analysis in JMC. So the JFR/JMC user could misunderstand physical memory was exhausted even if the memory was available enough.
>>
>> [1] https://github.com/torvalds/linux/blob/c9c3395d5e3dcc6daee66c6908354d47bf98cb0c/fs/proc/meminfo.c#L59
>> [2] https://docs.kernel.org/filesystems/proc.html?highlight=memavailable
>> [3] https://github.com/sysstat/sysstat/blob/ac1df71ca252c158e8d418ded93e5ed52f5e8765/rd_stats.c#L325-L328
>
> Yasumasa Suenaga has updated the pull request incrementally with one additional commit since the last revision:
>
> Move description for MemFree and MemAvailable to os.hpp
I will pre-approve for expediency but have suggested an alternate comment.
Thanks.
src/hotspot/share/runtime/os.hpp line 316:
> 314: // than free memory (MemFree in /proc/meminfo) because Linux would use
> 315: // free memory aggressively (e.g. caches).
> 316: // Thus we distinguish free memory and available memory in Linux.
May I suggest a slight refocus:
// On some platforms there is a distinction between "available" memory and "free" memory.
// For example, on Linux, "available" memory (`MemAvailable` in `/proc/meminfo`) is greater
// than "free" memory (`MemFree` in `/proc/meminfo`) because Linux can free memory
// aggressively (e.g. clear caches) so that it becomes available.
-------------
Marked as reviewed by dholmes (Reviewer).
PR Review: https://git.openjdk.org/jdk/pull/13398#pullrequestreview-1421728680
PR Review Comment: https://git.openjdk.org/jdk/pull/13398#discussion_r1190617239
More information about the hotspot-compiler-dev
mailing list