Ускорение portage через tmpfs

Материал из Gentoo Linux Wiki

Перейти к: навигация, поиск

Содержание

[править] Вступление

Сборка из исходников обычно занимает много времени. Оптимизация этого процесса может дать прибавку в скорости: возможна сборка x11-base/xorg-x11 -minimal за 15 минут на 1800+ AMD.

[править] Как работает?

Во время установки Portage создает кучи файлов в ${PORTAGE_TMPDIR} (по умолчанию в: /var/tmp) и довольно много гоняет их там. Если смонтировать tmpfs в ${PORTAGE_TMPDIR}, все данные будут в памяти, что в общем-то побыстрее. Точно побыстрее :-) Компиляция в общем ускорится и еще файловая система меньше фрагментирована будет и электроэнергии на шевеление головки винта тоже не нужно тратить - зеленые нас всех полюбят :-)

[править] Системные требования

512 MB памяти должно хватить даже для таких пакетов как KDE или GNOME. Для других (Firefox к примеру) может понадобиться больше.

Поддержка tmpfs в ядре.

Конфигурация ядра Linux: tmpfs config
File systems --->
     Pseudo filesystems ---> 
          [*] Virtual memory file system support (former shm fs)

[править] Рекомендации по размеру tmpfs

Если Вы используете swap, логично что он так-же начнет использоваться когда будет заканчиваться память. 900 MB смонтированных в tmpfs ("MEMSIZE=900") хватит почти на все.

Примеры всего:
300 MB tmpfs хватит для:

450 MB tmpfs хватит для:

500 MB tmpfs хватит для:

850 MB tmpfs не хватит для:

850 MB tmpfs хватит для:

1.1 GB tmpfs хватит для:

Сборка sys-devel/gcc-4.3.1-r1 с USE +fortran +gcj +gtk +mudflap +openmp скушает 1606 MB

Примерно 1.5 GB нужно для x11-libs/wxGTK. Возможно придется увеличить количество inod'ов.

Возможна сборка KDE при 350 MB если X11 и QT собирать отдельно.

app-office/openoffice требует больше памяти, 3.4G смонтированной, 2G physical(на диске?), и на 10 min медленнее ставится без tmpfs.

С большими пакетами могут возникнуть сложности в количестве inod'ов. Один inod на файл, а в исходниках файлов много. Нужно увеличивать ограничение inod'ов.

[править] Установка

[править] Монтирование tmpfs

Без увеличения количества inod'ов:

mount -t tmpfs tmpfs /var/tmp/portage

Для 850 MB и 1 миллиона inod'ов:

mount -t tmpfs tmpfs -o size=850M,nr_inodes=1M /var/tmp/portage

[править] Проверка

df -h | grep tmpfs

[править] Монтирование во время загрузки

Добавьте в /etc/fstab:

Файл: /etc/fstab
tmpfs      /var/tmp/portage   tmpfs  size=1000M,mode=0777         0 0

В tmpfs можно использовать объемы превышающие размер RAM, если swap позволяет. Но в любом случае активное использование swap негативно скажется на _соседние_ программы.

[править] Скрипт

Небольшой скрипт автоматически смонтирует tmpfs. Скопируйте его в место доступное из $PATH, например: /usr/local/bin/.

FIXME: установки параметров из /etc/fstab проще/привычнее.

Файл: temerge
#!/bin/bash

MEMSIZE=850M
mounted=false
 
. /etc/init.d/functions.sh
 
mounttmpfs() {
     mount -t tmpfs tmpfs -o size=$MEMSIZE /var/tmp/portage
     mounted="true"
}

compile() {
     einfo "emerging ${*}"
          emerge ${*}
}

unmount() {
     ebegin "unmounting tmpfs"
          umount -f /var/tmp/portage
     eend $?
}

ebegin "Mounting $MEMSIZE of memory to /var/tmp/portage"
if [ -z "$(mount | grep /var/tmp/portage)" ]
then
     mounttmpfs
else
     eerror "tmpfs already mounted!"
     exit 0
fi
eend $?

compile ${*}
 
if [ -n "$mounted" ]
then
     unmount
fi
chmod u+x temerge
и можно использовать temerge вместо emerge(а им всегда можно воспользоваться как альтернативой).

[править] Тестирование

genlop -t wine
     Sat Jan 10 04:23:22 2009 >>> app-emulation/wine-1.1.9
       merge time: 34 minutes and 10 seconds.

     Sat Jan 10 04:55:59 2009 >>> app-emulation/wine-1.1.9
       merge time: 31 minutes and 30 seconds.

Выигрыш составил примерно 10%

Тестирование проходило так:
FEATURES="-ccache sandbox" sync && echo 3 > /proc/sys/vm/drop_caches && emerge -1v wine && sync && echo 3 > /proc/sys/vm/drop_caches && temerge -1v wine


en:Speeding up emerge with tmpfs - Оригинальная статья от: 28 December 2008.

поддержка по wiki
На других языках