Персональный
сайт
Игоря
Сысоева


 
english
обо мне
 
sysoev.ru
 
nginx
 
mod_accel
mod_realip
mod_deflate
программирование
всякая всячина
windows
freebsd
apache
pppd
unix
web
 
 

Немного из мэйл листов FreeBSD, N4

 

04.09.2002

  • О пользе оптимизации
    Возвращаясь к теме, затронутой в "Немного из мэйл листов FreeBSD, N1". Archie Cobbs считает, что проблемы, возникающие при сборке ядра с оптимизацией -O2, связаны только с ассемблерными вставками.

    John Polstra сообщает, что ядро, собранное с параметрами оптимизации "-O2 -fomit-frame-pointer" стало быстрее на 9% при работе с netgraph модулем, обслуживающем HTTP-запросы.

    Кроме оптимизации -O, с которой обычно собираются все программы под FreeBSD, Jason Andresen считает единственно полезной оптимизацию -fomit-frame-pointer. Но полезна она лишь в случае, если в программе очень часто используются небольшие и быстрые процедуры — gcc не сохраняет на стэк адрес предыдущего фрэйма, хотя освобождающийся в этом случае регистр ebp всё же не используется.

    Впрочем, есть мнение, что даже если бы gcc использовал один регистр, то благодаря внутреннему динамическому переименованию регистров на Pentium Pro/II/III/4, код работал бы не сильно медленнее. Вполне возможно, хотя лично я считаю, что одного регистра мало, скорее всего, нужно хотя бы два.

    Peter Wemm рекомендует собирать программу под более современный процессор. Например, при генерации кода для 386 процессора gcc преобразует операцию умножения на константу в сдвиги и сложения, так как они быстрее выполняются на этом процессоре. Однако на Pentium'е и выше такой код будет работать медленнее, чем просто умножение. Не знаю, в какой версии gcc это должно работать, но у меня с флагом -mcpu=i686 gcc 2.95.2 вместо умножения на небольшие константы упорно двигает, складывает или использует вычисление индексного адреса. Хотя, например, умножение на 26 уже отличается.

  • MAXDSIZ
    Matthew Dillon нарисовал схему, из которой легко видеть, что входит в понятие MAXDSIZ.

  • Как заставить softupdates записать все изменения на диск
    Для этого рекомендуется выполнить четыре раза команду sync:

    sync; sleep 1; sync; sleep 1; sync; sleep 1; sync
    
    Впрочем, как пишет Kirk McKusick, даже это не всегда помогает.

(C) Игорь Сысоев