В началоПрочее →  Оптимизация glibc
Gentoo-doc HOME Пред.: Udev и автомонтирование носителейВ началоУровень выше: ПрочееСлед.: Подключение USB-flash

6.  Оптимизация glibc

6.1. Введение

Glibc — свободная библиотека, предоставляющая системные вызовы и другие основные операторы для основных систем GNU/Linux. Если C является наиболее распространённым языком, используемым для программирования в Linux, такая же судьба постигла и glibc — она является продуманной частью ядра системы. Glibc может быть оптимизирована на вашей системе для ускорения операций различными способами. Оптимизация, естественно, зависит от вашей системы и её использования. Это также зависит от установки флагов USE, доступных при выполнении emerge. До применения рекомендаций рекомендуется узнать о назначении и использовании флагов USE. Есть неплохая инструкция здесь.

6.2. Оптимизация компиляции Glibc

Эффект CFLAGS

Компиляция Glibc с возможностями GCC используется в основном коде glibc. Glibc идентифицирует GCC как компилятор и использует установленный флаги CFLAGS.Подробней здесь. Используя правильные флаги CFLAGS для вашей системы, вы можете хорошо оптимизировать glibc.

Улучшение оптимизации

Если вы использовали -fomit-frame-pointer, вы можете также поместить glibc-omitfp во флаги USE. Повторно пересоберите glibc. Code: Remerging glibc

emerge --newuse -v world

При этом соберутся Glibc и её зависимости. При компиляции glibc этот флаг активизирует флаг -enable-omitfp, который, в свою очередь, указывает glibc на использование --fomit-frame-pointer. В результате более безопасно устанавливается указатель кадра. Этот флаг устанавливает максимальную оптимизацию glibc и предоставляет два типа библиотек — 'оптимизированная' и 'стандартная'. То есть, по умолчанию будут использоваться оптимизированные библиотеки, но при необходимости можно будет использовать 'стандартную' версию. Это увеличит размер glibc и приведет к обычному поведению при установленном --fomit-frame-pointer, т.е. сделает невозможным отладку (debug) программ, так что не используйте этот флаг если вы планируете заниматься разработкой программ. Теоретически этот флаг может вызвать некоторые ошибки компилятора, хотя на практике он достаточно безопасен, тем не менее вы были предупреждены.

Модели потоков

glibc поддерживает 2 различных модели потоков — старую linuxthreads и новую nptl. По умолчанию, если не был указан флаг nptlonly, кроме nptl собирается и версия с linuxthreads. В случае, если у вас нет устаревшего программного обеспечения, вы можете указать флаг nptl. Если у вас современная система без сторонних бинарных пакетов, будет лучше указать nptlonly, чтобы избежать сборки glibc дважды (с поддежкой linuxthreads и без неё).

6.3. Локализация

В основном это основано на еженедельном новостном бюллетене Gentoo от 8 ноября 2004 года, который можно найти здесь (en:TIP Specifying only needed locales). Вы можете выбрать, какие локали (включая раскладки и установки клавиатуры, времени и т.д.) будут собраны при установке. Если вы не ограничите локали, используемые в вашей системе, будут собраны все имеющиеся локали, начиная с aa_DJ (локаль Афар для Джибути) через en_GB (английская локаль для Великобритании) и заканчивая zu_ZA.utf8 (локаль Зулу для Южной Африки). При ограничении сборки локалей вы можете сохранить до 90% места, необходимого для Glibc в вашей системе, сохранить время, необходимое на сборку ненужных вам локале и, как следствие, уменьшить общее время компиляции. Если вы действительно не нуждаетесь в них всех (а трудно представить, кому это могло бы понадобиться), вы можете ограничить их необходимым минимумом.

Используйте флаг USE userlocales для сборки только тех локалей, которые указаны в /etc/locales.build.

Отредактируйте /etc/make.conf в вашем любимом редакторе и поместите userlocales где-нибудь между "" в строке USE="".

Другой способ — изменить /etc/portage/package.use используя данную команду: Code: Activating the userlocales USE flag for glibc

echo "sys-libs/glibc userlocales" >> /etc/portage/package.use

После этого вы можете указать локали, которые хотите использовать:

Файл: nano -w /etc/locales.build

#Читайте комментарии в начале файла для большей информации!

en_US/ISO-8859-1

en_US.UTF-8/UTF-8

#en_GB/ISO-8859-1

#en_GB.UTF-8/UTF-8

de_DE/ISO-8859-1

de_DE@euro/ISO-8859-15

ru_RU.UTF-8/UTF-8

В glibc-2.3.6-r4 или glibc-2.4-r2, был удалён флаг userlocales. Вы должны править файл /etc/locale.gen и удалить /etc/locales.build.

Вы можете воспользоваться для этого следующими командами: Code: Convert locales.build to locale.gen

cd /etc

grep '^[^#].*' locales.build | sed 's:/: :' > locale.gen

rm locales.build

nano -w locale.gen

Файл: nano -w /etc/locale.gen

#Читайте комментарии в начале файла для большей информации!

en_US.UTF-8 UTF-8

en_US ISO-8859-1

ru_RU.UTF-8 UTF-8

de_DE ISO-8859-1

de_DE@euro ISO-8859-15

Вы можете найти правильные значения локалей в файле /usr/share/i18n/SUPPORTED.

Помогите! Я не знаю, какими должны быть настройки моей локали!

Не волнуйтесь, это просто. Записи в этом файле должны быть в формате <locale>/<charmap>. <locale> это локаль из каталога /usr/share/i18n/locales, а <charmap> — это имя одного из файлов каталога /usr/share/i18n/charmaps/. Нужно только понимать два момента: первое, локаль с новой валютой, такой как евро, требует изменения @euro, описанного в примере выше. Второе, локали UTF-8 требуют от вас добавления .UTF-8 в конец определения локали (нет, я не знаю, зачем, но иначе оно не работает).

Если вы В САМОМ ДЕЛЕ хотите минимизировать ваши локали, вам всего лишь нужно перевести вашу систему на Юникод. Вообще-то пока есть причины этого не делать, но это уже становится стандартом de facto, так как несёт множество преимуществ перед старыми форматами ISO, ASCII и другими. Больше об этом можно прочесть здесь и здесь, а также непосредственно в соответствующем руководстве с сайта Gentoo.

Вам просто нужно определить следующее: Файл: nano -w /etc/locales.build

#Как раньше!

en_US.UTF-8/UTF-8

ru_RU.UTF-8/UTF-8

Обратите внимание, я оставил строку US UTF-8. Её лучше не убирать, так как некоторые программы не соберутся без неё.

Сделайте это до установки Gentoo

Вы можете выполнить эти настройки до началасборки системы с нуля. Просто следуйте инструкциям из Gentoo Handbook. Это позволит меньше волноваться о возможных недоделках программ после сборки и наслаждаться быстрой сборкой.

Сделайте это после установки Gentoo

Если glibc уже установлена, вам потребуется пересобрать glibc:

Code: Пересборка glibc

emerge glibc

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

Возможно, вам стоит обратить внимание на пакет localepurge, который может очистить систему от любых установленных man страниц или info-файлов на языках не используемых в вашей системе. Вначале прочитайте man к localepurge, что бы определить локали, которые необходимо пропустить в /etc/locale.nopurge.

Для большей инфомации об управлении локалями читайте:

Gentoo Linux Localization Guide.

Или на русском языке Руководство по русской локализации Gentoo Linux.

Эта оптимизация полностью безопасна (Кроме случаев, если вы не можете читать на языке, который установили!).

6.4. Безопасность

Как безопасность относится к оптимизации? Итак, это оптимизация безопасности, поскольку ранее было сказано, как оптимизация зависит от вашей системы и как всё это работает. Если это сервер, вы, к примеру, можете пожертвовать оптимизацией в угоду безопасности, или выполнить обе оптимизации.

Стабилизация Glibc

Это предполагает (как вы, возможно, догадывались...) использование флага USE hardened. Это сделает вашу систему более устойчивой к нападениям разного вида.

Усиление стека

Используйте флаг erandom если вам необходимо использование модуля случайных чисел, установленного в вашем ядре.

Пред.: Udev и автомонтирование носителейВ началоУровень выше: ПрочееСлед.: Подключение USB-flash
В началоПрочее →  Оптимизация glibc