Todo #14011 » memory-graph-updates.patch
src/etc/inc/globals.inc | ||
---|---|---|
82 | 82 |
'disablehelpicon' => false, |
83 | 83 |
'disablecrashreporter' => false, |
84 | 84 |
'debug' => false, |
85 |
'latest_config' => '22.8',
|
|
85 |
'latest_config' => '22.9',
|
|
86 | 86 |
'minimum_ram_warning' => '101', |
87 | 87 |
'minimum_ram_warning_text' => '128 MB', |
88 | 88 |
'wan_interface_name' => 'wan', |
src/etc/inc/rrd.inc | ||
---|---|---|
617 | 617 |
$rrdcreate .= "DS:free:GAUGE:$memvalid:0:10000000 "; |
618 | 618 |
$rrdcreate .= "DS:cache:GAUGE:$memvalid:0:10000000 "; |
619 | 619 |
$rrdcreate .= "DS:wire:GAUGE:$memvalid:0:10000000 "; |
620 |
$rrdcreate .= "DS:userwire:GAUGE:$memvalid:0:10000000 "; |
|
621 |
$rrdcreate .= "DS:laundry:GAUGE:$memvalid:0:10000000 "; |
|
622 |
$rrdcreate .= "DS:buffers:GAUGE:$memvalid:0:10000000 "; |
|
620 | 623 |
$rrdcreate .= "RRA:MIN:0.5:1:1200 "; |
621 | 624 |
$rrdcreate .= "RRA:MIN:0.5:5:720 "; |
622 | 625 |
$rrdcreate .= "RRA:MIN:0.5:60:1860 "; |
... | ... | |
639 | 642 |
mwexec("$rrdtool update $rrddbpath$ifname$mem N:U:U:U:U:U"); |
640 | 643 |
} |
641 | 644 | |
642 |
/* the Memory stats gathering function. */ |
|
643 |
$rrdupdatesh .= "MEM=`$sysctl -qn vm.stats.vm.v_page_count vm.stats.vm.v_active_count vm.stats.vm.v_inactive_count vm.stats.vm.v_free_count vm.stats.vm.v_cache_count vm.stats.vm.v_wire_count | "; |
|
644 |
$rrdupdatesh .= " $awk '{getline active;getline inactive;getline free;getline cache;getline wire;printf "; |
|
645 |
$rrdupdatesh .= "((active/$0) * 100)\":\"((inactive/$0) * 100)\":\"((free/$0) * 100)\":\"((cache/$0) * 100)\":\"(wire/$0 * 100)}'`\n"; |
|
645 |
/* Memory stats gathering function. */ |
|
646 |
$rrdupdatesh .= "MEM=`$sysctl -qn "; |
|
647 |
/* Total pages */ |
|
648 |
$rrdupdatesh .= "vm.stats.vm.v_page_count "; |
|
649 |
/* Active pages */ |
|
650 |
$rrdupdatesh .= "vm.stats.vm.v_active_count "; |
|
651 |
/* Inactive pages */ |
|
652 |
$rrdupdatesh .= "vm.stats.vm.v_inactive_count "; |
|
653 |
/* Free pages */ |
|
654 |
$rrdupdatesh .= "vm.stats.vm.v_free_count "; |
|
655 |
if (is_module_loaded('zfs.ko')) { |
|
656 |
/* If the system is using ZFS, use ARC size as "cache" (value is bytes, not pages) */ |
|
657 |
$rrdupdatesh .= "kstat.zfs.misc.arcstats.size "; |
|
658 |
} else { |
|
659 |
/* If the system is using UFS, use dirhash memory as "cache" (value is bytes, not pages) */ |
|
660 |
$rrdupdatesh .= "vfs.ufs.dirhash_mem "; |
|
661 |
} |
|
662 |
/* Wired pages */ |
|
663 |
$rrdupdatesh .= "vm.stats.vm.v_wire_count "; |
|
664 |
/* User wired pages */ |
|
665 |
$rrdupdatesh .= "vm.stats.vm.v_user_wire_count "; |
|
666 |
/* Laundy pages */ |
|
667 |
$rrdupdatesh .= "vm.stats.vm.v_laundry_count "; |
|
668 |
/* UFS Buffer space (value is in bytes, not pages) */ |
|
669 |
$rrdupdatesh .= "vfs.bufspace "; |
|
670 |
/* Page size for calculations */ |
|
671 |
$rrdupdatesh .= "hw.pagesize "; |
|
672 |
$rrdupdatesh .= " | "; |
|
673 |
/* Start the AWK code */ |
|
674 |
$rrdupdatesh .= " $awk '{"; |
|
675 |
/* Assign sysctl output to named variables */ |
|
676 |
$rrdupdatesh .= "getline active;getline inactive;getline free;getline cache;getline wire;getline userwire;getline laundry;getline buffers;getline pagesize;"; |
|
677 |
/* Divide cache and buffer values by page size so all values are in the same units */ |
|
678 |
$rrdupdatesh .= "cache=(cache/pagesize);buffers=(buffers/pagesize);"; |
|
679 |
/* Start of RRD-friendly output */ |
|
680 |
$rrdupdatesh .= "printf "; |
|
681 |
/* Calculate values as a percentage of total pages */ |
|
682 |
/* Active pages */ |
|
683 |
$rrdupdatesh .= "((active/$0) * 100)"; |
|
684 |
/* Inactive pages */ |
|
685 |
$rrdupdatesh .= "\":\"((inactive/$0) * 100)"; |
|
686 |
/* Free pages */ |
|
687 |
$rrdupdatesh .= "\":\"((free/$0) * 100)"; |
|
688 |
/* Cache (previously converted to pages) */ |
|
689 |
$rrdupdatesh .= "\":\"((cache/$0) * 100)"; |
|
690 |
/* Wired pages less cache and buffer pages (which are included in wired pages) */ |
|
691 |
$rrdupdatesh .= "\":\"((wire - (cache + buffers))/$0 * 100)"; |
|
692 |
/* User wired pages */ |
|
693 |
$rrdupdatesh .= "\":\"((userwire/$0) * 100)"; |
|
694 |
/* Laundry pages */ |
|
695 |
$rrdupdatesh .= "\":\"((laundry/$0) * 100)"; |
|
696 |
/* UFS Buffer space (previously converted to pages) */ |
|
697 |
$rrdupdatesh .= "\":\"((buffers/$0) * 100)"; |
|
698 |
/* Finish the AWK code */ |
|
699 |
$rrdupdatesh .= "}'`\n"; |
|
700 |
/* Update the database with new values */ |
|
646 | 701 |
$rrdupdatesh .= "$rrdtool update $rrddbpath$ifname$mem N:\${MEM}\n"; |
647 | 702 | |
648 | 703 |
/* End Memory statistics */ |
src/etc/inc/upgrade_config.inc | ||
---|---|---|
6768 | 6768 |
} |
6769 | 6769 |
} |
6770 | 6770 | |
6771 |
function upgrade_228_to_229() { |
|
6772 |
global $g; |
|
6773 |
/* Update System Memory RRD file with new data sources |
|
6774 |
* https://redmine.pfsense.org/issues/14011 |
|
6775 |
*/ |
|
6776 |
$rrddbpath = "/var/db/rrd/"; |
|
6777 |
$database = "system-memory.rrd"; |
|
6778 |
$rrdtool = "/usr/bin/nice -n20 /usr/local/bin/rrdtool"; |
|
6779 |
$rrdinterval = 60; |
|
6780 |
$valid = $rrdinterval * 2; |
|
6781 |
if (platform_booting()) { |
|
6782 |
echo "Migrating System Memory RRD file to new format\n"; |
|
6783 |
} |
|
6784 |
mwexec("$rrdtool tune {$rrddbpath}{$database} DS:userwire:GAUGE:{$valid}:0:10000000 2>&1"); |
|
6785 |
mwexec("$rrdtool tune {$rrddbpath}{$database} DS:laundry:GAUGE:{$valid}:0:10000000 2>&1"); |
|
6786 |
mwexec("$rrdtool tune {$rrddbpath}{$database} DS:buffers:GAUGE:{$valid}:0:10000000 2>&1"); |
|
6787 |
} |
|
6788 | ||
6771 | 6789 |
/* |
6772 | 6790 |
* Special function that is called independent of current config version. It's |
6773 | 6791 |
* a workaround to have config_upgrade running on older versions after next |
src/usr/local/www/includes/functions.inc.php | ||
---|---|---|
198 | 198 | |
199 | 199 |
function mem_usage() { |
200 | 200 |
$memUsage = "NA"; |
201 |
$totalMem = get_single_sysctl("vm.stats.vm.v_page_count"); |
|
201 |
$totalMem = (int) get_single_sysctl("vm.stats.vm.v_page_count");
|
|
202 | 202 |
if (is_numeric($totalMem)) { |
203 |
$inactiveMem = get_single_sysctl("vm.stats.vm.v_inactive_count"); |
|
204 |
$cachedMem = get_single_sysctl("vm.stats.vm.v_cache_count"); |
|
205 |
$freeMem = get_single_sysctl("vm.stats.vm.v_free_count"); |
|
203 |
/* Include inactive and laundry with free memory since they |
|
204 |
* could be freed under pressure. */ |
|
205 |
$inactiveMem = (int) get_single_sysctl("vm.stats.vm.v_inactive_count"); |
|
206 |
$laundryMem = (int) get_single_sysctl("vm.stats.vm.v_laundry_count"); |
|
207 |
$freeMem = (int) get_single_sysctl("vm.stats.vm.v_free_count"); |
|
206 | 208 |
if (is_numeric($inactiveMem) && |
207 |
is_numeric($cachedMem) &&
|
|
208 |
is_numeric($freeMem)) {
|
|
209 |
$usedMem = (int)$totalMem - ((int)$inactiveMem + (int)$cachedMem + (int)$freeMem);
|
|
209 |
is_numeric($laundryMem) &&
|
|
210 |
is_numeric($freeMem)) {
|
|
211 |
$usedMem = $totalMem - ($inactiveMem + $laundryMem + $freeMem);
|
|
210 | 212 |
$memUsage = round(($usedMem * 100) / $totalMem, 0); |
211 | 213 |
} |
212 | 214 |
} |