6.11. 用 sysctl 进行调整

sysctl(8) 是一个允许你改变正在运行中的 FreeBSD 系统的接口。它包含一些 TCP/IP 堆栈和虚拟内存系统的高级选项,这可以让有经验的管理员提高引人注目的系统性能。用 sysctl(8) 可以读取设置超过五百个系统变量。

基于这点,sysctl(8) 提供两个功能:读取和修改系统设置。

查看所有可读变量:

% sysctl -a

读一个指定的变量,例如 kern.maxproc

% sysctl kern.maxproc
kern.maxproc: 1044

要设置一个指定的变量,直接用 variable=value 这样的语法:

# sysctl kern.maxfiles=5000
kern.maxfiles: 2088 -> 5000

sysctl 变量的设置通常是字符串、数字或者布尔型。(布尔型用 1 来表示'yes',用 0 来表示'no')。

6.11.1. 只读的 sysctl(8)

Contributed by Tom Rhodes.

有时想要修改只读的 sysctl(8) 的值。有时这不被推荐,有时也是不可避免的。

例如一些膝上型电脑的 cardbus(4) 设备不会探测内存范围,并且产生看似于这样的错误:

cbb0: Could not map register memory
device_probe_and_attach: cbb0 attach returned 12

像上面的错误通常需要修改一些只读的 sysctl(8) 默认设置。要实现这点,用户可以在本地的 /boot/loader.conf.local 里面放一个 sysctl(8) ``OIDs''。那些设置定位在 /boot/defaults/loader.conf 文件中。

修复上面的问题用户需要在刚才所说的文件中设置 hw.pci.allow_unsupported_io_range=1。现在 cardbus(4) 就会正常的工作了。