12.12. Optimaliseren met sysctl

sysctl(8) is een interface waarmee veranderingen gemaakt kunnen worden aan een draaiend FreeBSD-systeem. Er zijn onder meer vele geavanceerde opties voor de TCP/IP-stack en het virtuele geheugensysteem, waarmee een ervaren systeembeheerder de systeemprestaties drastisch kan verbeteren. Met sysctl(8) kunnen meer dan vijfhonderd systeemvariabelen opgevraagd en ingesteld worden.

In essentie heeft sysctl(8) twee functies: het lezen en wijzigen van systeeminstellingen.

Om alle leesbare variabelen te tonen:

% sysctl -a

Om een bepaalde variabele op te vragen, bijvoorbeeld kern.maxproc:

% sysctl kern.maxproc
kern.maxproc: 1044

Om een bepaalde variabele toe te kennen (te wijzigen), is de syntaxis variable=value:

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

Waarden van sysctl-variabelen zijn doorgaans strings (tekst), getallen of booleans (1 als waar, 0 als onwaar).

Om automatisch variabelen in te stellen als de machine start, kunnen ze toegevoegd worden aan /etc/sysctl.conf. Meer informatie staat in sysctl.conf(5) en Paragraaf 12.11.3.

12.12.1. sysctl(8) alleen-lezen

Geschreven door Tom Rhodes.

In sommige gevallen is het wenselijk om sysctl(8)-waarden die alleen-lezen zijn toch te wijzigen. Hoewel dit soms onontkoombaar is, kan het alleen bij een (her)start gedaan worden.

Op sommige laptops is bijvoorbeeld het apparaat cardbus(4) niet in staat om geheugenregio's af te tasten, met als gevolg foutmeldingen als:

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

In dergelijke gevallen moeten er meestal enkele sysctl(8)-instellingen gewijzigd worden die alleen-lezen zijn en een standaardwaarde hebben. Dit kan bereikt worden door sysctl(8) “OIDs” in de lokale /boot/loader.conf te zetten. Standaardinstellingen staan in /boot/defaults/loader.conf.

Om het bovenstaande probleem op te lossen moet in /boot/loader.conf hw.pci.allow_unsupported_io_range=1 ingesteld worden. Dan werkt cardbus(4) wel goed.