Страница 2 из 3
Re: Как правильно собирать ядро?
Добавлено: 05 окт 2011, 22:10
Olej
Olej писал(а):
Иногда это может ускорить в разы!
Но только иногда!
Вот результат на другом компьютере:
Код: Выделить всё
[olej@nvidia ntp-4.2.6p3]$ time make
...
real 0m28.298s
user 0m20.492s
sys 0m3.108s
[olej@nvidia ntp-4.2.6p3]$ time make -j2
...
real 0m23.629s
user 0m21.013s
sys 0m3.278s
- это тот же дистрибутив собирается...
- быстрее (по итогу) почти в 5 раз...
- но ускорение от числа процессоров почти не ощущается,
- здесь процессоры (2) очень быстрые:
Код: Выделить всё
[olej@nvidia ntp-4.2.6p3]$ cat /proc/cpuinfo | head -n10
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 23
model name : Pentium(R) Dual-Core CPU E6600 @ 3.06GHz
stepping : 10
cpu MHz : 3066.000
cache size : 2048 KB
physical id : 0
siblings : 2
- а винчестер - добротный WD SATA, самый заурядный - вот он и тормозит всё дело!
Re: Как правильно собирать ядро?
Добавлено: 07 окт 2011, 20:00
Olej
Перенесу сюда то, что мне подсказали, а я проверил... это к вопросу большого ускорения сборки ядра...
Предложение: компилировать не на HDD (см.выще), а в tmpfs:
Код: Выделить всё
[olej@nvidia ~]$ free
total used free shared buffers cached
Mem: 4124164 1516980 2607184 0 248060 715964
-/+ buffers/cache: 552956 3571208
Swap: 4606972 0 4606972
[olej@nvidia ~]$ df -m | grep tmp
tmpfs 2014 1 2014 1% /dev/shm
до 2Gb у меня RAM-диска есть, перегоняем туда дерево исходных кодов и там собираем:
Код: Выделить всё
[olej@nvidia linux-2.6.35.i686]$ pwd
/dev/shm/linux-2.6.35.i686
[olej@nvidia linux-2.6.35.i686]$ time make bzImage
...
HOSTCC arch/x86/boot/tools/build
BUILD arch/x86/boot/bzImage
Root device is (8, 1)
Setup is 13052 bytes (padded to 13312 bytes).
System is 3604 kB
CRC 418921f4
Kernel: arch/x86/boot/bzImage is ready (#1)
real 9m23.986s
user 7m4.826s
sys 1m18.529s
- сборка ядра <10 min ... совсем неплохо
Re: Как правильно собирать ядро?
Добавлено: 07 окт 2011, 20:03
Olej
Olej писал(а):- сборка ядра <10 min ... совсем неплохо
Но вот использовать многопроцессорность вместе с этим трюком при сборке ядра (а может и без RAM-диска, просто многопроцессорность) - не получается:
Код: Выделить всё
[olej@nvidia linux-2.6.35.i686]$ time make -j bzImage
...
Can't fork, trying again in 5 seconds at /dev/shm/linux-2.6.35.i686/scripts/recordmcount.pl line 179.
make[2]: *** [drivers/md/dm-table.o] Ошибка 1
make[2]: *** Ожидание завершения заданий...
ccache: FATAL: Failed to fork
make[2]: *** [drivers/md/dm-uevent.o] Ошибка 1
Can't fork, trying again in 5 seconds at /dev/shm/linux-2.6.35.i686/scripts/recordmcount.pl line 179.
Can't fork, trying again in 5 seconds at /dev/shm/linux-2.6.35.i686/scripts/recordmcount.pl line 531, <IN> li
make[2]: scripts/Makefile.build:230: fork: Ресурс временно недоступен
make[2]: scripts/Makefile.build:230: fork: Ресурс временно недоступен
...
LD security/selinux/ss/built-in.o
make[1]: *** [security/selinux] Ошибка 2
make: *** [security] Ошибка 2
make[1]: *** [drivers/ata] Ошибка 2
make: *** [drivers] Ошибка 2
make: *** [kernel] Ошибка 2
make: *** wait: Нет дочерних процессов. Останов.
Видно, что что-то с синхронизациями процессов, создаваемых по fork там не заладилось.
Почему? я не готов пока на это ответить.
Re: Как правильно собирать ядро?
Добавлено: 17 окт 2011, 19:33
Olej
Olej писал(а):
Вот результат на другом компьютере:
Код: Выделить всё
[olej@nvidia ntp-4.2.6p3]$ time make
...
real 0m28.298s
user 0m20.492s
sys 0m3.108s
[olej@nvidia ntp-4.2.6p3]$ time make -j2
...
real 0m23.629s
user 0m21.013s
sys 0m3.278s
- это тот же дистрибутив собирается...
- быстрее (по итогу) почти в 5 раз...
- но ускорение от числа процессоров почти не ощущается,
- здесь процессоры (2) очень быстрые:
А теперь та же сборка, того же пакета, в 2 процессора, но в tmpfs:
Код: Выделить всё
$ pwd
/dev/shm/ntp-4.2.6p3
$ make -j
...
real 0m4.081s
user 0m1.710s
sys 0m1.149s
Вместо ~30 сек. - 4 сек.!
почти на порядок
Это неприменимо для сборки ядра, но вполне применимо для других сборок из исходников.
Re: Как правильно собирать ядро?
Добавлено: 18 окт 2011, 17:48
Olej
Olej писал(а):
(не считая того, что ныне
http://www.kernel.org развалили злые хакеры, и там будет что-то меняться с политикой...)
На сегодня там как-то что-то восстановили...
По крайней мере, исходники для стабильных версий 3.0.х можно взять, в частности, на FTP-сервере:
ftp://ftp.kernel.org/pub/linux/kernel/v3.0
Re: Как правильно собирать ядро?
Добавлено: 22 окт 2011, 20:31
Olej
Возник такой вопрос (т.е. к нему дошли слушатели моего семинара по кернел, занимающиеся embedded устройствами на ARM):
- можно ли собрать нынешнее ядро (3.04, скажем) в малой конфигурации как монолитное (так как собиралось ядро в Linux 0.96
)
- когда заведомо известный набор модулей компилируется в ядро, а как модули ничего не собирается
- без нужды для загрузки в никаких initramfs или любых других форматов для корневой файловой системы (временной!).
Есть ли такой опыт? или URL на публикации?
Re: Как правильно собирать ядро?
Добавлено: 22 окт 2011, 21:24
Ali
Olej писал(а):Возник такой вопрос (т.е. к нему дошли слушатели моего семинара по кернел, занимающиеся embedded устройствами на ARM):
За ARM не скажу, бо руками не делал.
Olej писал(а):
- можно ли собрать нынешнее ядро (3.04, скажем) в малой конфигурации как монолитное (так как собиралось ядро в Linux 0.96
)
Целиком скорее всего нет, но значительную часть можно.
Olej писал(а):
- когда заведомо известный набор модулей компилируется в ядро, а как модули ничего не собирается
Если его(модуля) зависимости не собраны как модуль, то скорее всего ДА.
Olej писал(а):
- без нужды для загрузки в никаких initramfs или любых других форматов для корневой файловой системы (временной!).
А вот такую вещь я делал руками.
Нужно вкомпилить в ядро драйвер корневой-ФС и дискового конроллера, SCSI device support и т.п..
Во слово "временной" проглядел. Следовательно дискового конроллера и SCSI device support не надо, а нужно то на чём она лежит. Или ея то и заменить iitramfs.
, смотря по жедезу и загрузчику. (uboot вроде бы умеет)
Re: Как правильно собирать ядро?
Добавлено: 22 ноя 2011, 02:14
Olej
Ali писал(а):
Olej писал(а):
Возник такой вопрос (т.е. к нему дошли слушатели моего семинара по кернел, занимающиеся embedded устройствами на ARM):
За ARM не скажу, бо руками не делал.
Относительно сборки ядра под другие архитектуры (ARM, MIPS, PPC, ...) на примере ARM появилось достаточно подробно обсуждение в другой теме:
Linux для embedded применений.
Re: Как правильно собирать ядро?
Добавлено: 03 дек 2011, 22:57
Olej
Olej писал(а):
Видно, что что-то с синхронизациями процессов, создаваемых по fork там не заладилось.
Почему? я не готов пока на это ответить.
Всё таки остался ... занозой
вопрос:
почему? при сборке
ядра в несколько процессоров - возникает такая досадная и непонятная ошибка?
Код: Выделить всё
[olej@nvidia linux-2.6.35.i686]$ time make -j bzImage
...
Can't fork, trying again in 5 seconds at /dev/shm/linux-2.6.35.i686/scripts/recordmcount.pl line 179.
make[2]: *** [drivers/md/dm-table.o] Ошибка 1
make[2]: *** Ожидание завершения заданий...
ccache: FATAL: Failed to fork
make[2]: *** [drivers/md/dm-uevent.o] Ошибка 1
Can't fork, trying again in 5 seconds at /dev/shm/linux-2.6.35.i686/scripts/recordmcount.pl line 179.
Can't fork, trying again in 5 seconds at /dev/shm/linux-2.6.35.i686/scripts/recordmcount.pl line 531, <IN> li
make[2]: scripts/Makefile.build:230: fork: Ресурс временно недоступен
make[2]: scripts/Makefile.build:230: fork: Ресурс временно недоступен
...
Почему такая подобная ошибка не возникает (я не встретил) при сборке других, и очень крупных, не уступающих kernel проектов... вот при сборке инструментария для кросс-компиляции embedded проектов BuildRoot (см. здесь рядом тему) - они предуреждают в документации примерно так: "не используйте -j 2 - мы сами сгенерируем в Makefile -j в зависимости от числа ваших процессоров"...
Но могу понять.
Re: Как правильно собирать ядро?
Добавлено: 14 мар 2012, 23:35
Olej
Некоторые "параметры" сборки относительно свежего ядра (3.0.9 - ещё недавно называлось как последнее stable), сборка классическая без каких-либо фокусов по ускорению:
Код: Выделить всё
[olej@notebook linux-3.0.9]$ time make bzImage
...
Root device is (253, 0)
Setup is 14908 bytes (padded to 15360 bytes).
System is 3734 kB
CRC 2ce5541c
Kernel: arch/x86/boot/bzImage is ready (#1)
real 27m13.481s
user 17m42.535s
sys 2m29.441s
[olej@notebook linux-3.0.9]$ time make modules
...
real 106m18.688s
user 76m47.999s
sys 9m52.632s
[olej@notebook linux-3.0.9]$ du -hs
4,4G .
P.S. да, кстати, чтоб хоть по порядку величины определиться чего ожидать, нужно сказать не каком процессоре: это 2-х ядерный notebook 1.6 GHz.