Бруй В.В., Карлов С.В. - Linux-сервер - пошаговые инструкции - инсталляции и настройки (1077321), страница 20
Текст из файла (страница 20)
Авторы не рекомендуют использовать эту опцию.Использование команды sudo вместо su для регистрации в качестве суперпользователяПрограмма sudo, также как и команда su, позволяет выполнять команды от имени и с полномочиями другого пользователя, но более безопасным и информативным способом. Используя sudo, вы получитеполную информацию о том, кто вошел в систему как суперпользователь root, а также много другой полезной информации. Инсталляция и настройка sudo рассматривается далее в отдельной главе.Если вы планируете использовать sudo, удалите SUID-бит из файла /bin/su:[root@drwalbr /]# chmod a-s /bin/suГлава 5.
Оптимизация операционной системыГлава 5Оптимизация операционной системыВ этой главе1. Статические и динамические библиотеки2. Библиотеки Linux Glibc 2.23. Почему Linux-программы распространяются в исходных кодах4. Файл gcc specs5. Удаление комментариев из исполняемых файлов и библиотек6. Оптимизация настроек жесткого диска с IDE-интерфейсом6162Часть 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 или 3DNow! Естественно, при использовании предварительно откомпилированного программного обеспечения неможет быть достигнута максимальная производительность системы, если вы, конечно, не используете процессор 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 -vReading specs from /usr/lib/gcc-lib/i386-asplinux/2.96/specsgcc version 2.96 20000731 (ASPLinux 7.3 2.96-112)Шаг 2i686 или 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 откройтеlinux/2.96/specs.
В ниже приведенном фрагменте:*cpp_cpu_default:-D__tune_i386__файл/usr/lib/gcc-lib/i386-redhat-*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.