Добавить в избранное | Сделать стартовой страницей

Большая Linux библиотека для пользователей OS Linux и ПО для нее
Есть что сказать? Нужен совет? Посети наш форум.


При поддержке
Продвижение сайта
Создание сайта
Администрирование сервера
настройка сервера
Администрирование сервера
настройка сервера
Администрирование сервера
аренда сервера


Оптимизация GCC.

Автор : Jpiszcz
Перевод : Юрий Прушинский
Я - один из счастливых обладателей процессора Pentium 3 866Mhz. Всё было прекрасно, жизнь била ключом [Примерно 45-го размера. :-) Прим.ред.], пока я не прочитал статью с freashmeat на тему оптимизации GCC [После этого ключ заменил обух. :-) Прим.ред.]. Статья заставила меня призадуматься вот над каким вопросом: насколько быстрее gcc будет компилировать ядро, если его самого [gcc] немного оптимизировать? Недолго думая, я приступил к делу. Для начала я решил засечь время, затрачиваемое на компиляцию ядра без оптимизации. Думаю, что большинство пользователей Линукс рано или поздно приходят к тому, чтобы собрать своё ядро, так что надеюсь мой тест окажется кому-нибудь полезным. Итак, условия теста таковы:
  1. Сделать 10 контрольных компиляций ядра и таким образом вычислить среднее время.
    • Сборка обычным gcc.
    • Сборка оптимизированным gcc.
  2. Версия ядра - самая последняя из стабильной ветки.
    • На данный момент это версия 2.4.20.
  3. Версия GCC тоже самая последняя из стабильных.
    • На данный момент это версия 3.2.2.

И вот результаты, полученные при сборке неоптимизированным компилятором (configure;make;make install)
Среднее время, вычисленное из 10 запусков 'make bzImage':
12.42 минут (762 секунды)

Для оптимизации компилятора я использовал следующие ключи:

-O3 -pipe -fomit-frame-pointer -funroll-loops -march=pentium3 -mcpu=pentium3
-mfpmath=sse -mmmx -msse

Если вам любопытно узнать как это сделать, то почитайте FAQ в архиве с gcc. Я например, поступил следующим образом:

   ./configure ; make BOOT_CFLAGS="ключи оптимизации" bootstrap ; make install

Среднее время, вычисленное из 10 запусков 10 'make bzImage'
9.31 минут (571 секунд)

Вообще я скомпилировал практически всё, чем я пользуюсь на своей Линукс-машине. Если кому интересно, то для управления установленными пакетами я пользуюсь менеджером relink.

По результатам теста видно, что мы получаем прирост в скорости компиляции на 33% (3:11 минуты, или на 191 секунду быстрее). Это может показаться не ахти каким результатом, но при сборке больших программ (например QT или Mozilla) эта разница будет уже существенна. Замер времени для теста я сделал при помощи следующего несложного скрипта:

cd /usr/src/Linux

for i in seq 1 10

do

  make dep

  make clean

  /usr/bin/time bzImage 2>> /home/war/log

done

А вот сведения о затраченном времени и средней загрузке процессора для каждой сборки:

Без оптимизации (Стандартный GCC-3.2.2):

   720.88user 34.54system 12:43.97elapsed 98%CPU (0avgtext+0avgdata 0maxresident)k

   719.06user 35.69system 12:42.09elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k

   719.14user 34.37system 12:39.64elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k

   720.52user 36.42system 12:46.68elapsed 98%CPU (0avgtext+0avgdata 0maxresident)k

   721.07user 33.86system 12:41.59elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k

   718.95user 35.65system 12:41.31elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k

   721.83user 36.26system 12:51.54elapsed 98%CPU (0avgtext+0avgdata 0maxresident)k

   720.29user 34.18system 12:40.63elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k

   719.14user 34.80system 12:39.19elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k

   721.16user 33.88system 12:41.93elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k


С оптимизацией (GCC-3.2.2 w/ "-O3 -pipe -fomit-frame-pointer -funroll-loops
-march=pentium3 -mcpu=pentium3 -mfpmath=sse -mmmx -msse")

   532.09user 33.62system 9:32.76elapsed 98%CPU (0avgtext+0avgdata 0maxresident)k

   531.57user 32.92system 9:29.25elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k

   532.99user 33.12system 9:31.18elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k

   532.58user 33.16system 9:30.57elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k

   533.18user 32.96system 9:31.34elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k

   534.01user 32.21system 9:32.50elapsed 98%CPU (0avgtext+0avgdata 0maxresident)k

   532.59user 33.41system 9:31.56elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k

   532.76user 33.68system 9:32.01elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k

   534.19user 32.54system 9:31.92elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k

   534.11user 32.76system 9:32.40elapsed 99%CPU (0avgtext+0avgdata 0maxresident)k

Обратите внимание, что для оптимизации я применил не самый лучший метод (использовал -fomit-frame-pointer), в частности для отладки. Тем не менее, моей целью было увеличение производительности компилятора, поэтому об остальном я не особо заботился.


ботокс написать