--- usr/lib/byobu/memory.orig 2016-09-15 19:22:48 UTC +++ usr/lib/byobu/memory @@ -26,16 +26,35 @@ __memory_detail() { __memory() { local free="" total="" buffers="" cached="" local kb_main_used=0 buffers_plus_cached=0 fo_buffers=0 fo_cached=0 - if [ -r /proc/meminfo ]; then - while read tok val unit; do - case "$tok" in - MemTotal:) total=${val};; - MemFree:) free=${val};; - Buffers:) buffers=${val};; - Cached:) cached=${val};; - esac - [ -n "${free}" -a -n "${total}" -a -n "${buffers}" -a -n "${cached}" ] && break; - done < /proc/meminfo + + if [ $(uname) = "Linux" ]; then + if [ -r /proc/meminfo ]; then + while read tok val unit; do + case "$tok" in + MemTotal:) total=${val};; + MemFree:) free=${val};; + Buffers:) buffers=${val};; + Cached:) cached=${val};; + esac + [ -n "${free}" -a -n "${total}" -a -n "${buffers}" -a -n "${cached}" ] && break; + done < /proc/meminfo + fi + elif [ $(uname) = "FreeBSD" ]; then + # FreeBSD support + mem_phys=$(sysctl -n hw.physmem) + page_size=$(sysctl -n hw.pagesize) + mem_inactive=$(($(sysctl -n vm.stats.vm.v_inactive_count)*$page_size)) + mem_cache=$(($(sysctl -n vm.stats.vm.v_cache_count)*$page_size)) + mem_free=$(($(sysctl -n vm.stats.vm.v_free_count)*$page_size)) + + mem_avail=$(($mem_inactive+$mem_cache+$mem_free)) + mem_used=$(($mem_phys-$mem_avail)) + + total=$(($mem_phys/1024)) + free=$(($mem_avail/1024)) + + buffers=0 + cached=0 elif eval $BYOBU_TEST vm_stat >/dev/null 2>&1; then # MacOS support # calculation borrowed from http://apple.stackexchange.com/a/48195/18857 @@ -44,16 +63,18 @@ __memory() { speculative_blocks=$(vm_stat | grep speculative | awk '{ print $3 }' | sed -e 's/\.//') free=$((($free_blocks+speculative_blocks)*4)) inactive=$(($inactive_blocks*4)) - total=$((($free+$inactive))) + total=$(($free+$inactive)) buffers=0 cached=0 fi - kb_main_used=$(($total-$free)) - buffers_plus_cached=$(($buffers+$cached)) - # "free output" buffers and cache (output from 'free') - fo_buffers=$(($kb_main_used - $buffers_plus_cached)) - fpdiv $((100*${fo_buffers})) "${total}" 0; - usage=${_RET} + + kb_main_used=$(($total-$free)) + buffers_plus_cached=$(($buffers+$cached)) + # "free output" buffers and cache (output from 'free') + fo_buffers=$(($kb_main_used - $buffers_plus_cached)) + fpdiv $((100*${fo_buffers})) "${total}" 0; + usage=${_RET} + if [ $total -ge 1048576 ]; then fpdiv "$total" 1048567 1 total=${_RET}