Open
Description
Split from #34944 (comment)
We should improve this implementation to support illumos properly, so it doesn't require setting the upper limit for heap memory alloc.
With linux procfs we get more accurate or up-to-date stats than sysconf. That's why it's only used in fallback. Since on illumos procfs is binary based, it bails out early from ReadMemAvailable()
function.
If there are similar concerns with sysconf() on illumos, kstat might be more accurate; something like this:
#elif defined(__sun)
// Use kstat to get available memory on Illumos
kstat_ctl_t *kc;
kstat_t *ksp;
kstat_named_t *knp;
uint64_t free_memory = 0;
if ((kc = kstat_open()) != NULL) {
if ((ksp = kstat_lookup(kc, "unix", 0, "system_pages")) != NULL) {
if (kstat_read(kc, ksp, NULL) != -1) {
if ((knp = (kstat_named_t *)kstat_data_lookup(ksp, "pagesfree")) != NULL) {
free_memory = (uint64_t)knp->value.ui64 * sysconf(_SC_PAGESIZE);
}
}
}
kstat_close(kc);
}
if (free_memory == 0) available = sysconf(SYSCONF_PAGES) * sysconf(_SC_PAGE_SIZE);
available = free_memory;