Динамично конфигуриране на ядрото на Linux от Владимир Джувинов <vd298@hotmail.com> Linux предлага възможност за динамично конфигуриране на част от
параметрите в ядрото на операционната система. Това позволява текущ
контрол над работата на виртуалната памет, файловата система и мрежовата
дейност, без да се налага рекомпилиране на ядрото или рестартиране на
компютъра. Динамичното конфигуриране на ядрото се извършва чрез
виртуалната /proc файлова система или системната функция sysctl.
Кой се нуждае от динамично конфигуриране на ядрото?
Динамичното конфигуриране не се препоръчва на компютри, които са слабо натоварени и рядко достигат лимита на капацитета си. В тези случаи то би било безсмислено, защото не биха се забелязали подобрения в работата. Разбира се, тази статия би представлявала интерес и за тези, които
ползват Linux като играчка за големи и търсят нови начини за
експериментиране ;) Proc интерфейсът
Каква информация ни предоставя /proc интерфейсът? Първоначално /proc е била направена с цел да дава информация за текущите процеси, оттам идва и наименованието и - process information pseudo-filesystem. В /proc под pid-а на всеки текущ процес има директория с неговите параметри. Във всяка директория параметрите са групирани в файлове. Например файлът cwd сочи към текущата работна директория на процеса, а maps представлява карта на виртуалната му памет. Командата ps, която показва статуса на текущ процес (виж man ps) използва точно /proc като интерфейс към ядрото. Освен информация за текущите процеси, в /proc се съдържат други въведения. Те се отнасят изключително за хардуера и системната конфигурация. Тук е важно да се отбележи следното - това какви файлове и директории се намират във вашата /proc директория, зависи изцяло от хардуера на вашия компютър, как е компилирано ядрото и каква е версията на кода му. Файловете cpuinfo(информация за микропроцесора) и ioports(информация за входно-изходните устройства) са неотменни за всеки компютър, докато scsi ще намерите само ако разполагате със scsi дискове поддържани от ядрото. И така, как става четенето на информация от /proc? Тъй като се касае за файлове и директории, макар и виртуални, можем да
използваме обичайните cd и cat. Ето например една проверка на
регистрираните interrupts: [vd298@tarrant /]$ cat /proc/interrupts
Тъй като interrupt параметрите се променят динамично, не очаквайте да намерите същата информация при повторното прочитане на interrupts файла. Други файлове като version(версия на ядрото) пък съдържат статична информация и тяхното съдържание не се променя. Информация за /proc интерфейса може да намерите на следните места:
man proc :- Добро общо описание на proc, макар и да не е съвсем актуално. /usr/src/linux-2.*.*/Documentation/proc.txt :- Отличен извор на информация, описва всички възможни файлове, които може да срещнете в /proc и какво точно означават те.
Поддръжката на /proc от ядрото се обуславя от следните компилационни
опции: CONFIG_BSD_PROCESS_ACCT, CONIG_SYSCTL и CONFIG_PROC_FS. Те са до
голяма степен необходми за правилното функциониране на всяка стандартна
Linux система и би трябвало да са включени в популярните дистрибуции.
Принцип на динамичното конфигуриране
[1] чрез /proc: Както беше споменато, има файлове в /proc, които са с write permission. Това позволява тяхното съдържание да бъде променяно, което води и до промяна на съответните параметри в ядрото. Проверката кои файлове са с write permission най-лесно се извършва с командата ls -l. Например проверяваме директорията /proc/sys/kernel, която съдържа
параметри отнасящи се до ядрото като цяло. Лявата колонка показва
permission: [vd298@tarrant /]$ ls -l /proc/sys/kernel
Конфигурирането става със стандартната команда echo (за изписване на текстов ред) и операторът за пренасочване '>' (ouput redirection). Обикновено echo изписва зададения текст на стандартния изход(stdout). С оператора за пренасочване обаче ще пренасочим зададения текст към желания от нас файл, вместо към дисплея на конзолата. Не забравяйте, че са нужни root привилиегии за да извършите промяна на файловете! Ето например как може да бъде извършено конфигурирането на panic файла, който дава достъп до променливата panic_timeout. Тя определя колко секунди след kernel panic да се рестартира компютъра. Ако стойността е 0, автоматично рестартиране няма да бъде извършено. Първо проверяваме текущата стойност на panic: [root@tarrant kernel]# cat panic
[root@tarrant kernel]# echo 15 > panic
[root@tarrant vm]# cat buffermem [2] чрез системната функция sysctl Тази системна функция е Linux специфична и не отговаря на POSIX стандарта. Може да се използва при писането на C програми, които директно да променят конфигурацията на ядрото. За повече информация се обърнете към man sysctl и съответните header файлове на Linux. В документацията изрично се предупреждава, че имената на променливите
зависят от версията на Linux, затова програмите ползващи sysctl могат да
имат проблеми с портабилността! Най-важните параметри за конфигуриране
Конфигуриране на виртуалната памет
Ето някои от по-важните файлове намиращи се в /proc/sys/vm и какво
контролират те: bdflush : контролира работата на bdflush демона, който отговара за прочистването на използваните буфери от работната памет към диска (виж man bdflush)Добре е след всяка промяна да проверите състоянието на виртуалната памет от файла /proc/meminfo. Имайте обече предвид, че промените не настъпват веднага. Преди една евентуална промяна в конфигурацията на виртуалната памет, е
добре да се определи характера на преобладаващите действащи процеси (т.е.
за какво се използва компютъра) и техните изисквания към виртуалната
памет. При сървъри с висока I/O активност (например SAMBA сървъри)
дисковия кеш има много голяма роля, защото компенсира бавната скорост на
дисковете. Обратно, при работни станции с висока процесорна активност
(например CAD) количеството на дисковия кеш може да бъде редуцирано, за да
се предоставят повече свободни vm страници. Конфигуриране на файловата система
Някои от по-важните файлове и какво контролират те: file-max : контролира максималния брой на едновременно отворените файлове (default 4096)
Конфигуриране на мрежовите функции
Ето описание на някои параметри: core/ : от тази директория се управляват базисните (или по-примитивни) мрежови опции - това са приемните и предавателните буфери
Важно е при промяна на мрежовите настройки да се има предвид, че много
от тях са директно свързани с мрежовата сигурност! Запазване на конфигурацията
Това предлага добра защита при грешна конфигурация. Ако сте сгрешили фатално и сте направили операционната система неконтролируема или сте забравили първоначалната конфигурация, просто рестартирайте компютъра. Ако пък искате всеки път ядрото да заема желаната от вас конфигурация,
напишете скрипт, който да бъде извикван от init при всяко стартиране на
Linux. За напреднали
Но какви са възможностите за търсене на оптимална конфигурация?
[1] Чрез експериментиране могат да се постигнат добри резултати и също така да се открият някои неочаквани неща. То обаче може да не се окаже достатъчно ефикасно, особено когато голям брой параметри трябва да бъдат конфигурирани.
Владимир Джувинов 08.09.2000
|