ccache, tmpfs и их связка

Sabayon, Calculate, Funtoo, Exherbo

Модератор: /dev/random

Аватара пользователя
Dreamer77
Сообщения: 202
ОС: Debian, openSUSE, Mac OS X

ccache, tmpfs и их связка

Сообщение Dreamer77 »

Доброго времени суток!

1. вопрсо относительно ccache. На gentoo wiki, как и на фоумах читал и уяснил, что ccache требуется и полезен лишь тогда, когда надо один и тот же пакет, одной и той же версии, несколько раз с различными флагами компилировать. А если обновлять пакет, то ccache использован не будет.
На днях на ЛОРе встретил фразу о том, что если при обновлении пакета изменилась лишь малая его часть, то при компиляции с ccache, оставшаяся неизменной часть будет взята из ccache, и не будет заново перекомпилироваться.

Развейте пожайлуйста мои сомнения.

2. Использую tmpfs для /var/tmp/portage следуя gentoo wiki:
http://en.gentoo-wiki.com/wiki/Portage_TMPDIR_on_tmpfs
Заметен прирост скорости компиляции и установки пакетов.

3. Сейчас задумался о подключении ccache. Посему встает вопрос: будут ли конфликтовать ccache и portage_tmp_on_tmpfs ??
В том смысле, что куски кода будут находиться в оперативной памяти, после чего при размонтировании исчезнут.
Так вот, будет ли система брать файлы из ccache при использовании tmpfs? И будет ли туда писать?
Ubuntu-->Debian-->Gentoo-->openSUSE-> Mac OS X
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: ccache, tmpfs и их связка

Сообщение serzh-z »

Dreamer77
Всё просто, ccache работает примерно так:

1. Строится хеш файла, который базируется на:
- размере файла
- его полном пути
- его содержимом
- времени модификации
- опциях компилятора

2. Если в кеше для данного хеша найден файл, то используется его содержимое (вывод компилятора), если не найден - файл отдаётся реальному компилятору

У ccache есть два режима и куча опций. Один (включен по умолчанию) - создаёт хеш на основе содержимого файла и его аттрибутов. Второй - создаёт хеш на основе выводе C/C++-препроцессора. Понятное дело - второй чуть медленнее. Опции указывают что именно хешировать (путь, размер и т.д., можно, например, отключить включение в расчёт хеша путь файла).

Dreamer77 писал(а):
27.03.2012 19:08
Так вот, будет ли система брать файлы из ccache при использовании tmpfs? И будет ли туда писать?
ccache и tmpfs - это перпендикулятные вещи.

Dreamer77 писал(а):
27.03.2012 19:08
На днях на ЛОРе встретил фразу о том, что если при обновлении пакета изменилась лишь малая его часть
ccache работает с файлами, а не с пакетами. Он прост, как пробка.
Спасибо сказали:
Аватара пользователя
Dreamer77
Сообщения: 202
ОС: Debian, openSUSE, Mac OS X

Re: ccache, tmpfs и их связка

Сообщение Dreamer77 »

Спасибо за быстрый ответ!

В целом понял как cache работает.
Правильно ли мыслю?

пусть имеется пакет kate-4.7.4, состоящий из пары сотен файлов.
запускаем компиляцию. ccache обрабатывает исходные файлы и составляет по ним хеш
после чего скомпилированные файлы кладутся в хранилище и ждут своего часа.
установка завершена

вышла новая версия kate-4.8.0, и из пары сотен файлов изменения коснулись только штук 5.
запускаем компиляцию. ccache проверяет новый файлы, находит что 195 файлов он уже знает
подставляются скомплированные файлы, идет компиляция оставшихся 5 файлов.
установка завершается.
Ubuntu-->Debian-->Gentoo-->openSUSE-> Mac OS X
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: ccache, tmpfs и их связка

Сообщение serzh-z »

Dreamer77 писал(а):
27.03.2012 20:06
Правильно ли мыслю?
Да.
Dreamer77 писал(а):
27.03.2012 20:06
ccache проверяет новый файлы, находит что 195 файлов он уже знает
Если выставлена переменая CCACHE_HASHDIR, то два одинаковых файла из разных версий будут считаться разными, так как будут лежать в разных каталогах. Не уверен, что Portage выставляет эту опцию. Опять же - в аргументах gcc могут быть указаны абсолютные пути для файлов, в результате чего командные строки, для файлов из разных версий, будут отличаться. Т.е. нет гарантии, что конкретный файл из конкретного пакета будет взят из кеша, даже если он там есть и актуален.
Спасибо сказали:
Аватара пользователя
Dreamer77
Сообщения: 202
ОС: Debian, openSUSE, Mac OS X

Re: ccache, tmpfs и их связка

Сообщение Dreamer77 »

про пути к файлу понял. Почитаю подробней об опциях.

Другой вопрос и тоже с ccache связан.
В make.conf стоят флаги -march=native/
При обновлении версии gcc эти флаги с легкостью могут измениться, и в итоге получится не радостная ситуация.

Да и в любом случае, при серьезной смене версии надо всю систему пересобирать. При этом как понимаю использование ccache совсем нежелательно и даже противопоказано.
Ubuntu-->Debian-->Gentoo-->openSUSE-> Mac OS X
Спасибо сказали: