LINUX.ORG.RU

ускорить загрузку ядра в uboot

 , ,


0

1

Есть девайс, подключен к интеловому серверу гигабитной сетью.

Сейчас uboot грузит ядро по гигабитной сети со ужасной скоростью порядка 10 мегабит в секунду. Суммарно 24 мегабайт грузятся почти 24 секунды (мегабайт в секунду).

Я немного прикинул, почему так получается и предположил, что проблема в следующем: сервер шлет следующий пакет только после подтверждения предыдущего клиентом. При MTU около 1 миллисекунды получается что за секунду приходит около 1000 пакетов по полтора килобайта, что должно дать нам оценку в 1-2 мегабайта в секунду.

Хочется эту скорость поднять.

Я вижу два варианта:

1) воткнуть в uboot http. Это даст возможность на полной скорости всё влить 2) воткнуть в uboot tftp с докачкой, т.е. поменять протокол и пусть сервер льет кадр за кадром (9-килобайтный MTU), без подтверждения, а потом клиент пришлет подтверждение полученным пакетам.

Т.е. надо поднять скорость перегона пакетов минимум в 50 раз, что бы выбрать хотя бы на половину сетевой интерфейс.

Вопрос: как же это правильнее сделать?

UPD: на арме всё таки можно сжать ядро: uboot aarch64 zImage: unsupported? (комментарий)

★★★★★

Последнее исправление: max_lapshin (всего исправлений: 1)

24 мегабайт

вы там што, все драйвера туда вкомпиливаете? у миня на десктопе ядро весит 7 мегабайт со всеми вкомпиленными драйверами, которые мне надо, нвидия, правда, модулем

anonymous
()
Ответ на: комментарий от anonymous

uboot на arm64 не умеет бутить zImage.

Есть вариант по упаковке особым образом что бы выглядело как Image, но сжать до 8 мегабайт.

Принципиально дело не меняет: ядро должно пролетать за секунду, а льется полминуты.

max_lapshin ★★★★★
() автор топика
Ответ на: комментарий от max_lapshin

возможно поможет просто указание большого block size.

max_lapshin ★★★★★
() автор топика

1) воткнуть в uboot http.

На твоей нвидии kexec работает? (На aarch64 allwinner-е работает на последних (4.19+) ядрах, но как-то с тормозами.)

Если работает, то используй linux (на mmc) в качестве загрузчика linux-а.
Минимальная сборочка buildroot-а грузится чуть больше секунды (без учета u-boot-а, не кастрированное ядро и glibc, наверное выжать можно и меньше). Потеряешь секунду, зато получишь нормальную гигабитную сеть.

Сейчас uboot грузит ядро по гигабитной сети со ужасной скоростью порядка 10 мегабит в секунду.

Ну так может у тебя и выставлено в uboot 10Мбит? По сети ядро не грузил, но ставлю на проблемы с ATF, т. к. поимел кучу проблем на своем Allwinner-е на старых версиях ATF даже при загрузке с sd-card (загрузка от 4 до 10 сек в зависимости от порядка (!) файлов в fit-образе).

arson ★★★★★
()

Хочется эту скорость поднять.

у тебя без ошибок скачивается ? есть ли в логе такое

ТТТТ

ядро по тфтп на старинном arm9 у меня грузилось за пару секунд (около 5 мбайт) если нет ошибок

anonymous
()
Ответ на: комментарий от max_lapshin

без ошибок, плюс я tftp на сервере сам переписывал

странно - надо смотреть драйвер изернета в убуте. Вот например arm64 плата самодельная - PHY RMII 100 Mbit

u-boot=> tftp Image
Using ethernet@30be0000 device
TFTP from server 192.168.0.2; our IP address is 192.168.0.136
Filename 'Image'.
Load address: 0x40480000
Loading: #################################################################
...
         4.7 MiB/s
done
Bytes transferred = 18012672 (112da00 hex)

tftp сервер - штатный ubuntu 14.04, работает через xinetd, даже без гигабита в 5 раз быстрей чем у тебя.

anonymous
()

странно - надо смотреть драйвер изернета в убуте

плюс этому оратору. проверь в каком режиме поднимается линк, а то мож там 10mb/s как раз и поднимается

spectral1989
()

Думаю, много проще будет tftp с большим размером блока.

Elyas ★★★★★
()
Ответ на: комментарий от anonymous

драйвер может быть плохим.

Туда уже пришлось напихать слипов, чтобы он поднимался, а то он через раз делал всё.

Мне очень нравится история с kexec, будем его пробовать.

max_lapshin ★★★★★
() автор топика
Ответ на: комментарий от max_lapshin

Мне очень нравится история с kexec, будем его пробовать

не знаю - мне например совсем не нравится :) это надо два раза ждать пока ядро проинициализируется, помимо того что надо еще два раза в память его закинуть. Но я не осуждаю - сам тоже как проще так бы и сделал, тем более это только для отладки надо. Тут правда есть очень сильные сомнения что у тебя всё гладко с kexec пойдет.

anonymous
()

Не пробовал обычным клиентом скачать ядро по tftp куда-нибудь в tmpfs и посмотреть на скорость?

на гигабите, 512б блоками 18-25 Мбит/с достаточно стабильно, но если без потерь.

драйвер может быть плохим.

тогда про 9-килобайтный MTU можно сразу забыть.

В uboot драйвер может быть убогим во всех смыслах. Я на это наступал в длинковских поделках. На гигабите у него начинались потери и как следствие дикая просадка скорости.

Больше 1468 байт размер блока в tftp (при mtu 1500) поднимать IMHO нет смысла.

А на этом arm64 есть флеш? Может в его можно залить минимальное ядро, которое потом уже через kexec все остальное грузит?

vel ★★★★★
()
Ответ на: комментарий от max_lapshin

А как так получилось что zImage не бутится? Это все ещё ядро и оно само себя распаковывает.

Ну и да, можно за счёт конфигурации ужать ядро с 24 мегабайт до примерно 9-10.

a1batross ★★★★★
()
Ответ на: комментарий от arson

На aarch64 allwinner-е работает на последних (4.19+) ядрах, но как-то с тормозами.

Я починил! (пауза >6с после 'kexec -e')
Поставил kexec-tools-2.0.20 и он стал ругаться на отсутствие /proc/kcore, включил в ядре (PROC_KCORE, KEXEC_FILE тоже должен быть (ядро 5+)) и заработало 'kexec -s' (file based syscall for kexec), без тормозов!
kernel-5.4-rc3 / kexec-tools-2.0.20 — точно работает, другие не проверял.

arson ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.