From 1808c31c0501ef1c705c71221dca0fd5f665173d Mon Sep 17 00:00:00 2001 From: Donald Buczek Date: Fri, 18 Mar 2022 22:02:48 +0100 Subject: [PATCH] web: Improve memory display The truncation of '1500 GB' to (integer) '1 TB' is missleading. Make sure, we show a decimal place. Also use binary prefixes (e.g. KiB instead of kB) and correct the computation to binary prefixes where it is wrong. --- web/pages/mxq/mxq.in | 54 ++++++++++++++++++-------------------------- 1 file changed, 22 insertions(+), 32 deletions(-) diff --git a/web/pages/mxq/mxq.in b/web/pages/mxq/mxq.in index f91d6918..eac6ac1f 100755 --- a/web/pages/mxq/mxq.in +++ b/web/pages/mxq/mxq.in @@ -135,29 +135,19 @@ sub humanSeconds { } sub size { - my $s = shift; - my $n = shift; - defined($n) or $n=1; - $s == 0 and return '0 B'; - - my @T=(); - for (my $f = 4; $f >= 0; $f--) { - my $t = int($s/(1000**$f)); - push @T, ($t > 0) ? $t : 0; # TB/GB/MB/Kb/B - $s -= $t*(1000**$f); - } - my @L; - for my $x ('TB','GB','MB','kB','B') { - my $y = shift @T; - if ($y != 0) { - if (defined($n)) { - $n--; - last if ($n < 0); - } - push @L,"$y $x"; - } - } - return join(' ',@L); + # ' 0 B ' + # ' 1023 B ' + # ' 1.0 KiB' + # '1023.9 MiB' + # ' 1.0 GiB' + + my ($s) = @_; + $s < 1024 and return sprintf('%6d B ', $s); + for my $unit (qw(KiB MiB GiB TiB PiB EiB ZiB YiB)) { + $s /= 1024; + $s < 1024 and return sprintf ('%6.1f %s', $s, $unit); + } + return sprintf('%6.1f %s', $s, 'YiB'); } sub days { @@ -708,9 +698,9 @@ sub group_table { $q->td({class=>'number'},$q->a({href=>selfurl("/group/$group_id")},$group_id)), $q->td($group_name), $q->td({class=>'number'},$job_threads), - $q->td({class=>'number'},size($job_memory*1000**2)), + $q->td({class=>'number'},size($job_memory*1048576)), $q->td({class=>'number'},days($job_time*60)), - $q->td({class=>'number'}, $job_tmpdir_size ? size($job_tmpdir_size*1000*1000*1000) : '-'), + $q->td({class=>'number'}, $job_tmpdir_size ? size($job_tmpdir_size*1073741824) : '-'), $q->td({class=>'number'}, $job_gpu ? $job_gpu : ""), $q->td($q->a({href=>my_url('groups',{user_name=>$user_name})},$user_name)), $q->td(group_status($group_status)), @@ -777,8 +767,8 @@ sub group_table { $q->td({class=>'number'},$q->a({href=>selfurl("/group/$group_id")},$group_id)), $q->td($group_name), $q->td({class=>'number'},$job_threads), - $q->td({class=>'number'},size($job_memory*1000**2)), - $q->td({class=>'number'},size($stats_max_sumrss*1000)), + $q->td({class=>'number'},size($job_memory*1048576)), + $q->td({class=>'number'},size($stats_max_sumrss*1024)), $q->td({class=>'number'},humanSeconds($job_time*60)), $q->td({class=>'number'},humanSeconds($stats_run_sec+$stats_idle_sec,2)), $q->td($q->a({href=>my_url('groups',{user_name=>$user_name})},$user_name)), @@ -908,15 +898,15 @@ sub server() { # $q->td($pid_starttime), $q->td({class=>'number'},$daemon_pid), $q->td({class=>'number'},$daemon_slots), - $q->td({class=>'number'},size($daemon_memory*1000000)), + $q->td({class=>'number'},size($daemon_memory*1048576)), $q->td({class=>'number'},$daemon_gpus_max), $q->td({class=>'number'},$daemon_maxtime ? $daemon_maxtime : ''), - $q->td({class=>'number'},size($daemon_memory_limit_slot_soft*1000000)), + $q->td({class=>'number'},size($daemon_memory_limit_slot_soft*1048576)), # $q->td({class=>'number'},$daemon_memory_limit_slot_hard), $q->td({class=>'number'},$daemon_jobs_running), $q->td({class=>'number'},$daemon_slots_running), $q->td({class=>'number'},$daemon_threads_running), - $q->td({class=>'number'},size($daemon_memory_used*1000000)), + $q->td({class=>'number'},size($daemon_memory_used*1048576)), $q->td({class=>'number'},$daemon_gpus_used), # $q->td($mtime), # $q->td($daemon_start), @@ -933,14 +923,14 @@ sub server() { $q->td({class=>'center', colspan=>3},$S{servers}.' servers'), $q->td($dist), $q->td({class=>'center', colspan=>3},$S{daemon_slots}.' cores'), - $q->td({class=>'number'},size($S{daemon_memory_sum}*1000**2)), + $q->td({class=>'number'},size($S{daemon_memory_sum}*1048576)), $q->td({class=>'number'},$S{daemon_gpus_max_sum}), $q->td(' '), $q->td(' '), $q->td(' '), $q->td({class=>'number'},$S{daemon_slots_running}), $q->td(' '), - $q->td({class=>'number'},size($S{daemon_memory_used_sum}*1000**2)), + $q->td({class=>'number'},size($S{daemon_memory_used_sum}*1048576)), $q->td({class=>'number'},$S{daemon_gpus_used_sum}) );