Май 28 2010

Portage

Published by

SQLite

для ускорения процесса расчёта зависимостей можно научить portage работать со SQLite

1. пакет dev-lang/python должен быть собран с USE флагом sqlite

2. создаём файл /etc/portage/modules если он ещё не создан

добавляем в него строку

portdbapi.auxdbmodule = cache.sqlite.database

3. если используете версию portage новее чем 2.1.6.4 то в make.conf к FEATURES= добавляем через пробел metadata-transfer

FEATURES="parallel-fetch metadata-transfer"

4. пересоздаём кэш

rm -rf /var/cache/edb/dep && emerge --metadata

5. если хотите что бы eix тоже использовал sqlite то его тоже надо пересобрать с USE флагом sqlite

6. для того чтобы eix использовал sqlite и для оверлеев добавляем в /etc/eixrc строки

PORTDIR_CACHE_METHOD='sqlite'
OVERLAY_CACHE_METHOD='sqlite'

если не пользуетесь

eix-remote update

то последнюю строку лучше заменить на

OVERLAY_CACHE_METHOD='parse'

7. пересоздаём кэш eix

eix-update

squashfs + tmpfs + aufs

 

lbzip2
lbzip2 это реализация bzip2 с возможностью выполнять компрессию/декомпрессию в несколько потоков.
сравнение на разогнанной до 3.2GHz E7200 (перед каждым запуском кэш обнулялся):
bzip2

[ megabaks@desktop ] ~/testio $ time bunzip2 chromium-18.0.977.0.tar.bz2

real 0m44.510s
user 0m34.399s
sys 0m2.310s
[ megabaks@desktop ] ~/testio $ time bunzip2 chromium-18.0.977.0.tar.bz2

real 0m44.266s
user 0m35.787s
sys 0m2.222s
[ megabaks@desktop ] ~/testio $

lbzip2

[ megabaks@desktop ] ~/testio $ time lbunzip2 -n2 chromium-18.0.977.0.tar.bz2

real 0m21.298s
user 0m36.332s
sys 0m3.707s
[ megabaks@desktop ] ~/testio $ time lbunzip2 -n2 chromium-18.0.977.0.tar.bz2

real 0m21.339s
user 0m36.378s
sys 0m3.739s
[ megabaks@desktop ] ~/testio $

при сжатии разница примерно такая же:
bzip2

[ megabaks@desktop ] ~/testio $ time bzip2 chromium-18.0.977.0.tar

real 2m33.827s
user 1m5.085s
sys 1m24.295s
[ megabaks@desktop ] ~/testio $

lbzip2

[ megabaks@desktop ] ~/testio $ time lbzip2 -n2 chromium-18.0.977.0.tar

real 1m6.772s
user 1m2.581s
sys 1m2.460s
[ megabaks@desktop ] ~/testio $

для использования этого в портаже нужно добавить в make.conf

PORTAGE_BUNZIP2_COMMAND="lbunzip2 -nX"

где X = кол-во ядер

econf (не безопасно)

для ускорения работы скриптов configure можно использовать кэш
для этого в make.conf добавляем

EXTRA_ECONF="-C --cache-file=/var/tmp/configure.cache"

т.к. в некоторых ебилдах используются append/strip для {C,CXX}FLAGS, то эти переменные, естественно, будут отличатся для разных пакетов.
это может привести к следующему (на моих флага)

configure: loading cache /var/tmp/configure.cache
configure: error: `CFLAGS' has changed since the previous run:
configure:   former value:  `-O2 -march=core2 -mtune=generic -mfpmath=sse -msse4.1 -fomit-frame-pointer -pipe'
configure:   current value: `-O2 -march=core2 -mtune=generic -pipe'
configure: error: `CPPFLAGS' was not set in the previous run
configure: error: in `/var/tmp/portage/x11-libs/gtk+-3.2.3/work/gtk+-3.2.3':
configure: error: changes in the environment can compromise the build
configure: error: run `make distclean' and/or `rm /var/tmp/configure.cache' and start over

чтобы этого не происходило, нужно добавить в /etc/portage/bashrc

#ECONF
  sed -e "s|.*FLAGS.*||" -i /var/tmp/configure.cache

профиты:
prepare && configure для tar-а без кэша 48 сек
с кэшем 14 сек
но это если используется один компилятор для всех пакетов, иначе надо добавить следующее

#ECONF
  sed -e "s|.*FLAGS.*||" \
          -e "s|.*CC.*||" \
          -e "s|.*CXX.*||" \
          -e "s|.*CPP.*||" \
          -i /var/tmp/configure.cache

но это на свой страх и риск, т.к. может вызвать проблемы при сборке!

18 responses so far

18 Responses to “Portage”

  1. vurdalakon 13 Окт 2010 at 21:38

    Спасибо! Буду пробовать. Правда прирост скорости будет сферический, но в этом вся гента ;)

  2. vurdalakon 14 Окт 2010 at 06:52

    К тому же теперь при синхронизации приходится ждать, пока он эту свою базу построит.

  3. megabakson 14 Окт 2010 at 13:46

    он и до этого «строил» — только прогресс бара не было

  4. vurdalakon 16 Окт 2010 at 08:24

    А почему у меня eix теперь не видит оверлеи ни в какую?

  5. vurdalakon 16 Окт 2010 at 08:31

    Depending on the metadata your local and layman overlays provide, the sqlite option might not work, so if you’re experiencing errors, omit the OVERLAY_CACHE_METHOD variable.
    Пришлось сделать именно так, ибо eix-update ругался на невозможность прочитать файл кеша для оверлеев.

  6. megabakson 16 Окт 2010 at 16:30

    читай внимательней!

  7. vurdalakon 24 Окт 2010 at 14:10

    А что я пропустил?

  8. megabakson 24 Окт 2010 at 14:44

    нужно пересобрать eix с юзом sqlite
    не? :)

  9. vurdalakon 05 Ноя 2010 at 22:13

    Дык пересобирал уже.

  10. megabakson 06 Ноя 2010 at 04:44

    и старые не-скул базы снёс?

  11. vurdalakon 08 Ноя 2010 at 19:45

    >и старые не-скул базы снёс?
    Ась? Как и зачем? Где это написано?

  12. megabakson 08 Ноя 2010 at 21:38

    >>и старые не-скул базы снёс?
    >Ась? Как и зачем? Где это написано?

    rm -rf /var/cache/edb/dep
  13. vurdalakon 08 Ноя 2010 at 23:07

    А, это сделал, да. Все что написано вроде бы делал.

  14. emg81on 03 Сен 2011 at 21:26

    спасибо, теперь несколько быстрее (~9%, сравнивая по time) расчёт обновок и мгновенное обновление базы данных eix

  15. SlaXon 25 Фев 2012 at 23:01

    lbunzip2 в новых версия пакета lbzip2 на Gentoo нету, для распаковки необходимо указывать свитч -d
    PORTAGE_BUNZIP2_COMMAND = «lbzip2 -d -nX»

  16. megabakson 26 Фев 2012 at 00:05

    это что за версии?
    в распоследней 2.1-r2 есть всё

  17. SlaXon 27 Фев 2012 at 12:28

    > это что за версии?
    > в распоследней 2.1-r2 есть всё
    app-arch/lbzip2-2.1-r2 помечен как не стабильный
    в стабильном 0.23-r2 команды bunzip2 нету.

  18. megabakson 28 Фев 2012 at 04:15

    ну если ты до сих пор веришь в «стабильность» «стабильной ветки»…
    пора своей головой думать

Trackback URI | Comments RSS

Leave a Reply


*

Powered by WordPress