Уменьшение ядра FreeBSD

Когда-то, давным-давно, память стоила очень дорого и карты памяти имели небольшую емкость. Когда в системе имелось 128 Мбайт, приходилось экономить каждый бит, поэтому было важно получить ядро как можно меньшего объема. В наши дни даже ноутбуки имеют по 2 Гбайта ОЗУ, и размер ядра перестал играть такую важную роль. Удаление ненужных драйверов из ядра перестало быть насущной необходимостью, но мы не будем замалчивать эту тему и будем учиться собирать ядро так, чтобы потом, когда появится такая необходимость, вам не пришлось бы изучать все сначала. В качестве учебного примера мы пройдем процесс уменьшения размеров ядра, но не считайте это жизненно важным или необходимым этапом.

Удаление записей из конфигурации ядра производится простым комментированием строк.

Типы CPU

Для большинства архитектур FreeBSD поддерживает всего два типа микропроцессоров (CPU). В архитектуре i386 – три. Удаление ненужных типов CPU из конфигурации приведет к созданию ядра, которое полностью использует преимущества, предлагаемые имеющимся микропроцессором. Например, рассмотрим процессоры Pentium и Pentium II с поддержкой инструкций ММХ. Если эти инструкции поддерживаются микропроцессором, было бы желательно воспользоваться их преимуществами. С другой стороны, удаление из конфигурации упоминания о неиспользуемых типах CPU приведет к созданию ядра, которое будет способно работать только с одним типом CPU.

Вам необходимо оставить только тот тип CPU, который имеется в системе. Если тип CPU неизвестен, узнать его можно из файла dmesg.boot. Файл dmesg.boot на моем ноутбуке содержит следующие строки:

CPU: AMD Athlon(tm) 64 Х2 Dual Core Processor 4200+ (2200.10-MHz 686-class CPU) Origin = "AuthenticAMD" Id = 0x20fb1 Stepping = 1

Features=0x178bfbff<FPU,VME,DE,PSE,TSC,MSR,РАЕ,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,С MOV, PAT, PSE36, CLFLUSH,MMX,FXSR,SSE,SSE2,HTT>

Жирным шрифтом выделена часть строки, которая сообщает, что в системе присутствует микропроцессор 686-class CPU. Это означает, что я могу удалить инструкцию сри, описывающую микропроцессор I486_CPU, что сделает мое ядро меньше и быстрее. В результате при компиляции ядра, вместо медленного универсального кода, будут реализованы оптимизации, характерные для процессора 686-class. (Кроме того, это 64-битовый 1386-совместимый процессор, который позволяет запускать версии FreeBSD для архитектур i386 и amd64, как обсуждалось в главе 1. Однако в примерах мы остановимся на архитектуре i386, которой наверняка обладает большинство читателей.)

Основные параметры

Вслед за записями, определяющими выбор типа CPU, имеется целый список параметров основных служб FreeBSD, таких как TCP/IP и файловые системы. Для средней системы необязательно присутствие всех этих особенностей, но их наличие увеличивает гибкость системы. Также можно обнаружить редко используемые параметры, которые можно удалить. Здесь не обсуждаются все возможные параметры ядра, а представлены только наиболее общие из них и специфичные примеры для их различных типов. Особым образом будут отмечены те, что имеют отношение к серверу Интернета. Рассмотрим следующие «опции»:

«options  SCHEDULE      # ULE scheduler

options   SCHED_4BSD # 4BSD scheduler

options   PREEMPTION # Enable kernel thread preemption

Эти параметры управляют внутренним алгоритмом планирования FreeBSD. Планирование будет обсуждаться в главе 12. Возможность вытеснения (preemption) повышает эффективность FreeBSD в многозадачном режиме.

options   INET    # InterNETworking

options   INET6   # IPv6 communications protocols

Эти параметры обеспечивают поддержку сетевых протоколов. Параметр INET обеспечивает поддержку старомодного стека протоколов TCP/IP, тогда как параметр INET6 – поддержку IPv6. Программное обеспечение UNIX-подобных систем зависит от наличия поддержки TCP/IP, поэтому параметр INET следует оставить. Версия IPv6 пока не получила широкого распространения – рано или поздно вы придете к пониманию, что ее время еще не наступило, поэтому при желании этот параметр можно удалить.

options   FFS    #               Berkeley Fast Filesystem

options   SOFTUPDATES            # Enable FFS soft updates support

options   UFS_ACL                # Support for access control lists

options   UFS_DIRHASH            # Improve performance on big directories

FFS – это стандартная файловая система для FreeBSD, а остальные параметры связаны с ней. Параметр SOFTUPDATES – это метод обеспечения целостности диска даже в случае некорректного завершения системы. Списки управления доступом UFS позволяют определять весьма подробные права доступа к файлам, а параметр UFS_DIRHASH обеспечивает поддержку индексирования каталогов, что повышает скорость работы с каталогами, содержащими тысячи файлов. Более подробно параметры FFS будут рассматриваться в главе 8.

options   MD_R00T # MD is a potential root device

Этот параметр (и все остальные параметры, оканчивающиеся на ROOT) позволяет использовать в качестве дискового устройства для корневого раздела другие файловые системы, отличные от FFS. Инсталлятор использует в качестве корневой файловой системы устройство памяти (MD). Если вы используете бездисковые системы (глава 20), вам потребуется поддержка NFS в качестве корневого раздела. Если вы устанавливаете FreeBSD на стандартный компьютер – с жестким диском и клавиатурой, то все эти параметры вам не потребуются.

options   NFSCLIENT              # Network Filesystem Client

options   NFSSERVER              # Network Filesystem Server

Эти два параметра обеспечивают поддержку сетевой файловой системы (Network File System, NFS) (глава 8). Параметр NFSCLIENT позволит монтировать разделы, которые обслуживаются другим компьютером в сети, а параметр NFSSERVER позволит обеспечить доступ к своим разделам для других компьютеров.

options   MSD0SFS # MSDOS filesystem options    CD9660  # ISO 9660 filesystem

options   PROOFS  # Process filesystem (requires PSEUDOFS)

options   PSEUDOFS               # Pseudo-filesystem framework

Эти параметры обеспечивают поддержку редко используемых файловых систем, таких как FAT, CD, файловой системы процессов и инфраструктуры псевдофайловой системы. Все эти файловые системы будут рассматриваться в главе 8, но все функциональные возможности, которые необходимы для работы с ними, доступны в виде модулей ядра, в тех редких случаях, когда в этом возникает необходимость.

options   COMPAT_43TTY # BSD 4.3 TTY compat [KEEP THIS!]

options   C0MPAT_FREEBSD4 ft Compatible with FreeBSD4

options   C0MPAT_FREEBSD5 # Compatible with FreeBSD5

options   C0MPAT_FREEBSD6 ft Compatible with FreeBSD6

Эти параметры совместимости позволяют запускать программное обеспечение, скомпилированное для устаревших версий FreeBSD, а также программное обеспечение, которое требует определенной версии ядра, что было необходимо в более ранних версиях FreeBSD. Если вы устанавливали систему с самого начала, тогда вам, возможно, не требуется совместимость с FreeBSD 4, 5 или 6, однако существует достаточно большое число программных продуктов, ориентированных на работу в среде 4.3 BSD. Оставьте параметр COMPAT 43TTY, иначе ваша система может оказаться неработоспособной.

options   SCSI_DELAY=5000 ft Delay (in ms) before probing SCSI

Параметр SCSI_DELAY задает количество миллисекунд, в течение которых после обнаружения контроллеров SCSI система FreeBSD ожидает перед опрашиванием устройств SCSI, давая им время «раскрутиться» и идентифицировать себя на шине SCSI. Если в системе нет устройств SCSI, данную строку можно удалить. Если установлены древние аппаратные устройства SCSI, которые поднимаются медленно, как больной слон, то паузу можно увеличить до 15 ООО (15 секунд).

options   SYSVSHM # SYSV-style shared memory

options   SYSVMSG # SYSV-style message queues

options   SYSVSEM # SYSV-style semaphores

Эти параметры обеспечивают поддержку разделяемой памяти и межпроцессных взаимодействий в стиле System V. На эту возможность опираются многие программы управления базами данных.

options   AHC_REG_PRETTY_PRINT #        Print register bitfields in debug

#     output. Adds "128k to driver, options AHD_REG_PRETTY_PRINT # Print register bitfields in debug

#     output. Adds "215k to driver.

Параметры, подобные этим, эффективны только в случае использования аппаратных устройств, на которые они ссылаются. В противном случае они могут быть удалены.

Более одного процессора

Следующие две записи активируют симметричную многопроцессорную обработку (Symmetric Multiprocessing, SMP) в ядрах, предназначенных для работы в архитектуре i386:

options   SMP           # Symmetric Multiprocessor Kernel

device    apic          # I/O APIC

Параметр SMP предписывает ядру производить планирование работы процессов на нескольких CPU, а параметр apic обеспечивает поддержку ввода/вывода для ядер SMP. Реализация i386 SMP в системе Free- BSD поддерживает только те многопроцессорные системы, которые отвечают спецификации SMP компании Intel и куда не входят 386 или 486 SMP-системы. (Для других платформ, таких как sparc64, имеются свои собственные стандарты, поэтому для них реализация SMP выполнена на очень высоком уровне.) Система FreeBSD поддерживает многопроцессорные системы, построенные только на базе процессоров Pentium и выше. В более старых версиях FreeBSD ядра с поддержкой SMP плохо или вообще не загружались на однопроцессорных системах – непроизводительные затраты на управление данными для нескольких процессоров создавали дополнительные задержки в системе. С течением времени эта проблема была ликвидирована и теперь FreeBSD распространяется с поддержкой SMP, включенной по умолчанию.

Драйверы устройств

Вслед за параметрами в файле конфигурации расположены записи с настройками драйверов устройств, которые сгруппированы вполне очевидным образом.

Первые записи – это шины, например device pci и device eisa. Убирать их следует лишь в том случае, если в системе действительно нет таких шин. Велико количество систем «без поддержки традиционных устройств» (legacy-free), в которых шина ISA скрыта где-то внутри.

Далее следует то, что большинством рассматриваются как драйверы устройств, – записи для накопителей на гибких магнитных дисках, контроллеров SCSI, контроллеров RAID и т. д. Если ваша цель уменьшить размер ядра, то данный раздел – хорошее место для решительного сокращения. Удалите все драйверы устройств, которые отсутствуют в компьютере. Здесь вы также найдете раздел драйверов устройств для клавиатур, видеокарт, портов PS/2 и т. д. Эти записи едва ли стоит удалять.

Раздел драйверов сетевых карт содержит довольно длинный список и по своему размеру напоминает разделы с драйверами устройств IDE и SCSI. Вы можете удалить из конфигурации любые сетевые карты, которые не используете.

Мы не будем перечислять здесь все драйверы устройств, поскольку в этом мало практической пользы, разве что ознакомиться с перечнем оборудования, которое поддерживалось на момент, когда я писал этот раздел. Чтобы ознакомиться с перечнем оборудования, поддерживаемым вашей версией FreeBSD, загляните в примечания к выпуску (release notes).

Псевдоустройства

В нижней части файла настройки ядра GENERIC представлен список псевдоустройств. Как подсказывает их название, они всецело создаются программными методами. Ниже приводится описание некоторых из наиболее часто используемых псевдоустройств.

device    loop          # Network loopback

Это петлевой интерфейс, позволяющий системе взаимодействовать с самой собой через сетевые сокеты, с использованием сетевых протоколов. Сетевые соединения во всех подробностях будут рассматриваться в следующей главе. Вас может удивить, как много программ используют петлевой интерфейс; его следует оставить.

device    random        # Entropy device

Это устройство обеспечивает генерацию псевдослучайных чисел, необходимых в операциях шифрования и таких важных программах, как игры. FreeBSD обеспечивает поддержку разнообразных источников случайных чисел, и все они объединяются в виде устройств псевдослучайных чисел /dev/random и /dev/urandom.

device    ether         # Ethernet support

Ethernet обладает массой особенностей, характерных для устройств, и потому FreeBSD представляет его как устройство. Оставьте эту строку, если ваша цель не изучение системы.

device    si            # Kernel SLIP

device    ppp           # Kernel PPP

Псевдоустройство si предназначено для поддержки межсетевого протокола для последовательного канала (Serial Line Internet Protocol, SLIP), а устройство ppp поддерживает протокол «точка-точка» (Point to Point Protocol, PPP) на уровне ядра. Оба они давно устарели и не требуются для поддержки РРР в пространстве пользователя, если, конечно, у вас нет особых требований.

device    tun           # Packet tunnel.

device

Pty

# Pseudo-ttys (telnet etc)

Псевдоустройство tun – это логический пакетный канал (logical packet tunnel). Используется различными программами для обмена пакетами с ядром. Такое псевдоустройство необходимо для поддержки РРР средствами, не входящими в ядро (userland РРР), – обычными коммутируемыми соединениями.

Псевдоустройство pty – это псевдотерминал. Когда вы подключаетесь к системе по протоколам telnet или SSH (глава 15), FreeBSD должна иметь возможность отслеживать терминальные сеансы, выводить символы на экран и читать ввод с клавиатуры. Система обслуживает удаленное соединение как обычный физический монитор и клавиатуру. Псевдотерминал – это псевдоустройство, напоминающее терминал, связанное с соединением.

device    md            # Memory "disks"

Псевдоустройство md позволяет хранить файлы в памяти. Это очень удобно для организации очень быстрых хранилищ временных данных, но об этом мы поговорим в главе 8. Для большинства (но не для всех) серверов Интернета диски в памяти – это просто непродуктивное растрачивание оперативной памяти. Кроме того, диски в памяти могут использоваться для монтирования и доступа к образам дисков. Если вы не используете диски в памяти, этот параметр можно удалить из ядра.

Отключаемые устройства

Наконец, после псевдоустройств в конфигурационном файле GENERIC можно найти поддержку FireWire и устройств USB. Эти функциональные возможности всегда оформляются в виде модулей, так как представляют устройства, которые могут присутствовать, а могут и не присутствовать в системе.

Источник: ЛукасМ. FreeBSD. Подробное руководство, 2-е издание. – Пер. с англ. – СПб.: Символ- Плюс, 2009. – 864 е., ил.

Похожие посты:

Вы можете оставить комментарий, или ссылку на Ваш сайт.

Оставить комментарий