Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add FreeBSD code to arc_summary and arcstat #9641

Merged
merged 1 commit into from
Nov 30, 2019
Merged
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
15 changes: 14 additions & 1 deletion cmd/arc_summary/arc_summary2
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,20 @@ from subprocess import Popen, PIPE
from decimal import Decimal as D


if sys.platform.startswith('linux'):
if sys.platform.startswith('freebsd'):
# Requires py27-sysctl on FreeBSD
import sysctl

def load_kstats(namespace):
"""Collect information on a specific subsystem of the ARC"""

base = 'kstat.zfs.misc.%s.' % namespace
return [(kstat.name, D(kstat.value)) for kstat in sysctl.filter(base)]

def load_tunables():
return dict((ctl.name, ctl.value) for ctl in sysctl.filter('vfs.zfs'))

elif sys.platform.startswith('linux'):

def load_kstats(namespace):
"""Collect information on a specific subsystem of the ARC"""
Expand Down
44 changes: 40 additions & 4 deletions cmd/arc_summary/arc_summary3
Original file line number Diff line number Diff line change
Expand Up @@ -80,10 +80,42 @@ parser.add_argument('-s', '--section', dest='section', help=SECTION_HELP)
ARGS = parser.parse_args()


if sys.platform.startswith('linux'):
KSTAT_PATH = '/proc/spl/kstat/zfs/'
SPL_PATH = '/sys/module/spl/parameters/'
TUNABLES_PATH = '/sys/module/zfs/parameters/'
if sys.platform.startswith('freebsd'):
# Requires py36-sysctl on FreeBSD
import sysctl

VDEV_CACHE_SIZE = 'vdev.cache_size'

def load_kstats(section):
base = 'kstat.zfs.misc.{section}.'.format(section=section)
# base is removed from the name
fmt = lambda kstat: '{name} : {value}'.format(name=kstat.name[len(base):],
value=kstat.value)
return [fmt(kstat) for kstat in sysctl.filter(base)]

def get_params(base):
cut = 8 # = len('vfs.zfs.')
return {ctl.name[cut:]: str(ctl.value) for ctl in sysctl.filter(base)}

def get_tunable_params():
return get_params('vfs.zfs')

def get_vdev_params():
return get_params('vfs.zfs.vdev')

def get_version_impl(request):
# FreeBSD reports versions for zpl and spa instead of zfs and spl.
name = {'zfs': 'zpl',
'spl': 'spa'}[request]
mib = 'vfs.zfs.version.{}'.format(name)
version = sysctl.filter(mib)[0].value
return '{} version {}'.format(name, version)

elif sys.platform.startswith('linux'):
KSTAT_PATH = '/proc/spl/kstat/zfs'
SPL_PATH = '/sys/module/spl/parameters'
TUNABLES_PATH = '/sys/module/zfs/parameters'

VDEV_CACHE_SIZE = 'zfs_vdev_cache_size'

def load_kstats(section):
Expand Down Expand Up @@ -720,6 +752,10 @@ def section_spl(*_):
and/or descriptions. This does not use kstats.
"""

if sys.platform.startswith('freebsd'):
# No SPL support in FreeBSD
return

spls = get_spl_params()
keylist = sorted(spls.keys())
print('Solaris Porting Layer (SPL):')
Expand Down
24 changes: 23 additions & 1 deletion cmd/arcstat/arcstat
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,29 @@ out = None
kstat = None


if sys.platform.startswith('linux'):
if sys.platform.startswith('freebsd'):
# Requires py27-sysctl on FreeBSD
import sysctl

def kstat_update():
global kstat

k = sysctl.filter('kstat.zfs.misc.arcstats')

if not k:
sys.exit(1)

kstat = {}

for s in k:
if not s:
continue

name, value = s.name, s.value
# Trims 'kstat.zfs.misc.arcstats' from the name
kstat[name[24:]] = Decimal(value)

elif sys.platform.startswith('linux'):
def kstat_update():
global kstat

Expand Down