bytes: use bytes for everything...

Convert Linux memory values to bytes rather than reducing the
granularity of every other OS which reports memory use in
bytes.

The previous method just made everything confusing when it
needn't be.
This commit is contained in:
Alastair Poole 2020-06-05 15:32:11 +01:00
parent c9a8d114df
commit f61e780f0b
4 changed files with 31 additions and 47 deletions

View File

@ -93,14 +93,6 @@
#define RESULTS_MEM_GB 0x80 #define RESULTS_MEM_GB 0x80
#define RESULTS_CPU_CORES 0x100 #define RESULTS_CPU_CORES 0x100
#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__OpenBSD__)
static void
_memsize_bytes_to_kb(unsigned long *bytes)
{
*bytes /= 1024;
}
#endif
#if defined(__linux__) #if defined(__linux__)
static char * static char *
file_contents(const char *path) file_contents(const char *path)
@ -490,6 +482,14 @@ _memory_usage_get(meminfo_t *memory)
memory->used = memory->total - tmp_free - memory->cached - memory->buffered; memory->used = memory->total - tmp_free - memory->cached - memory->buffered;
memory->swap_used = memory->swap_total - swap_free; memory->swap_used = memory->swap_total - swap_free;
memory->total *= 1024;
memory->used *= 1024;
memory->buffered *= 1024;
memory->cached *= 1024;
memory->shared *= 1024;
memory->swap_total *= 1024;
memory->swap_used *= 1024;
fclose(f); fclose(f);
#elif defined(__FreeBSD__) || defined(__DragonFly__) #elif defined(__FreeBSD__) || defined(__DragonFly__)
unsigned int free = 0, active = 0, inactive = 0, wired = 0; unsigned int free = 0, active = 0, inactive = 0, wired = 0;
@ -518,19 +518,14 @@ _memory_usage_get(meminfo_t *memory)
if ((buffered = _sysctlfromname("vfs.bufspace", mib, 2, &len)) < 0) if ((buffered = _sysctlfromname("vfs.bufspace", mib, 2, &len)) < 0)
return; return;
_memsize_bytes_to_kb(&memory->total);
memory->used = ((active + wired + cached) * page_size); memory->used = ((active + wired + cached) * page_size);
_memsize_bytes_to_kb(&memory->used);
memory->buffered = buffered; memory->buffered = buffered;
_memsize_bytes_to_kb(&memory->buffered);
memory->cached = (cached * page_size); memory->cached = (cached * page_size);
_memsize_bytes_to_kb(&memory->cached);
result = _sysctlfromname("vm.swap_total", mib, 2, &len); result = _sysctlfromname("vm.swap_total", mib, 2, &len);
if (result < 0) if (result < 0)
return; return;
memory->swap_total = result;
memory->swap_total = (result / 1024);
miblen = 3; miblen = 3;
if (sysctlnametomib("vm.swap_info", mib, &miblen) == -1) return; if (sysctlnametomib("vm.swap_info", mib, &miblen) == -1) return;
@ -547,9 +542,6 @@ _memory_usage_get(meminfo_t *memory)
memory->swap_used += (unsigned long) xsw.xsw_used * page_size; memory->swap_used += (unsigned long) xsw.xsw_used * page_size;
} }
memory->swap_used >>= 10;
#elif defined(__OpenBSD__) #elif defined(__OpenBSD__)
static int mib[] = { CTL_HW, HW_PHYSMEM64 }; static int mib[] = { CTL_HW, HW_PHYSMEM64 };
static int bcstats_mib[] = { CTL_VFS, VFS_GENERIC, VFS_BCACHESTAT }; static int bcstats_mib[] = { CTL_VFS, VFS_GENERIC, VFS_BCACHESTAT };
@ -592,23 +584,17 @@ _memory_usage_get(meminfo_t *memory)
memory->swap_total += (swdev[i].se_nblks / (1024 / DEV_BSIZE)); memory->swap_total += (swdev[i].se_nblks / (1024 / DEV_BSIZE));
} }
} }
memory->swap_total *= 1024;
memory->swap_used *= 1024;
swap_out: swap_out:
if (swdev) if (swdev)
free(swdev); free(swdev);
memory->total /= 1024;
memory->cached = (uvmexp.pagesize * bcstats.numbufpages); memory->cached = (uvmexp.pagesize * bcstats.numbufpages);
_memsize_bytes_to_kb(&memory->cached);
memory->used = (uvmexp.active * uvmexp.pagesize); memory->used = (uvmexp.active * uvmexp.pagesize);
_memsize_bytes_to_kb(&memory->used);
memory->buffered = (uvmexp.pagesize * (uvmexp.npages - uvmexp.free)); memory->buffered = (uvmexp.pagesize * (uvmexp.npages - uvmexp.free));
_memsize_bytes_to_kb(&memory->buffered);
memory->shared = (uvmexp.pagesize * uvmexp.wired); memory->shared = (uvmexp.pagesize * uvmexp.wired);
_memsize_bytes_to_kb(&memory->shared);
#elif defined(__MacOS__) #elif defined(__MacOS__)
int mib[2] = { CTL_HW, HW_MEMSIZE }; int mib[2] = { CTL_HW, HW_MEMSIZE };
size_t total; size_t total;
@ -624,20 +610,15 @@ swap_out:
mach_port = mach_host_self(); mach_port = mach_host_self();
count = sizeof(vm_stats) / sizeof(natural_t); count = sizeof(vm_stats) / sizeof(natural_t);
total >>= 10;
memory->total = total; memory->total = total;
if (host_page_size(mach_port, &page_size) == KERN_SUCCESS && if (host_page_size(mach_port, &page_size) == KERN_SUCCESS &&
host_statistics64(mach_port, HOST_VM_INFO, (host_info64_t)&vm_stats, &count) == KERN_SUCCESS) host_statistics64(mach_port, HOST_VM_INFO, (host_info64_t)&vm_stats, &count) == KERN_SUCCESS)
{ {
memory->used = vm_stats.active_count + vm_stats.inactive_count + vm_stats.wire_count * page_size; memory->used = vm_stats.active_count + vm_stats.inactive_count + vm_stats.wire_count * page_size;
memory->used >>= 10;
memory->cached = vm_stats.active_count * page_size; memory->cached = vm_stats.active_count * page_size;
memory->cached >>= 10;
memory->shared = vm_stats.wire_count * page_size; memory->shared = vm_stats.wire_count * page_size;
memory->shared >>= 10;
memory->buffered = vm_stats.inactive_count * page_size; memory->buffered = vm_stats.inactive_count * page_size;
memory->buffered >>= 10;
} }
total = sizeof(xsu); total = sizeof(xsu);
@ -646,6 +627,8 @@ swap_out:
memory->swap_total = xsu.xsu_total; memory->swap_total = xsu.xsu_total;
memory->swap_used = xsu.xsu_used; memory->swap_used = xsu.xsu_used;
} }
memory->swap_total *= 1024;
memory->swap_used *= 1024;
#endif #endif
} }

View File

@ -1464,12 +1464,13 @@ _evisum_resize_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
} }
const char * const char *
evisum_size_format(unsigned long value) evisum_size_format(unsigned long bytes)
{ {
const char *s, *unit = "BKMGTPEZY"; const char *s, *unit = "BKMGTPEZY";
unsigned long int powi = 1; unsigned long int value, powi = 1;
unsigned int precision = 2, powj = 1; unsigned int precision = 2, powj = 1;
value = bytes;
while (value > 1024) while (value > 1024)
{ {
if ((value / 1024) < powi) break; if ((value / 1024) < powi) break;
@ -1484,7 +1485,7 @@ evisum_size_format(unsigned long value)
{ {
powj *= 10; powj *= 10;
if ((value / powi) < powj) break; if ((value / powi) < powj) break;
--precision; --precision;
} }
s = eina_slstr_printf("%1.*f %c", precision, (double) value / powi, *unit); s = eina_slstr_printf("%1.*f %c", precision, (double) value / powi, *unit);
@ -1632,8 +1633,8 @@ _sys_info_all_poll_feedback_cb(void *data, Ecore_Thread *thread, void *msg)
value = sysinfo->memory.used / ratio; value = sysinfo->memory.used / ratio;
elm_progressbar_value_set(progress, value / 100); elm_progressbar_value_set(progress, value / 100);
elm_progressbar_unit_format_set(progress, eina_slstr_printf("%s / %s", elm_progressbar_unit_format_set(progress, eina_slstr_printf("%s / %s",
evisum_size_format(sysinfo->memory.used << 10), evisum_size_format(sysinfo->memory.used),
evisum_size_format(sysinfo->memory.total << 10))); evisum_size_format(sysinfo->memory.total)));
out: out:
free(sysinfo->cores); free(sysinfo->cores);
free(sysinfo); free(sysinfo);

View File

@ -121,6 +121,6 @@ const char *
evisum_icon_path_get(const char *name); evisum_icon_path_get(const char *name);
const char * const char *
evisum_size_format(unsigned long value); evisum_size_format(unsigned long bytes);
#endif #endif

View File

@ -142,8 +142,8 @@ ui_tab_memory_update(Ui *ui, Sys_Info *sysinfo)
elm_progressbar_value_set(progress, value / 100); elm_progressbar_value_set(progress, value / 100);
elm_progressbar_unit_format_set(progress, elm_progressbar_unit_format_set(progress,
eina_slstr_printf("%s / %s (%1.0f &#37;)", eina_slstr_printf("%s / %s (%1.0f &#37;)",
evisum_size_format(sysinfo->memory.used << 10), evisum_size_format(sysinfo->memory.used),
evisum_size_format(sysinfo->memory.total << 10), evisum_size_format(sysinfo->memory.total),
value)); value));
progress = ui->progress_mem_cached; progress = ui->progress_mem_cached;
@ -152,8 +152,8 @@ ui_tab_memory_update(Ui *ui, Sys_Info *sysinfo)
elm_progressbar_value_set(progress, value / 100); elm_progressbar_value_set(progress, value / 100);
elm_progressbar_unit_format_set(progress, elm_progressbar_unit_format_set(progress,
eina_slstr_printf("%s / %s (%1.0f &#37;)", eina_slstr_printf("%s / %s (%1.0f &#37;)",
evisum_size_format(sysinfo->memory.cached << 10), evisum_size_format(sysinfo->memory.cached),
evisum_size_format(sysinfo->memory.total << 10), evisum_size_format(sysinfo->memory.total),
value)); value));
progress = ui->progress_mem_buffered; progress = ui->progress_mem_buffered;
@ -162,8 +162,8 @@ ui_tab_memory_update(Ui *ui, Sys_Info *sysinfo)
elm_progressbar_value_set(progress, value / 100); elm_progressbar_value_set(progress, value / 100);
elm_progressbar_unit_format_set(progress, elm_progressbar_unit_format_set(progress,
eina_slstr_printf("%s / %s (%1.0f &#37;)", eina_slstr_printf("%s / %s (%1.0f &#37;)",
evisum_size_format(sysinfo->memory.buffered << 10), evisum_size_format(sysinfo->memory.buffered),
evisum_size_format(sysinfo->memory.total << 10), evisum_size_format(sysinfo->memory.total),
value)); value));
progress = ui->progress_mem_shared; progress = ui->progress_mem_shared;
@ -172,8 +172,8 @@ ui_tab_memory_update(Ui *ui, Sys_Info *sysinfo)
elm_progressbar_value_set(progress, value / 100); elm_progressbar_value_set(progress, value / 100);
elm_progressbar_unit_format_set(progress, elm_progressbar_unit_format_set(progress,
eina_slstr_printf("%s / %s (%1.0f &#37;)", eina_slstr_printf("%s / %s (%1.0f &#37;)",
evisum_size_format(sysinfo->memory.shared << 10), evisum_size_format(sysinfo->memory.shared),
evisum_size_format(sysinfo->memory.total << 10), evisum_size_format(sysinfo->memory.total),
value)); value));
progress = ui->progress_mem_swap; progress = ui->progress_mem_swap;
@ -187,8 +187,8 @@ ui_tab_memory_update(Ui *ui, Sys_Info *sysinfo)
elm_progressbar_value_set(progress, value / 100); elm_progressbar_value_set(progress, value / 100);
elm_progressbar_unit_format_set(progress, elm_progressbar_unit_format_set(progress,
eina_slstr_printf("%s / %s (%1.0f &#37;)", eina_slstr_printf("%s / %s (%1.0f &#37;)",
evisum_size_format(sysinfo->memory.swap_used << 10), evisum_size_format(sysinfo->memory.swap_used),
evisum_size_format(sysinfo->memory.swap_total << 10), evisum_size_format(sysinfo->memory.swap_total),
value)); value));
} }