Ускорение 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 хватит для:
- sys-devel/gcc (все USE выключены)
- app-emulation/wine
- www-client/mozilla-firefox-3.0 без каких-либо USE и без LINGUAS скушает 662 MiB.
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'ов:
Для 850 MB и 1 миллиона inod'ов:
[править] Проверка
[править] Монтирование во время загрузки
Добавьте в /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 проще/привычнее.
#!/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
[править] Тестирование
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%
Тестирование проходило так:
en:Speeding up emerge with tmpfs - Оригинальная статья от: 28 December 2008.