The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Распределенная компиляция при помощи CCache (compile gcc speed tune)


<< Предыдущая ИНДЕКС Правка src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: compile, gcc, speed, tune,  (найти похожие документы)
From: Илья Воронин <http://www.ivoronin.pp.ru/>; Date: Mon, 20 Apr 2005 18:21:07 +0000 (UTC) Subject: Распределенная компиляция при помощи CCache Оригинал: http://www.zlug.pp.ru/book/view/77 Использование CCache. Введение Очень часто приходится компилировать один и тот-же код несколько раз - к примеру вы пишите программу и часто проверяете результат, или просто пересобираете ядро с разными опциями. При этом большинство файлов остаются неизменными, но приходится снова и снова ждать пока они скомпилируются. В связи с этим хочется рассказать о замечательной программе - ccache (http://ccache.samba.org/). Что это такое? Ccache - это кэширующий препроцессор - для каждого файла вычисляется хэш, на основании которого в последствии можно определить уже скомпилированный файл, - это дает серьезный прирост в скорости на 2 и последующих сборках. Кэш обычно располагается в ~/.ccache. Установка Есть два способа установки ccache - первый: добавить префикс ccache в вызове компилятора, например для этого можно исправить Makefile программы: CC=gcc CXX=g++ на CC=ccache gcc CXX=ccache g++ А в случае сборки с помощью скрипта configure: $ CC="ccache gcc" CXX="ccache g++" ./configure И второй - создать следующие символические ссылки: # ln -s /usr/local/bin/ccache /usr/local/bin/gcc # ln -s /usr/local/bin/ccache /usr/local/bin/g++ таким образом запуская /usr/local/bin/gcc для компиляции, мы на самом деле будем запускать ccache. Теперь надо сделать так, чтобы один из этих способов использовался в системе вместо компилятора по умолчанию: в OpenBSD/FreeBSD для этого необходимо отредактировать файл /etc/mk.conf или /etc/make.conf: В первом случае CC=ccache gcc CXX=ccache g++ Во втором случае: CC=/usr/local/bin/gcc CXX=/usr/local/bin/g++ (нужна информация о том, как сделать аналогичное действие в Gentoo) Тестирование Итак проведем несложный тест: Кэш пуст: /usr/local/src/openssl # export SDATE="`date`" ; make ; echo $SDATE; date [.. сборка ..] Tue May 11 20:51:31 MSD 2004 Tue May 11 20:51:47 MSD 2004 Итого сборка заняла что-то около 16 секунд. Теперь тоже самое, но с заполненным в первом тесте кэшем: [.. сборка ..] Tue May 11 20:52:40 MSD 2004 Tue May 11 20:52:43 MSD 2004 Всего три секунды - неплохо, не правда ли? Eye-wink . Конечно этот тест очень груб - но представление об увеличении скорости дает. compiler cannot produce executables.. Часто возникает такая проблема - configure скрипт выдает "Error: compiler cannot produce executables", - это вызвано небольшой ошибкой в ccache, которую я исправил так: --- ccache.c.orig Sun Sep 28 08:48:17 2003 + ccache.c Sun May 9 13:59:06 2004 @@ -966,10 +966,15 @@ int main(int argc, char *argv[]) { char *p; + struct passwd *pw; cache_dir = getenv("CCACHE_DIR"); if (!cache_dir) { - x_asprintf(&cache_dir, "%s/.ccache", getenv("HOME")); + if ( (pw = getpwuid(getuid())) == NULL ) { + cc_log("cannot determine home directory\n"); + failed(); + } + x_asprintf(&cache_dir, "%s/.ccache", pw->pw_dir); } cache_logfile = getenv("CCACHE_LOGFILE"); --- ccache.h.orig Sun Sep 28 08:48:17 2003 + ccache.h Sat May 8 04:51:48 2004 @@ -19,6 +19,7 @@ #include <stdarg.h> #include <dirent.h> #include <limits.h> +#include <pwd.h> #define STATUS_NOTFOUND 3 #define STATUS_FATAL 4 Заключение Ccache дает отличный прирост скорости при повторной пересборке программы. К примеру я собирал ядро Linux на машине с процессором Pentium MMX / 200 Mhz всего за 10 минут. Если вы занимаетесь написанием больших программ, портированием их на свою ОС или просто являетесь пользователем Gentoo Linux - это то что вам нужно Eye-wink

<< Предыдущая ИНДЕКС Правка src Установить закладку Перейти на закладку Следующая >>

Обсуждение [ RSS ]
  • 1, xaionaro (?), 10:32, 19/02/2009 [ответить]  
  • +/
    export SDATE="'date'" ; make ; echo $SDATE; date

    Мне больше нравится time make

     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру