Tips & tricks

This article is protected by the Open Publication License, V1.0 or later. Copyright © 2005 by Red Hat, Inc.

Original article: http://www.redhat.com/magazine/012oct05/departments/tips_tricks/

Red Hat Magazine, выпуск 12, октябрь 2005

Перевод: © Иван Песин

Служба поддержки пользователей Red Hat получает технические вопросы со всего мира. Специалисты Red Hat ежедневно добавляют полученные вопросы и ответы на них в базу знаний Red Hat Knowledgebase. Доступ к ней возможен при наличии учетной записи на сайте redhat.com. Каждый месяц Red Hat Magazine знакомит читателей с Red Hat Knowledgebase, публикуя несколько самых свежих вопросов и ответов.

Советы от RHCE

Утилиты командной строки для работы с SELinux

Одной из наиболее ценных особенностей Red Hat Enterprise Linux 4 является SELinux (Security Enhanced Linux) -- мощный слой безопасности уровня ядра, который предоставляет возможности тонкого контроля за тем, к чему в системе имеют доступ пользователи и процессы, и что они могут запускать. По умолчанию, SELinux активирован в системах Red Hat Enterprise Linux, осуществляя обязательный контроль доступа, который Red Hat называет политикой targeted. В основном, этот контроль доступа увеличивает безопасность соответствующих сетевых сервисов, но иногда может влиять на работы некоторых программ сторонних производителей и скриптов, работавших в предыдущих версиях Red Hat Enterprise Linux.

Крайне важно понимать работу основных утилит командной строки для SELinux.

  • sestatus - выводит общую информацию о состоянии и некоторые логические настройки
  • getenforce - выводит текущий режим работы selinux
  • setenforce 1/0 - переключает между режимами работы enforcing и warning
  • enforcing=1/0 - параметр загрузки grub, задающий режим enforcing или warning, вне зависимости от настроек в файле /etc/sysconfig/selinux
  • system-config-securitylevel - задает режим selinux и версию политики по-умолчанию
  • ключ -Z - используется утилитами "ps" и "ls" для вывода контекста безопасности файлов и процессов
  • chcon - изменяет контекст безопасности файлов (chcon --reference для использования эталона)


Существует ли gdb-плагин для Eclipse?

Да. Платформа Eclipse поддерживает gdbс помощью плагина CDT для разработки на C/C++. Плагин CDT для Eclipse доступен покупателям Red Hat Enterprise Linux в Red Hat Network (RHN), как часть Red Hat Developer Suite. Для установки eclipse-cdt в системе, зарегистрированной в RHN и подписанной на канал Red Hat Developer Suite, вы можете выполнить следующую команду:

up2date eclipse-cdt

Также доступны и другие графические отладчики, например ddd, основанные на gdb. Они входят  в состав Red Hat Enterprise Linux и доступны из RPM-пакета ddd

Другой интересной программой, является отладчик Red Hat Insight.

Как только я запускаю в моей системе OProfile, в системе становится практически невозможно работать. В чем проблема?

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

Выполните команду opcontrol с параметром --list-events. Она выведет типы событий, доступные для установленного процессора вместе с рекомендуемыми минимальными значениями счетчиков.

Как управлять точностью вычислений с плавающей запятой на платформе Intel в Red Hat Enterprise Linux?

Значения с плавающей запятой, которые хранятся в соответствующем стеке, имеют точность в 80 бит, тогда как при переносе этих значений в память, они округляются до 64 бит. Таким образом, для того чтобы отложить округление до 64 бит, храните значения с плавающей запятой как можно дольше в стеке.

Операции округления могут производиться и после каждого вычисления. Однако, это заметно снизит производительность.

Одним вариантом может быть установка округления значений с плавающей запятой до 64 бит. Но тут есть побочный эффект, а именно, становится недоступным тип long double. Кроме того, при операциях с плавающей запятой все равно могут возникать проблемы с недостаточной точностью. Некоторые компиляторы применяют этот подход. Как им пользоваться на Linux вы можете прочитать в man fegetround.

Возможным решением проблемы недостаточной точности, при использовании  gcc на Intel® Pentium® 4, может стать выполнение арифметических операций с плавающей запятой в регистрах SSE, что достигается указанием опции -mfpmath=sse. Регистры SSE имеют достаточную точность для операций с типами float и double, что устраняет проблему.

Еще одним решением является использование опции -ffloat-store. Оно помогает в некоторых случаях, но не всегда. Этот параметр принуждает выделять место для пользовательских переменных в стеке. Однако, временные переменные и дальше хранятся в регистрах, что может привести к ошибкам округления из-за недостаточной точности.

Вообще говоря, 80-битная точность результатов -- хорошая вещь, увеличивающая точность математических вычислений. Однако, она может добавить работы при портировании кода на другие архитектуры. Две наиболее часто возникающие проблемы:

  1. Несоответствие результатов, из-за потери битов на старых платформах, где внутренние вычисления производятся с точностью менее 80 бит
  2. Время нахождения ответа в итеративных алгоритмах. Это может иметь место в программах, ожидающих определенного значение, а в связи с округлением (меньшей точностью) на других платформах, время вычисления значения может быть меньше (больше), чем на ia32.

Работа с плавающей запятой на x86 является компромиссом между тем, что поддерживает аппаратная часть и тем, что компилятор может эффективно использовать.

Какой из файлов quota.h должен использоваться в пользовательских программах на Red Hat Enterprise Linux 4 Update 2?

Проблема:
Файл заголовков quota.h, входящий в состав пакета glibc-headers, в Red Hat Enterprise Linux 4 Update 2 отличается от файла, включенного в RPM-пакеты исходных текстов ядра и kernel-devel.

Решение:
Файл заголовков, включенный в RPM-пакеты исходных текстов ядра и kernel-devel не предназначены для использования и компиляции с пользовательскими программами.

Пользовательские программы должны использовать файлы заголовков, включенные в пакет glibc-headers.

В нашем случае, файл заголовков quota.h из пакета glibc-headers для Red Hat Enterprise Linux 4 Update 2 был обновлен для поддержки новых структур данных. Старая версия включена для обратной совместимости; во время компиляции приложения можно указать, какую версию необходимо использовать.

По умолчанию в glibc-headers для Red Hat Enterprise Linux 4 Update 2 используются структуры данных и интерфейсы старой версии. Потому, если приложение использует старую семантику работы с квотами, просто скомпилируйте его с заголовками из glibc-headers и все должно заработать.

Если же приложению необходимо работать с интерфейсами и структурами данных новой версии, тогда при компиляции с заголовками из glibc-headers нужно еще указать опцию:

-D_LINUX_QUOTA_VERSION=2