FreeBSD-BG
Tunning FreeBSD - на български
 
 

1. Настройване чрез sysctl

Инструментът sysctl (8) позволява да се правят промени в работеща FreeBSD система , или казано по
друг начин предлага интерфейс към ядрото . Това включва доста от опцийте на TCP/IP стека ( source online ) и
подсистемата за управление на виртуалната памет ( source online ), което драстично може да подобри
поизводителността на системата . Повече от петстотин системни променливи ( техните стойности) могат да
бъдат четени и променяни чрез sysctl (8) (бел.пр. за пръв се появява в 4.4BSD и понастоящем съществува и в
Linux , но с други параметри).

В основата си , sysctl (8) служи за четене и промяна на системните настройки .

За да се видят всички настоящи стойностти на променливите в системата:

    % sysctl -a

( бел.пр. конкретният им брой и тип зависи от системата която ползвате . За справка някои от тези
променливи могат да се видят от хипертекстовия справочник на sysctl (8) )

За да се прочете стойността на дадена променлива ( например , kern.maxproc) :

    % sysctl kern.maxproc
kern.maxproc: 1044

За да се зададе стойност на дадена променлива :

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

Също така тези стойности могат да бъдат зададени в /etc/sysctl.conf (примерни entry-та)

    kern.maxfiles=65536
kern.maxfilesperproc=32768
# изключване на log-ването на сигнал 11 и позволяването на
# някои Linux приложенията да разберат че наистина работят под FreeBSD.
kern.logsigexit=0
compat.linux.osname=FreeBSD
compat.linux.osrelease=4.3-STABLE
# трябва да бъде зареден Application Binary Interface - ABI:linux
# boot-time в /etc/rc.conf се поставя linux_enable="YES" ,
# или run-time изпълняваме /usr/bin/linux .
# Има някои особености при подкарването на статично и динамично
# линкнати Linux приложения и успеха не е гарантиран , но все пак
# има опит за постигане на бинарна съвместимост

rc-скрипта /etc/rc.sysctl стаrтира sysctl всеки път при зареждане на системата (boot-time) с
конфигурационен файл /etc/sysctl.conf , но естествено промяна на стойностите може да се прави и
run-time. (има някои изключенияза които промяната няма ефект run-time). Стойностите на sysctl
променливите могат да бъдат стрингове , числа или булеви стойности , за последните 1 е yes , 0 е no.

/etc/sysctl.conf доста прилича на /etc/rc.conf . Стойностите се съхраняват във формата на
променлива=стойност
. Зададените стойности влизат в сила след като системата влезе в
многопотребителски режим ( multi-user mode). Не всички променливи обаче могат да бъдат променяни
в този режим.

2. Настройка на дисковете

2.1 Sysctl променливи (отнасящи се до дисковете)

2.1.1 vfs.vmiodirenable

Стойността на променливата vfs.vmiodirenable по подразбиране е 0 , но може да се промени на 1 . Тя
контролира кеширането на директорийте от системата . Повечето на директорийте са малки и се част
от тях се разполага (обикновено в блокове по 1К) на файловата система, а другата (обикновено 512 байта)
в буферния кеш. Обаче , ползвайки настройката по подразбиране буферния кеш ще кешира фиксиран брой
(обикновено недостатъчен) директорий , дори и да имаме голямо количество памет . Настройването на
този параметър с sysctl позволява на буферния кеш да използва VM Page Cache ( страничния механизъм
за кеширане на подсистемата за управление на виртуалната памет). Предимството е , че сега цялата
налична памет е на разположение за кеширане на директорий. Недостатъка е , че базовия минимум на
паметта използвана за кеширане на директорий е размера на физическата страница (обикновено 4К) за
разлика от 512 байта ( буферния кеш). Препоръчва се тази опция да се включи ако се използват някои
услуги (services) които изискват манипулирането на голям брой файлове . Такива са кеширането на web
страници и управлението на големи пощенски и новинарски системи . Включването на тази опция по
принцип не би влошило производителността (дори с известната загуба на памет от съхраняването на
данни в страници по 4К вместо 512 байтови) , но все пак трябва да се експериментира за да се установи как
се представя системата .

2.1.2 hw.ata.wc

FreeBSD 4.3 идва с изключено кеширане в буфера за дисковете с IDE контролери . Това намалява
скоростта за запис на тези дискове , но е необходимо за да се запаси целостта на данните. Проблема е , че
тези дискове "лъжат" кога точно е завършил процеса на запис . Ако е включена тази опция (IDE write caching),
дисковете не само че няма да запишат данните в определения ред , но и понякога ще забавят записа върху
някои от блоковете при агресивна дискова активност . Прекъсването на токозахранването или случайното
увисване на системата в този момент може да причини сериозна вреда на файловата система ( и съответно
загуба на данни). Това е причината по подразбиране тази опция да бъде изключена. За съжаление това води
до драстично намаляване на производителността , и в следващото издание (release) ще бъде включена по
подразбиране . Стойността на тази променлива може да се провери чрез sysctl. Ако е изключена (имаща
стойност 0), може да се включи (1) , но това трябва да бъде направено от boot loader-а по време на
зареждането на системета . Опитите да се направи това след като ядрото е заредено , няма да имат ефект.
За повече информация вижте ata(4) .

2.2 Soft Updates

Програмата tunefs(8) може да бъде ползвана за прецизна настройка на файловата система . Тази
програма има множество опций , но за момента ни интересува смяната на състоянието на Soft Updates,
което се прави по следния начин :

    # tunefs -n enable /filesystem
# tunefs -n disable /filesystem

Докато е монтирана , файловата система не може да бъде модифицирана с tunefs(8) . Soft Updates да бъде
включва преди монтирането на дяловете , т.е. в еднопотребителски режим (single-user mode) .

Soft Updates драстично повишава производителността главно създаването и триенето на файлове , чрез
използването на кеша на паметта. Препоръчва се да се включи за всичките файлови системи. Има няколко
особености които трябва да се имат предвид :
първо , гарантира се целостта на файловата система в случай на увисване но трябват няколко секунди ,
дори минута докато се updatе-не физическия диск ;
второ, Soft Updates забавя освобождаването на блоковете на файловата система . Ако имате почти
препълнена файлова система (примерно: root filesystem) , предприемането на драстичен update върху нея
(примерно make installworld), може впоследствие да доведе до липса на свободно място и update-а да се провали .

3. Настройка на ядрото

3.1 Ограничения касаещи файлове и процеси

3.1.1 kern.maxfiles

Стойността на kern.maxfiles може да се увеличава и намалява в зависимост от системините
изисквания . Тази променлива показва максималния брой файлови дескриптори за системата .
Когато този брой се превиши се явява съобщение file: table is full . Всеки отворен файл , сокет или fifo
ползва по един файлов дескриптор .
Някои доста натоварени сървъри могат да изискват няколко хиляди файлови дескриптора , в зависимост от
броя на услугите (services) работещи едновременно в даден момент. По подразбиране стойността на
kern.maxfile
расте пропорционално на стойността на maxusers .

Забележка: Прекомпилирането на ядрото в съответствие с вашите нужди се счита , че е направено.

Това е превод с малки допълнения на последните 3 точки от глава 6-та на FreeBSD Handbook ,
също така за справки може да се ползва страницата с документация на FreeBSD .