Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions src/pyinfra/facts/hardware.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,19 @@ def process(self, output):
bytes_per_page = data.get("bytes per page")
pages_managed = data.get("pages managed")

# FreeBSD doesn't report "pages managed", sum page categories instead
if not pages_managed:
page_keys = (
"pages active",
"pages inactive",
"pages wired down",
"pages free",
"pages in the laundry queue",
)
page_counts = [data.get(k, 0) for k in page_keys]
if any(page_counts):
pages_managed = sum(page_counts)

if bytes_per_page and pages_managed:
total_memory = (pages_managed * bytes_per_page) / 1024

Expand Down
53 changes: 53 additions & 0 deletions tests/facts/hardware.Memory/vmstat_freebsd.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
{
"command": "LANG=C vmstat -s",
"requires_command": "vmstat",
"output": [
"107554429 cpu context switches",
" 47080979 device interrupts",
" 840 software interrupts",
"203440363 traps",
"340127103 system calls",
" 21 kernel threads created",
" 1157535 fork() calls",
" 423271 vfork() calls",
" 56 rfork() calls",
" 0 swap pager pageins",
" 0 swap pager pages paged in",
" 0 swap pager pageouts",
" 0 swap pager pages paged out",
" 1563 vnode pager pageins",
" 18054 vnode pager pages paged in",
" 0 vnode pager pageouts",
" 0 vnode pager pages paged out",
" 0 page daemon wakeups",
" 5582796 pages examined by the page daemon",
" 0 clean page reclamation shortfalls",
" 0 pages reactivated by the page daemon",
" 59283848 copy-on-write faults",
" 44722 copy-on-write optimized faults",
"118833982 zero fill pages zeroed",
" 1840 zero fill pages prezeroed",
" 69392 intransit blocking page faults",
"215440199 total VM faults taken",
" 1105 page faults requiring I/O",
" 0 pages affected by kernel thread creation",
" 40483808 pages affected by fork()",
" 14790437 pages affected by vfork()",
" 1916 pages affected by rfork()",
"247980357 pages freed",
" 0 pages freed by daemon",
"163371857 pages freed by exiting processes",
" 1952 pages active",
" 13625 pages inactive",
" 0 pages in the laundry queue",
" 161005 pages wired down",
" 0 virtual user pages wired down",
" 3580 permanently allocated pages",
" 323984 pages free",
" 4096 bytes per page",
" 52953973 total name lookups",
" cache hits (87% pos + 12% neg) system 0% per-directory",
" deletions 0%, falsehits 0%, toolong 0%"
],
"fact": 1955
}