LINUX.ORG.RU
ФорумJob

Пересборка ядра и настройка ОС на одноплатном компьютере

 ,


0

1

Доброго времени суток!

Ищу человека в Санкт-Петербурге (приоритетно) или в Москве, который бы хорошо разбирался с такими вещами как пересборка ядра ОС (у нас Debian 10 на ARMv8), настройка его параметров и настройка системы в целом.

Работа разовая, заказ будет от фирмы по договору. Полное ТЗ я написал здесь, но ниже повторю базовые вещи из него прямо в посте. По цене — честно говоря, я не специалист и не знаю сколько такое может стоить, но нам нужен профессиональный человек, чтобы всё было сделано нормально, прошу предлагать стоимость. Контакты нашей фирмы есть в конце гугл-документа по ссылке.

На специализированных сайтах с вакансиями искал — то ли я так плохо ищу, то ли реально сложно человека найти — никого не нашёл.

Кратко суть задач:

Есть одноплатный компьютер Banana Pi BPI-M5 с ОС от производителя и есть приложение, написанное по заказу нашей фирмы для него. Одноплатник у нас, по сути, обслуживает одно лишь это приложение и надо настроить систему под него. Сложный момент в том, что мы упираемся в тайминги ядра — нужна низкая задержка, а мы можем сейчас добиться минимум 5.5 мс. Процессор при этом нагружен не более чем на 70% одного ядра (остальные 3 ядра нагружены на 0-2%). Разработчики некоторых модулей и систем что мы используем, прямо говорят, что для решения этой проблемы нужно или ставить патчи PREEMPT_RT или перенастраивать таймеры в ядре (CONFIG_HZ). Ссылки на статьи про это есть в гугл-документе с ТЗ. Нам нужно подготовить несколько ядер и затем мы уже сами будем испытывать их и пробовать добиться задержки в 2-3 мс (идеал для нас — 1-2 мс, но всё что меньше 4 мс пойдёт). Код текущего ядра нашего дистрибутива доступен. В ТЗ есть ещё несколько дополнительных задач, но сюда их выписывать не буду чтобы не загромождать — по сути, это всё касается настройки ОС.

По срокам — до 2 недель. Контакты — можете здесь написать или написать по почте, указанной в гугл-документе.

Мы имеем отрицательный опыт подбора программистов, так что просьба сопровождать отклик каким-то минимальным подтверждением собственных навыков. И просьба — если Вы не уверены, что Вашей квалификации достаточно для этих задач — не откликайтесь, у нас ограничено время и хотелось бы найти хорошего специалиста.

До двух недель? Если вы сможете найти работника с таким уровнем навыков за 2 квартала — можете считать, что вам крупно повезло.

Хорошие специалисты в свободном полете очень редкие птицы.

Vsevolod-linuxoid ★★★★★
()

Сходите на консультацию в rtsoft (это мск). Может окажется, что это невозможно. Может, вам вообще на бареметал переезжать (был у меня такой прецедент).

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

Ну 5.5 мс тянет без проблем. Я тоже сначала думал что это нереально, но железо относительно современное и кратно отличается по производительности от того что было в середине 2010-ых. Во всяком случае, когда одноплатники используют для создания ЧПУ станков тоже ставят PREEMPT_RT и задержка низкая.

Dmitry_S
() автор топика

Процессор при этом нагружен не более чем на 70% одного ядра (остальные 3 ядра нагружены на 0-2%)

использовать mutithreading в приложении не пробовали?

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

Там всё-таки не в нагрузке дело. 70% это максимальная пиковая нагрузка, а в среднем около 5%. Я изучил тему и понял что вывод ALSA привязан к системному таймеру, который в обычных дистрибутивах работает на частоте 250 Гц. Отсюда 4 мс + буфер ALSA, который можно сделать хоть 1.5 мс. То есть, ядро обрабатывает передачу данных потокового аудио всего 250 раз в секунду - многопоточность тут не поможет, хоть она и есть. Меньше 4 мс без изменения параметров ядра никак не сделать.

Например, у AstraLinux есть lоwlatency ядро и статья по нему и там как раз говорится об этом и что в их этом ядре частота CONFIG_HZ 1000 Гц и это уменьшает задержку ввод-вывод.

А RT-ядра это совсем другой принцип, я пробовал одно на Raspberry Pi, но с первого раза настроить не получилось — там прерывания работают как обычные процессы и надо грамотно расставить приоритеты.

На самом деле если кто сомневается что на современных компьюьтерах можно получать низкую задержку — зря. Я много тем на зарубежных форумах видел где люди работают с RT ядрами и имеют низкие задержки. Я даже собрал пару ядер, но до конца это дело не смог довести — это всё-таки выше моей квалификации.

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

К сожалению, мы можем сейчас работать только так. «Стартап» у нас с цифровым звуком связанный и осталась буквально пара незакрытых задач + с двумя из трёх ранее приглашённых программистов были проблемы, так что и в штат на ставку программиста брать смысла не видится и хочется всё официально оформить.

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

Помимо всего этого, нужно собирать образ системы как squashfs и добавить загрузку системы в оперативную память целиком, ввиду того что у вас emmc это тоже накладывает своё отпечаток.

Я хотел вам написать, но вариант связи через почту меня не устроил)

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

и если вы хотите еще более низких задержек, то использовать baremetal unikernel (Ядро и статически слинкованное приложение запущенное в пространстве ядра)

zxflux
()

Попробовал бы, но жаль, что я ни тут, и не там.

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

я все еще не понимаю и какие проблемы?!

70% жрет цпу - ну и что? не 100% же. темболее еще есть три ядра.
5.5мс задержка - ну и что? как это вам мешает?

идеал для нас — 1-2 мс,

на что это влияет дальше?

у вас есть конфиг рабочего ядра, поменять один! параметр и собрать новое ядро это трудно?

anonymous2 ★★★★★
()
Последнее исправление: anonymous2 (всего исправлений: 3)
Ответ на: комментарий от anonymous2

Это частая проблема для обычных пользователей. Вся документация у них обычно есть, а просто прочитать её и следовать ей они не могут или не хотят. Причем бывает, что в документации буквально расписано по шагам что делать и куда нажимать.

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

На западе на такие задачи нанимают компании типа denx https://www.denx.de/services/ - это авторы u-boot. Напишите им, например Мареку Вазуту - он в реалтайме шарит. Может сможете их нанять

guskov_roman
()

Две недели, чтобы BSP собрать, проверить. Такое будет очень дорого стоить. Треугольник Качество - Время - Деньги. Хочешь быстро и качественно, деньги устремляются в бесконечность

linuxoidspb
()

Hard RTOS на многоядернике делать ? Даже если изолируешь ядро для RT задачи, придется тестить WCET при 100% нагрузке других ядер, чтобы знать как повлияет межядерное взаимодействие и кэши на работу ядра(latency, response time, jitter), где крутится RT задача. Поэтому для жесткого рилтайма обычно и берут одноядерные процы/микроконтроллеры, либо процессоры гибриды, где обычная ОС крутится на нескольких ядрах, и есть отдельное, изолированное ядро на подложке, на котором крутится Hard RTOS

linuxoidspb
()
Последнее исправление: linuxoidspb (всего исправлений: 1)
Ответ на: комментарий от anonymous2

судя по вводным данным, ребята хотят поддержку ASIO или что-то подобное сделать.

Audio Stream Input/Output (ASIO) is a computer sound card driver protocol for digital audio specified by Steinberg, providing a low-latency and high fidelity

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

Ребята хотят синт, но не хотят в железо и нормальный код, выше ведь написали стартап, взяли одноплатник, инпут миди, на выходе хотят из миди получать выход с синта, так как используют альт, хотят стартап импортозамещенный синт, со всеми вытекающими импортозамещенный в виде грантов и дотаций

zxflux
()

или перенастраивать таймеры в ядре (CONFIG_HZ) По срокам — до 2 недель.

ну возьмите вот это https://github.com/BPI-SINOVOIP/BPI-M5-bsp

и поправьте https://github.com/Dangku/amlogic-linux/blob/885070c451194d3d6b41fe14de2151f7add919e4/arch/arm64/configs/bananapi_m5_defconfig#L452C3-L452C17

# CONFIG_HZ_250 is not set
CONFIG_HZ_1000 y
CONFIG_HZ=1000

соберите, запустите. Как раз в две недели с перекурами уложитесь…

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

Я хотел вам написать, но вариант связи через почту меня не устроил)

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

Телеграм-чирикалка не может решить такую задачу.

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

Нашли в итоге очень хорошего человека и он пересобрал ядро как раз с CONFIG_HZ=1000. Это было далеко не самой большой проблемой, хотя сборка почему-то была возможна только через Docker, установленный на x86-64 системе.

Однако пишу данное сообщение для того чтобы сказать, что система на одноплатнике вполне работает с задержкой от конца MIDI сообщения на UART до начала вывода звука на I2S в 1.7 мс. Так что такие задержки вполне реальны.

Другой вопрос это то, что подводных камней при работе системы с такими задержками оказалось немало. Да и в целом дистрибутивы Linux на ARM одноплатниках, по моим впечатлениям, все какие-то проблемные - как будто эта область ещё мало развита.

Всем спасибо за советы!

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

И еще все для дебага ядра отключить, и выбрать планировщик задач другой, и еще всякого по мелочи. Если там пользуются базовым ядром, то выигрыш может быть существенным, т.к. базовое оно только чтобы запускалось на как можно большем кол-ве устройств и с избыточным функционалом…

Там ТЗ довольно жирное и с противоречивыми пунктами:

Обеспечение работы в системе Bluetooth USB адаптера. Необходимо или найти способ чтобы стандартные недорогие USB адаптеры типа BU-BT40A работали в системе (вышеуказанный адаптер не работает в системе, поставляемой разработчиком), либо подобрать такой USB Bluetooth адаптер бюджетного класса, доступный к покупке в России, который будет способен работать в этой системе.

Здесь можно возиться долго, и без конкретного списка устройств с их предоставлением будет никак.

Настройка Bluetooth USB адаптера таким образом, чтобы система работала в качестве Bluetooth колонки. Вывод звука должен производиться через подсистему ALSA (при невозможности настроить данный функционал напрямую с ALSA может быть рассмотрен вариант работы через Pulseaudio). Должен быть сделан конфигурационный файл в котором заказчик мог бы указать пин-код и наименование ALSA либо Pulseaudio устройства, через которое нужно выводить звук, а также параметры битности и частоты дискретизации звукового потока (при возможности и/или необходимости указания данных настроек). Также необходимо реализовать механизм включения и выключения Bluetooth по запуску особого скрипта либо команды (чтобы заказчик мог включать и выключать его, применяя консольные команды), а также настроить систему так, что после выключения/включения Bluetooth этим способом имевшееся до отключения Bluetooth подключение автоматически восстанавливалось после включения Bluetooth обратно.
[пример реализации на pulseaudio, пример скрипта на Python]

Это не просто пересборка ядра, это уже скрипты и эксперименты чтобы найти оптимальные значения для имеющегося оборудования.

Организация файловой системы nullfs с монтированием туда тех разделов файловой системы ОС, в которые приложения обычно записывают логи и журналы, либо же (что лучше) настройка ОС таким образом, чтобы системные логи были полностью отключены и ОС работала по stateless схеме — не записывала ничего на диск и, таким образом, ничего не знала о своём прошлом состоянии  после перезагрузки.
[о nullfs]

Скрипты и тонкая настройка системы.

Отключение в системном дереве устройств поддержки таких классов устройств как клавиатуры и мыши. Суть здесь в том, что доступ к системе должен осуществляться только через SSH по известному лишь заказчику IP адресу и порту, а клавиатуры и мыши, подключённые в USB разъёмы на плате, не должны функционировать в системе, при том что Bluetooth audio USB адаптеры должны продолжить функционировать. При этом данная настройка должна иметь возможность включения и выключения заказчиком при подключении по SSH и исполнитель должен дать заказчику инструкции о том как включить и отключить данную опцию (схема работы такова, что сначала заказчику нужно прошить eMMC память образом ОС и на этом этапе физическая клавиатура и мышь требуются, а далее на уже работающей системе с настроенным SSH они будут отключены).

Нихрена не понятно, что нужно. В виде модулей? Так там не все в модули можно превратить. Два ядра: с поддержкой и без?

Осуществление общей настройки системы, учитывающей реальную схему использования конечного устройства (без монитора, мыши, клавиатуры и подключения к интернет-сети, а также  без взаимодействия с пользователем и выполняющим всего одну основную задачу). Должны быть отключены ненужные для данного применения службы и компоненты, особенно те, что могут влиять на время загрузки. Для этого также должна быть проанализирована последовательность загрузки и выявлены наиболее сильно влияющие на загрузку места. Заказчику должна быть передана инструкция, содержащая сведения о том что было отключено или перенастроено, какие команды или действия были выполнены для перенастройки и как вернуть в исходное состояние изменённые настройки).

Расплывчато и туманно. Что включено, что выключено в конфиге ядра видно.

===

Короче, все выглядит как «мы написали идеальный код, а дальше все проблемы должен решить сисадмин за две недели».

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

Импортозамещение, задумайся и всё поймешь, остальное вытекает из этого

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

Расплывчато и туманно.

Ну если перевести с тиктокерского, дистанционно-управляемая колонка, но только, чтоб только «ими» управляемая, и чтоб никто супер-вафлю не хакнул, юсб-свистком

ranckont
()

долгий путь - посмотреть можно ли ваше приложение собрать под rtems (скорее всего можно) будет всё лЁтать rtems есть под банана. вопрос в деталях.

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

Эта фраза 99% процентов админов отпугнёт

99% админов не осиливают установку приложения «Мой налог»? Хорошо, что они осиливают дорогу до работы хоть иногда…

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

Налоговый статус самозанятого - оптимальный для разовой подработки, справится с ним 14-летний. Для работодателя работать с самозанятым тоже оптимальный вариант, не надо заморачиваться с выводом нала и серыми схемами. Так почему тогда работа по договору отпугнет?

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

99% админов не осиливают установку приложения «Мой налог»?

Тут вопрос основной, ради какой суммы осиливать? Например я, ради пары десятков тысяч бы не стал заморачиваться. Ради пары сотен, уже можно. А вот эта вот задача(я сейчас про сборку ядра) в топике, даже на две десятки(2 дня работы при наличии опыта) не факт что тянет.

Loki13 ★★★★★
()
Последнее исправление: Loki13 (всего исправлений: 1)
Ответ на: комментарий от Loki13

Кому как. Я периодически работаю с юрлицами, и налоговый статус самозанятого снимает кучу вопросов и головной боли обоим сторонам независимо от суммы. Всяко проще договора ГПХ или работы по совместительству для выполнения проектных задач. Подписали договор, оплата, чек, в след месяце налог 6%. Акт приема выполненных работ не забыть.

А какие альтернативы работы с юрлицами предложите вы?

aiqu6Ait ★★★★
()
Последнее исправление: aiqu6Ait (всего исправлений: 1)
Ответ на: комментарий от aiqu6Ait

А какие альтернативы работы с юрлицами предложите вы?

Я и сам так делаю, но если первый раз, то нужна какая-то сумма, ради которой захочется заморачиваться. Ради 5 рублей, я бы не стал.

Loki13 ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.