ccache
Обновлено 2 февраля 2020
Введение
ccache - это кэш компиляторов языка С и С++. Он ускоряет перекомпиляцию, кэшируя результаты предыдущих компиляций и обнаруживая, когда такая же компиляция выполняется снова. Поддерживаемые языки: C, C++, Objective-C и Objective-C++. Ccache был тщательно написан для того, чтобы всегда генерировать точно такой же вывод компилятора, который вы получили бы без кэша. Единственный способ узнать, что вы используете ccache - это скорость.
Особенности
- Ведение статистики попаданий/промахов.
- Автоматическое управление размером кэша.
- Может кэшировать компиляции, которые генерируют предупреждения.
- Простая установка.
- Низкие накладные расходы.
- Может сжимать файлы в кэше для уменьшения места на диске.
Ограничения
- Умеет кэшировать компиляцию только одного файла: много файловая компиляция, компоновка по-прежнему будут использовать реальный компилятор.
- Некоторые флаги компиляции не поддерживаются, в этом случае ccache вызовет реальный компилятор.
Применение в Calculate Linux
- Пересборка пакетов с использованием различных USE флагов.
- Пересборка пакетов с наложением различных патчей.
- Использование live (9999) пакетов.
- Установка больших пакетов, таких как Chromium, Libreoffice, Firefox, из исходного кода без страха потерять результат многочасовой компиляции в следствии ошибки.
- Пересборка ядра.
Установка
Для установки ccache выполните:
emerge -a dev-util/ccache
После установки ccache будет настроен на работу c Portage и cl-kernel
. Рабочий каталог находится в /var/calculate/ccache.
Настройка
Размер ccache по умолчанию ограничен 5 Гб. Для настройка максимального размера кэша задайте необходимое значение в настройках Portage:
/etc/portage/make.conf/custom
# Максимальный размер ccache CCACHE_SIZE=10G
Заметка
Настройка размера ccache в файле /var/calculate/ccache/ccache.conf будет скорректирована после сборки любого пакета.
Использование
Для просмотра статистики работы ccache выполните:
cache directory /var/calculate/ccache primary config /var/calculate/ccache/ccache.conf secondary config (readonly) /etc/ccache.conf stats updated Fri Jan 31 11:54:54 2020 stats zeroed Fri Jan 31 11:54:54 2020 cache hit (direct) 0 cache hit (preprocessed) 0 cache miss 0 cache hit rate 0.00 % cleanups performed 0 files in cache 0 cache size 0.0 kB max cache size 5.0 GB
Для примера соберите пакет app-editors/vile из исходного кода, отключив использование бинарного репозитория:
FEATURES="-getbinpkg" emerge -a app-editors/vile
Просматривая новую статистику, можно увидеть, что во время компиляции в кэш было добавлено множество записей, но пока кэш не был использован повторно:
cache directory /var/calculate/ccache primary config /var/calculate/ccache/ccache.conf secondary config (readonly) /etc/ccache.conf stats updated Fri Jan 31 11:57:52 2020 stats zeroed Fri Jan 31 11:54:54 2020 cache hit (direct) 0 cache hit (preprocessed) 0 cache miss 194 cache hit rate 0.00 % called for link 174 called for preprocessing 44 compile failed 6 preprocessor error 1 bad compiler arguments 2 autoconf compile/link 100 no input file 3 cleanups performed 10 files in cache 342 cache size 3.0 MB max cache size 5.0 GB
Запустите ещё раз сборку пакета vile
и снова отобразите кэш:
FEATURES="-getbinpkg" emerge -a app-editors/vile
cache directory /var/calculate/ccache primary config /var/calculate/ccache/ccache.conf secondary config (readonly) /etc/ccache.conf stats updated Fri Jan 31 12:03:17 2020 stats zeroed Fri Jan 31 11:54:54 2020 cache hit (direct) 146 cache hit (preprocessed) 47 cache miss 195 cache hit rate 49.74 % called for link 348 called for preprocessing 88 compile failed 12 preprocessor error 2 bad compiler arguments 4 autoconf compile/link 200 no input file 6 cleanups performed 10 files in cache 344 cache size 3.0 MB max cache size 5.0 GB
Теперь уже видно, что кэш активно используется. При достижении максимального размера кэша, ccache будет удалять менее используемые записи.
Для сброса статистики выполните:
ccache -z
Для сброса данных кэша выполните:
ccache -C
Ccache автоматически используется пакетным менеджером и cl-kernel
. Если вы хотите использовать ccache при любой компиляции с использованием компилятора GCC, переопределите переменную PATH
:
export PATH="/usr/lib/ccache/bin:$PATH"
Для постоянного использования ccache добавьте эту настройку в .bashrc
:
echo 'export PATH="/usr/lib/ccache/bin:$PATH"' >> ~/.bashrc
Непривилегированному пользователю может понадобиться указать свой каталог кэша. По умолчанию будет использован каталог ~/.ccache:
echo 'export CCACHE_DIR="/var/calculate/userccache"' >> ~/.bashrc