
LINUX-сервер пошаговые инструкции инсталляции и настройки - Бруй В. В. , Карлов С. В
..pdfГлава 5. Оптимизация операционной системы |
61 |
Глава 5
Оптимизация операционной системы
В этой главе 1. Статические и динамические библиотеки
2.Библиотеки Linux Glibc 2.2
3.Почему Linux-программы распространяются в исходных кодах
4.Файл gcc specs
5.Удаление комментариев из исполняемых файлов и библиотек
6.Оптимизация настроек жесткого диска с IDE-интерфейсом

62 |
Часть 1. Инсталляция операционной системы Linux на сервере |
Если вы следовали нашим рекомендациям, то на сервере установлены пакеты программ для его функционирования, обеспечения безопасности и компиляции программ. Перед тем как начать установку необходимых служб, необходимо выполнить ряд операций, повышающих быстродействие сервера.
Статические и динамические библиотеки
Во время компиляции исходных кодов большинства программ на последней стадии осуществляется связь кода программы с кодами Linux-библиотек. Эти библиотеки поставляются в динамическом и статическом формате и содержат общий системный код, который хранится в одном месте и совместно используется различными программами. Обычно на Linux-системах файлы библиотек находятся в каталогах /lib, /usr/lib и /usr/share. По умолчанию Linux использует динамические библиотеки, а если он не может найти их, то статические.
При использовании статической библиотеки, компилятор находит фрагменты кода, которые требуются для модулей программы, и копирует их непосредственно в исполняемый файл. При использовании динамических библиотек компилятор вставляет ссылку, в которой указывает на необходимость загрузки определенной библиотеки перед началом выполнения программы.
С одной стороны, при статической компоновке программ в случае выявления ошибки в одной из библиотек, влияющей на безопасность системы, система будет потенциально уязвимой до тех пор, пока не будут перекомпилированы все программы, содержащие код соответствующей библиотеки. С другой стороны, при динамической компоновке программ система потенциально уязвима к атакам, направленным на модификацию библиотечных файлов, а уязвимость системы, вызванная ошибкой в библиотеке, может быть устранена путем ее замены.
Другим достоинством статической компоновки является то, что процесс инсталляции программного обеспечения упрощается и может быть осуществлен при отсутствии доступа к библиотечным файлам. На сильно загруженных системах использование статических библиотек негативно влияет на производительность системы, поэтому в этом случае использование динамических библиотек более предпочтительно.
Таким образом:
• если вы хотите компилировать программу, используя динамические библиотеки, необходимо использовать следующие флаги компилятора:
CFLAGS = "-О2-march=i686 -funroll-loops"; export CFLAGS
./Configure \
• если хотите компилировать, используя статические библиотеки, необходимо использовать следующие флаги компилятора:
CFLAGS="-О2 -static -march=i686 -funroll-loops"; export CFLAGS
./Configure \ --disabled-shared\
ЗАМЕЧАНИЕ В Linux статические библиотеки имеют имена вида libc.a, а динамические библиотеки –
.libc.so.x.y.z, где x.y.z - номер версии.
Библиотеки Linux Glibc 2.2
Библиотека Glibc 2.2 пришла на смену libc4 и libc5 и является последней версией GNU библиотеки языка C для Linux. Она содержит стандартные библиотеки, используемые различными программами. Этот специфический пакет содержит самые важные наборы динамических и статических библиотек, который обеспечивает основные функциональные возможности ядра для запуска программ C. Без них Linuxсистема не смогла бы функционировать.
По умолчанию в ASPLinux и во многих других дистрибутивах этот пакет для повышения совместимости устанавливается сконфигурированным для работы c процессором i386. Поэтому для того, чтобы наши рекомендации по повышению производительности сервера за счет использования программ, откомпилированных для конкретной версии процессора, оказались наиболее действенными, необходимо установить версию пакета Glibc 2.2 для соответствующего процессора. Если использовать файл, устанавливаемый по умолчанию, часть кода программы, использующая код библиотек, не будет оптимизирована для работы с версией процессора, отличной от i386.
Почему Linux-программы распространяются в исходных кодах
Первоначально Linux был разработан как операционная система, предназначенная для работы на различных платформах. Поэтому наиболее простым способом распространения программного обеспечения является распространение исходного кода программы и последующая ее компиляция. Создатели программного обеспечения не всегда могут знать, на какой версии процессора (i386,i486, Pentium и т. д.) будут выпол-

Глава 5. Оптимизация операционной системы |
63 |
няться их коды. Поэтому для обеспечения межплатформенной совместимости предварительно откомпилированное программное обеспечение поставляется в версии для процессора i386 и, естественно, не учитываются дополнительные особенности более современных процессоров, например, набор команд MMX или 3D Now! Естественно, при использовании предварительно откомпилированного программного обеспечения не может быть достигнута максимальная производительность системы, если вы, конечно, не используете процессор i386.
Опции компилятора, грамотное использование которых позволяет получить исполняемые файлы, оптимизированы для заданной архитектуры центрального процессора. Описание опций, используемых при компиляции исходных кодов программ применительно к различным процессорам, приведено ниже. Первый параметр, который необходимо установить – это тип центрального процессора. Это делается с помощью флага "-march=cpu_type" (архитектура процессора). Например, "-march=i686" или "-march=k6" позволяет компилятору выбирать соответствующий вариант оптимизации для конкретного процессора.
Вы можете установить значение флага "-O" от 1 до 3, указав компилятору степень оптимизации. Значение "-O3" позволяет создавать исполняемые файлы, имеющие максимальное быстродействие.
Следующим этапом является установка флага "-f" , который может принимать значение "- funroll-loops" и "-fomit-frame-pointer".
ЗАМЕЧАНИЕ Компиляция с опцией выключателя "-fomit-frame-pointer" будет использовать стек для об-
ращения к переменным. К сожалению, отладка программ при установке этой опции, как правило, невозможна. Также, обратите внимание, что во флаге "O3" первым символом является заглавная буква "O".
Учитывая вышеизложенное, мы предлагаем компилировать программное обеспечение со следующими флагами:
CFLAGS = "-O2-march=i686 -funroll-loops"
Мы не используем флаги "-O3" и "-fomit-frame-pointer", так как они не всегда хорошо работают при компиляции некоторого программного обеспечения.
Файл gcc specs
Файл /usr/lib/gcc-lib/i386-asplinux-linux/2.96/specs содержит набор установок для компилятора gcc и будет использован нами для задания параметров компиляции.
Шаг 1 Проверьте версию компилятора, установленную на вашей системе:
[root@drwalbr /]# gcc -v
Reading specs from /usr/lib/gcc-lib/i386-asplinux/2.96/specs gcc version 2.96 20000731 (ASPLinux 7.3 2.96-112)
Шаг 2
Для процессоров i686 или PentiumPro, Pentium II, Pentium III и Athlon откройте файл
/usr/lib/gcc-lib/i386-redhat-linux/2.96/specs.В ниже приведенном фрагменте: *cpp_cpu_default:
-D__tune_i386__
*cpp_cpu:
-Acpu(i386) -Amachine(i386) %{!ansi:-Di386} -D__i386 -D__i386__ %{march=i386:%{!mcpu*:-D__tune_i386__ }}%{march=i486:-D__i486 -D__i486__ %{!mcpu*:-D__tune_i486__ }}%{march=pentium|march=i586:-D__pentium - D__pentium__ %{!mcpu*:-D__tune_pentium__ }}%{march=pentiumpro|march=i686:-D__pentiumpro -D__pentiumpro__ %{!mcpu*:-D__tune_pentiumpro__ }}%{march=k6:-D__k6 -D__k6__ %{!mcpu*:- D__tune_k6__ }}%{march=athlon:-D__athlon -D__athlon__ %{!mcpu*:- D__tune_athlon__ }}%{m386|mcpu=i386:-D__tune_i386__ }%{m486|mcpu=i486:- D__tune_i486__ }%{mpentium|mcpu=pentium|mcpu=i586:-D__tune_pentium__ }%{mpentiumpro|mcpu=pentiumpro|mcpu=i686:-D__tune_pentiumpro__ }%{mcpu=k6:-D__tune_k6__ }%{mcpu=athlon:-D__tune_athlon__ }%{!march*:%{!mcpu*:%{!m386:%{!m486:%{!mpentium*:%(cpp_cpu_default)}}}}}
*cc1_cpu:
%{!mcpu*: %{m386:-mcpu=i386} %{m486:-mcpu=i486} %{mpentium:-mcpu=pentium} %{mpentiumpro:-mcpu=pentiumpro}}

64 |
Часть 1. Инсталляция операционной системы Linux на сервере |
сделайте следующие исправления:
*cpp_cpu_default:
-D__tune_i686__
*cpp_cpu:
-Acpu(i386) -Amachine(i386) %{!ansi:-Di386} -D__i386 -D__i386__ %{march=i386:%{!mcpu*:-D__tune_i386__ }}%{march=i486:-D__i486 -D__i486__ %{!mcpu*:-D__tune_i486__ }}%{march=pentium|march=i586:-D__pentium - D__pentium__ %{!mcpu*:-D__tune_pentium__ }}%{march=pentiumpro|march=i686:-D__pentiumpro -D__pentiumpro__ %{!mcpu*:-D__tune_pentiumpro__ }}%{march=k6:-D__k6 -D__k6__ %{!mcpu*:- D__tune_k6__ }}%{march=athlon:-D__athlon -D__athlon__ %{!mcpu*:- D__tune_athlon__ }}%{m386|mcpu=i386:-D__tune_i386__ }%{m486|mcpu=i486:- D__tune_i486__ }%{mpentium|mcpu=pentium|mcpu=i586:-D__tune_pentium__ }%{mpentiumpro|mcpu=pentiumpro|mcpu=i686:-D__tune_pentiumpro__ }%{mcpu=k6:-D__tune_k6__ }%{mcpu=athlon:-D__tune_athlon__ }%{!march*:%{!mcpu*:%{!m386:%{!m486:%{!mpentium*:%(cpp_cpu_default)}}}}}
*cc1_cpu:
%{!mcpu*: -O2 –march=i686 –funroll-loops %{m386:-mcpu=i386} %{m486:- mcpu=i486} %{mpentium:-mcpu=pentium} %{mpentiumpro:-mcpu=pentiumpro}}
ЗАМЕЧАНИЕ Мы используем флаг "-O2" (большая буква "O" два), а не "-02" (ноль два).
Для процессоров i586 и Pentium откройте файл /usr/lib/gcc-lib/i386-redhat- linux/2.96/specs. В ниже приведенном фрагменте:
*cpp_cpu_default: -D__tune_i386__
*cpp_cpu:
-Acpu(i386) -Amachine(i386) %{!ansi:-Di386} -D__i386 -D__i386__ %{march=i386:%{!mcpu*:-D__tune_i386__ }}%{march=i486:-D__i486 -D__i486__ %{!mcpu*:-D__tune_i486__ }}%{march=pentium|march=i586:-D__pentium - D__pentium__ %{!mcpu*:-D__tune_pentium__ }}%{march=pentiumpro|march=i686:-D__pentiumpro -D__pentiumpro__ %{!mcpu*:-D__tune_pentiumpro__ }}%{march=k6:-D__k6 -D__k6__ %{!mcpu*:- D__tune_k6__ }}%{march=athlon:-D__athlon -D__athlon__ %{!mcpu*:- D__tune_athlon__ }}%{m386|mcpu=i386:-D__tune_i386__ }%{m486|mcpu=i486:- D__tune_i486__ }%{mpentium|mcpu=pentium|mcpu=i586:-D__tune_pentium__ }%{mpentiumpro|mcpu=pentiumpro|mcpu=i686:-D__tune_pentiumpro__ }%{mcpu=k6:-D__tune_k6__ }%{mcpu=athlon:-D__tune_athlon__ }%{!march*:%{!mcpu*:%{!m386:%{!m486:%{!mpentium*:%(cpp_cpu_default)}}}}}
*cc1_cpu:
%{!mcpu*: %{m386:-mcpu=i386} %{m486:-mcpu=i486} %{mpentium:-mcpu=pentium} %{mpentiumpro:-mcpu=pentiumpro}}
сделайте следующие исправления:
*cpp_cpu_default:
-D__tune_i586__
*cpp_cpu:
-Acpu(i386) -Amachine(i386) %{!ansi:-Di386} -D__i386 -D__i386__ %{march=i386:%{!mcpu*:-D__tune_i386__ }}%{march=i486:-D__i486 -D__i486__ %{!mcpu*:-D__tune_i486__ }}%{march=pentium|march=i586:-D__pentium - D__pentium__ %{!mcpu*:-D__tune_pentium__ }}%{march=pentiumpro|march=i686:-D__pentiumpro -D__pentiumpro__ %{!mcpu*:-D__tune_pentiumpro__ }}%{march=k6:-D__k6 -D__k6__ %{!mcpu*:- D__tune_k6__ }}%{march=athlon:-D__athlon -D__athlon__ %{!mcpu*:- D__tune_athlon__ }}%{m386|mcpu=i386:-D__tune_i386__ }%{m486|mcpu=i486:- D__tune_i486__ }%{mpentium|mcpu=pentium|mcpu=i586:-D__tune_pentium__ }%{mpentiumpro|mcpu=pentiumpro|mcpu=i686:-D__tune_pentiumpro__ }%{mcpu=k6:-D__tune_k6__ }%{mcpu=athlon:-D__tune_athlon__ }%{!march*:%{!mcpu*:%{!m386:%{!m486:%{!mpentium*:%(cpp_cpu_default)}}}}}

Глава 5. Оптимизация операционной системы |
65 |
*cc1_cpu:
%{!mcpu*: -O2 –march=i586 –funroll-loops %{m386:-mcpu=i386} %{m486:- mcpu=i486} %{mpentium:-mcpu=pentium} %{mpentiumpro:-mcpu=pentiumpro}}
ЗАМЕЧАНИЕ Мы используем флаг "-O2" (большая буква "O" два), а не "-02" (ноль два).
Для процессоров i486 откройте файл /usr/lib/gcc-lib/i386-redhat-linux/2.96/specs.
В ниже приведенном фрагменте:
*cpp_cpu_default: -D__tune_i386__
*cpp_cpu:
-Acpu(i386) -Amachine(i386) %{!ansi:-Di386} -D__i386 -D__i386__ %{march=i386:%{!mcpu*:-D__tune_i386__ }}%{march=i486:-D__i486 -D__i486__ %{!mcpu*:-D__tune_i486__ }}%{march=pentium|march=i586:-D__pentium - D__pentium__ %{!mcpu*:-D__tune_pentium__ }}%{march=pentiumpro|march=i686:-D__pentiumpro -D__pentiumpro__ %{!mcpu*:-D__tune_pentiumpro__ }}%{march=k6:-D__k6 -D__k6__ %{!mcpu*:- D__tune_k6__ }}%{march=athlon:-D__athlon -D__athlon__ %{!mcpu*:- D__tune_athlon__ }}%{m386|mcpu=i386:-D__tune_i386__ }%{m486|mcpu=i486:- D__tune_i486__ }%{mpentium|mcpu=pentium|mcpu=i586:-D__tune_pentium__ }%{mpentiumpro|mcpu=pentiumpro|mcpu=i686:-D__tune_pentiumpro__ }%{mcpu=k6:-D__tune_k6__ }%{mcpu=athlon:-D__tune_athlon__ }%{!march*:%{!mcpu*:%{!m386:%{!m486:%{!mpentium*:%(cpp_cpu_default)}}}}}
*cc1_cpu:
%{!mcpu*: %{m386:-mcpu=i386} %{m486:-mcpu=i486} %{mpentium:-mcpu=pentium} %{mpentiumpro:-mcpu=pentiumpro}}
сделайте следующие исправления:
*cpp_cpu_default:
-D__tune_i486__
*cpp_cpu:
-Acpu(i386) -Amachine(i386) %{!ansi:-Di386} -D__i386 -D__i386__ %{march=i386:%{!mcpu*:-D__tune_i386__ }}%{march=i486:-D__i486 -D__i486__ %{!mcpu*:-D__tune_i486__ }}%{march=pentium|march=i586:-D__pentium - D__pentium__ %{!mcpu*:-D__tune_pentium__ }}%{march=pentiumpro|march=i686:-D__pentiumpro -D__pentiumpro__ %{!mcpu*:-D__tune_pentiumpro__ }}%{march=k6:-D__k6 -D__k6__ %{!mcpu*:- D__tune_k6__ }}%{march=athlon:-D__athlon -D__athlon__ %{!mcpu*:- D__tune_athlon__ }}%{m386|mcpu=i386:-D__tune_i386__ }%{m486|mcpu=i486:- D__tune_i486__ }%{mpentium|mcpu=pentium|mcpu=i586:-D__tune_pentium__ }%{mpentiumpro|mcpu=pentiumpro|mcpu=i686:-D__tune_pentiumpro__ }%{mcpu=k6:-D__tune_k6__ }%{mcpu=athlon:-D__tune_athlon__ }%{!march*:%{!mcpu*:%{!m386:%{!m486:%{!mpentium*:%(cpp_cpu_default)}}}}}
*cc1_cpu:
%{!mcpu*: -O2 –march=i486 –funroll-loops %{m386:-mcpu=i386} %{m486:- mcpu=i486} %{mpentium:-mcpu=pentium} %{mpentiumpro:-mcpu=pentiumpro}}
ЗАМЕЧАНИЕ Мы используем флаг "-O2" (большая буква "O" два), а не "-02" (ноль два).
Для процессоров AMD K6 или K6-2 откройте файл /usr/lib/gcc-lib/i386-redhat- linux/2.96/specs. В ниже приведенном фрагменте:
*cpp_cpu_default: -D__tune_i386__
*cpp_cpu:
-Acpu(i386) -Amachine(i386) %{!ansi:-Di386} -D__i386 -D__i386__ %{march=i386:%{!mcpu*:-D__tune_i386__ }}%{march=i486:-D__i486 -D__i486__ %{!mcpu*:-D__tune_i486__ }}%{march=pentium|march=i586:-D__pentium - D__pentium__ %{!mcpu*:-D__tune_pentium__

66 |
Часть 1. Инсталляция операционной системы Linux на сервере |
}}%{march=pentiumpro|march=i686:-D__pentiumpro -D__pentiumpro__ %{!mcpu*:-D__tune_pentiumpro__ }}%{march=k6:-D__k6 -D__k6__ %{!mcpu*:- D__tune_k6__ }}%{march=athlon:-D__athlon -D__athlon__ %{!mcpu*:- D__tune_athlon__ }}%{m386|mcpu=i386:-D__tune_i386__ }%{m486|mcpu=i486:- D__tune_i486__ }%{mpentium|mcpu=pentium|mcpu=i586:-D__tune_pentium__ }%{mpentiumpro|mcpu=pentiumpro|mcpu=i686:-D__tune_pentiumpro__ }%{mcpu=k6:-D__tune_k6__ }%{mcpu=athlon:-D__tune_athlon__ }%{!march*:%{!mcpu*:%{!m386:%{!m486:%{!mpentium*:%(cpp_cpu_default)}}}}}
*cc1_cpu:
%{!mcpu*: %{m386:-mcpu=i386} %{m486:-mcpu=i486} %{mpentium:-mcpu=pentium} %{mpentiumpro:-mcpu=pentiumpro}}
сделайте следующие исправления:
*cpp_cpu_default:
-D__tune_k6__
*cpp_cpu:
-Acpu(i386) -Amachine(i386) %{!ansi:-Di386} -D__i386 -D__i386__ %{march=i386:%{!mcpu*:-D__tune_i386__ }}%{march=i486:-D__i486 -D__i486__ %{!mcpu*:-D__tune_i486__ }}%{march=pentium|march=i586:-D__pentium - D__pentium__ %{!mcpu*:-D__tune_pentium__ }}%{march=pentiumpro|march=i686:-D__pentiumpro -D__pentiumpro__ %{!mcpu*:-D__tune_pentiumpro__ }}%{march=k6:-D__k6 -D__k6__ %{!mcpu*:- D__tune_k6__ }}%{march=athlon:-D__athlon -D__athlon__ %{!mcpu*:- D__tune_athlon__ }}%{m386|mcpu=i386:-D__tune_i386__ }%{m486|mcpu=i486:- D__tune_i486__ }%{mpentium|mcpu=pentium|mcpu=i586:-D__tune_pentium__ }%{mpentiumpro|mcpu=pentiumpro|mcpu=i686:-D__tune_pentiumpro__ }%{mcpu=k6:-D__tune_k6__ }%{mcpu=athlon:-D__tune_athlon__ }%{!march*:%{!mcpu*:%{!m386:%{!m486:%{!mpentium*:%(cpp_cpu_default)}}}}}
*cc1_cpu:
%{!mcpu*: -O2 –march=k6 –funroll-loops %{m386:-mcpu=i386} %{m486:- mcpu=i486} %{mpentium:-mcpu=pentium} %{mpentiumpro:-mcpu=pentiumpro}}
ЗАМЕЧАНИЕ Мы используем флаг "-O2" (большая буква "O" два), а не "-02" (ноль два).
Шаг 3 Для проверки работоспособности внесенных изменений выполните следующие команды:
[root@drwalbr /]# touch cpu.c
[root@drwalbr /]# gcc cpu.c –S –fverbose-sam
[root@drwalbr /]# less cpu.c
Если на экран будет выведено нечто подобное:
.file "cc9xBgp3.i"
.version "01.01"
#GNU C version 2.96 20000731 (ASPLinux 7.3 2.96-112) (i386-asplinux- linux) compiled by GNU C version 2.96 20000731 (ASPLinux 7.3 2.96-112).
#options passed: -O2 -march=i686 -funroll-loops -fverbose-asm
#options enabled: -fdefer-pop -foptimize-sibling-calls -fcse-follow- jumps
#-fcse-skip-blocks -fexpensive-optimizations -fthread-jumps
#-fstrength-reduce -funroll-loops -fpeephole -fforce-mem -ffunction-cse
#-finline -fkeep-static-consts -fcaller-saves -fpcc-struct-return -fgcse
#-frerun-cse-after-loop -frerun-loop-opt -fdelete-null-pointer-checks
#-fschedule-insns2 -fsched-interblock -fsched-spec -fbranch-count-reg
#-fnew-exceptions -fcommon -fverbose-asm -fgnu-linker -fregmove
#-foptimize-register-move -fargument-alias -fstrict-aliasing
#-fmerge-constants -fident -fpeephole2 -fmath-errno -m80387 -mhard-float
#-mno-soft-float -mieee-fp -mfp-ret-in-387 -march=i686
gcc2_compiled.:
.ident "GCC: (GNU) 2.96 20000731 (ASPLinux 7.3 2.96-112)"
то внесенные вами изменения работают.

Глава 5. Оптимизация операционной системы |
67 |
Удаление комментариев из исполняемых файлов и библиотек
На этапе компиляции программы в нее добавляется много различных комментариев. Это делается для удобства отладки программного обеспечения. Для повышения быстродействия системы и сокращения размера исполняемых и библиотечных файлов эти комментарии необходимо удалить. Что может быть выполнено при помощи команды strip Linux. При использовании команды необходимо соблюдать некоторые меры предосторожности, о которых мы расскажем ниже. Неаккуратное использование команды strip может привести к непредсказуемым последствиям. Важно помнить, что не все бинарные файлы, особенно файлы библиотек, должны быть отредактированы с использованием этой команды, а только часть из них. Этот метод повышения производительности системы может быть применен на серверах, на которых не осуществляется компиляция программного обеспечения, либо на сервере, на котором откомпилировано и установлено все необходимое для его работы программное обеспечение.
Шаг 1
Прежде всего, необходимо убедиться, что команда strip доступна на вашем сервере. Если она не установлена, то необходимо установить пакет binutils, входящий в дистрибутив ASPLinux, используя рекомендации раздела «Как использовать команды rpm» главы 2.
Шаг 2
Для очистки исполняемых файлов в директориях /bin, /sbin, /usr/bin и /usr/sbin необходимо выполнить следующие команды:
[root@drwalbr /]# strip /bin/* [root@drwalbr /]# strip /sbin/* [root@drwalbr /]# strip /usr/bin/* [root@drwalbr /]# strip /usr/sbin/*
ЗАМЕЧАНИЕ При выполнении этих команд вы увидите несколько сообщений об ошибках: "File format not recognized".
Это обусловлено тем, что в директориях /bin, /sbin, /usr/bin и /usr/sbin содержатся не только исполняемые файлы, но и символьные ссылки на них, а программа strip не умеет их обрабатывать.
Шаг 3 Для очистки файлов библиотек необходимо выполнить следующие команды:
[root@drwalbr /]# strip –R .comment /usr/lib/*.so.* [root@drwalbr /]# strip –R .comment /lib/*.so.*
ЗАМЕЧАНИЕ Опция "-R" в команде strip позволяет нам задавать названия фрагментов, удаляемых из библиотек. С помощью ".comment" мы сообщаем команде, что необходимо удалять любые строки, содержа-
щие ".comment"
Оптимизация настроек жесткого диска с IDE-интерфейсом
Доступ к информации на жестком диске осуществляется в 50…100 раз медленнее, чем к данным в оперативной памяти. Именно поэтому настройка быстродействия жесткого диска является критичной, с точки зрения обеспечения максимальной производительности сервера
Настройки ASPLinux по умолчанию позволяют обеспечить максимум совместимости. Вы же, хорошо зная особенности диска и материнской платы, можете изменить настройки, обеспечив максимум производительности. Для оптимизации настроек жесткого диска с интерфейсом IDE используется команда hdparm. Ускорение в работе на операции ввода-вывода достигается путем специализированных IDE драйверов, использования прямого доступа к памяти, 32-разрядного обмена и блочных режимов передачи данных.
Следует отметить, что диски IDE/ATA разных производителей по-разному подвержены ускорению с помощью рассматриваемой утилиты. Так, лучше всего ускоряются диски Quantum (ныне Maxtor), чуть хуже
– Western Digital, и совсем плохо – Fujitsu.
Перед началом оптимизации диска проверьте, установлен ли пакет hdpram:
[root@drwalbr /]# rpm -q hdparm package hdparm is not installed
Для установки пакета необходимо вставить первый компакт-диск дистрибутива ASPLinux в дисковод и выполнить следующие команды:
[root@drwalbr /]# mount /mnt/cdrom
[root@drwalbr /]# cd /mnt/cdrom/ASPLinux/RPMS [root@drwalbr RPMS]# rpm –Uhv hdparm-5.1-1.asp.i386.rpm
hdparm |
################################################## 100% |
68 |
Часть 1. Инсталляция операционной системы Linux на сервере |
После установки пакета необходимо размонтировать компакт диск:
[root@drwalbr /]# cd
[root@drwalbr /]# umount /mnt/cdrom
В зависимости от моделей производителей диска и системной платы будут устанавливаться различные параметры оптимизации. Неправильный выбор этих параметров может привести к полному выходу диска из строя. Поэтому перед началом оптимизации необходимо изучить параметры системы.
Необходимо так же проверить параметры настройки BIOS, выяснить, поддерживает ли ваша система режим DMA и включены ли параметры, обеспечивающие поддержку этого режима.
Шаг 1
Этот шаг применим к большинству дисков – включает 32-разрядный ввод-вывод по PCI-шинам. Эта опция – одна из самых важных и может удвоить скорость вашего диска:
[root@drwalbr /]# /sbin/hdparm -c3 /dev/hda
Здесь и далее предполагается, что мы оптимизируем диск /dev/hda. Опция "-c3" работает почти со всеми 32-разрядными наборами микросхем IDE. Более подробно использование этой опции описано на manстранице hdparm:
[root@drwalbr /]# /sbin/man 8 hdparm -c3 /dev/hda
Шаг 2
Второй параметр применяется только для дисков стандарта DMA и активизирует обычный режим DMA. Такой режим поддерживается старыми DMA дисками. Для включения режима DMA выполните:
[root@drwalbr /]# /sbin/hdparm –d1 /dev/hda
Эта команда не только включает поддержку DMA (только для интерфейсов, поддерживающих этот режим), но и в зависимости от набора микросхем, поддерживаемых ядром системы, вдвое сокращает время считывания информации с диска.
Шаг 3
Протокол Multiword DMA mode 2 (максимальная скорость передачи данных - 16,6 МБ/с), также известный как ATA-2 интерфейс – более скоростной преемник DMA. Если у вас жесткий диск, поддерживающий этот режим, для включения режима DMA-2 выполните команду:
[root@drwalbr /]# /sbin/hdparm –d1 –X34 /dev/hda
Шаг 4
Протокол multiword DMA mode 3, названный UltraDMA, также известный как ATA/ATAPI-4 – это дальнейшее развитие технологии DMA (максимальная скорость пакетной передачи данных - 33 МБ/с). Если у вас такой диск, то выбирайте этот режим:
[root@drwalbr /]# /sbin/hdparm –d1 –X66 /dev/hda
Шаг 5
Протокол UltraDMA с пропускной способностью 66 МБ/с, также известный как ATA/ATAPI-5. Жесткие диски, поддерживающие такой интерфейс, появились начиная с 1999 года. Включение поддержки протокола осуществляется командой:
[root@drwalbr /]# /sbin/hdparm –d1 –X12 –X68 /dev/hda
Шаг 6
Протокол UltraDMA с пропускной способностью 100 МБ/с – один из распространенных сейчас интерфейсов, также известен как ATA/ATAPI-6. Производители представили такие жесткие диски уже в середине 2000 года, т. е. еще до официального утверждения ATA/ATAPI-5. Фактически, их объявление было приурочено к объявлению 5 июня первого чипсета, поддерживающего протокол UltraATA/100 – i820E. Мы думаем, что у большинства из вас именно такие жесткие диски. Включение поддержки протокола осуществляется командой:
[root@drwalbr /]# /sbin/hdparm –d1 –X12 –X70 /dev/hda
Шаг 7
Режим Multiple sector mode (IDE Block Mode) поддерживается большинством современных жестких дисков с IDE-интерфейсом. Этот режим позволяет сокращать количество обращений к жесткому диску на 30…50 % , увеличивая скорость передачи данных на 5…50%. Для включения режима выполните команду:
[root@drwalbr /]# /sbin/hdparm –mXX /dev/hda

Глава 5. Оптимизация операционной системы |
69 |
Параметр "ХХ" представляет максимальное значение, поддерживаемое IDE/ATA диском. Для определения величины этого параметра используется опция "-i". Посмотрите вывод значения MaxMultSect в тексте:
[root@drwalbr /]# /sbin/hdparm –i /dev/hda
/dev/hda:
Model=QUANTUM FIREBALLP LM15, FwRev=A35.0700, SerialNo=737909725840 Config={ HardSect NotMFM HdSw>15uSec Fixed DTR>IOMbs } RawCHS=16383/16/63, TrkSize=32256, SectSize=21298, ECCbytes=4 BuffType=3(DualPortCache), BuffSize=1900kB, MaxMultSect=16, MultSect=16 DblWordIO=no, OldPIO=2, DMA=yes, OldDMA=2
CurCHS=16383/16/63, CurSects=-66060037, LBA=yes, LBAsects=29336832 tDMA={min:120,rec:120}, DMA modes: mword0 mword1 mword2 IORDY=on/off, tPIO={min:120,w/IORDY:120}, PIO modes: mode3 mode4 UDMA modes: mode0 mode1 mode2 mode3 *mode4
Шаг 8
Число секторов get/set влияет на быстродействие многократного обращения к большим файлам. Значение этого параметра по умолчанию – 8 секторов (4 кБайт). Мы советуем увеличить его вдвое, для этого выполните команду:
[root@drwalbr /]# /sbin/hdparm -a16 /dev/hda .
Шаг 9
Флаг get/set interrupt-unmask несколько увеличивает скорость обмена с жестким диском и устраняет ошибки переполнения последовательного порта. Для установки флага выполните команду:
[root@drwalbr /]# /sbin/hdparm -u1 /dev/hda
Шаг 10 Кэширование записи также несколько увеличивает скорость обмена с жестким диском. Для включе-
ния кэширования выполните команду:
[root@drwalbr /]# /sbin/hdparm –W1 /dev/hda
Шаг 11 Эти опции позволяют сохранять параметры настройки диска при перезагрузке системы. К сожале-
нию, не все диски их поддерживают. Для включения опций выполните команду:
[root@drwalbr /]# /sbin/hdparm -K1 -k1 /dev/hda
Шаг 12 Протестировать настройки можно с помощью команды:
[root@drwalbr /]# |
/sbin/hdparm -vtT /dev/hda |
||
/dev/hda: |
|
|
|
multcount |
= |
16 (on) |
|
I/O support |
= |
3 |
(32-bit w/sync) |
unmaskirq |
= |
1 |
(on) |
using_dma |
= |
1 |
(on) |
keepsettings |
= |
1 |
(on) |
nowerr |
= |
0 |
(off) |
readonly |
= |
0 |
(off) |
readahead |
= |
16 (on) |
|
geometry |
- |
1826/255/63, sectors = 29336832, start = 0 |
|
Timing buffer-cache |
reads: 128 MB in 0.85 seconds = 150.59 MB/sec |
||
Timing buffered |
disk reads: 64 MB in 2.54 seconds = 25.20 MB/sec |
ЗАМЕЧАНИЕ Использование всех перечисленных выше опций должно осуществляться с максимальной осторожностью, т. к. может привести к повреждению жесткого диска.
После того, как выполнена установка и проверка опции hdparm в конец файла /etc/rc.local логично добавить строку, запускающую hdparm с выбранными опциями, например:
/sbin/hdparm -c3 -d1 -X12 -X68 -m16 -a16 -u1 -W1 -k1 -K1 /dev/hda
Это позволит устанавливать требуемые опции при каждой перезагрузке системы.
70 |
Часть 1. Инсталляция операционной системы Linux на сервере |
Глава 6
Безопасность и оптимизация ядра
Содержание главы:
1. Различия между ядрами с модульной и монолитной архитектурами
2.Ограничения и допущения
3.Пакеты
4.Дополнительно устанавливаемые пакеты
5.Создание аварийной загрузочной дискеты для ядра с модульной архитектурой
6.Подготовка ядра к инсталляции
7.Применения патча Grsecurity
8.Настройка ядра
9.Очистка ядра
10. Конфигурирование ядра
11. Конфигурирование ядра с монолитной архитектурой
12. Конфигурация ядра с модульной архитектурой
13. Компиляция ядра
14. Инсталляция ядра
15. Настройка загрузчика
16. Файл /etc/modules.conf
17. Проверка работоспособности нового ядра 18. Создание аварийной загрузочной дискеты для ядра с монолитной архитектурой