#! /usr/local/bin/perl -w # # benchmark to compare the performance of BSD::Sysctl compared to # shelling out and running sysctl(8). # # Copyright (C) 2006 David Landgren, all rights reservedc. use strict; use lib qw( blib/lib blib/arch ); use BSD::Sysctl 'sysctl'; use Benchmark 'cmpthese'; my $iter = shift || -1; sub cp_time_perl { return sysctl('kern.cp_time'); } sub cp_time_system { return [`sysctl -n kern.cp_time`]; } my $p = cp_time_perl(); my $s = cp_time_system(); print " perl: @$p\nsystem: @$s\n"; cmpthese( $iter, { 'perl' => \&cp_time_perl, 'system' => \&cp_time_system, }, ); sub sysctl_perl { return sysctl($_[0]); } sub sysctl_system { return `sysctl -n $_[0]`; } cmpthese( $iter, { 'perl' => sub { sysctl_perl('kern.maxproc') }, 'system' => sub { sysctl_system('kern.maxproc') }, }, ); cmpthese( $iter, { 'perl' => sub { sysctl_perl('net.inet.tcp.syncache.rexmtlimit') }, 'system' => sub { sysctl_system('net.inet.tcp.syncache.rexmtlimit') }, }, );