LINUX.ORG.RU

Biscuit: монолитное POSIX-совместимое ядро на Go

 , ,


6

4

Ядро было написано аспирантом MIT Cody Cutler в рамках исследования «The benefits and costs of writing a POSIX kernel in a high-level language» и доступно на GitHub странице MIT PDOS (Parallel and Distributed Operating Systems group at MIT CSAIL) под лицензией MIT.

Biscuit неплохо документирован и содержит 27 тысяч строк на Go, из которых всего 90 функций содержат небезопасные вызовы («unsafe»), необходимые для задач вроде доступа к регистрам процессора. Есть также небольшой загрузчик, написанный на ассемблере.

Особенности:

Скомпилировать и опробовать ядро довольно просто:

git clone https://github.com/mit-pdos/biscuit.git
cd biscuit/src
./make.bash && make -C ../biscuit qemu CPUS=2
При этом сборка с нуля занимает всего 38 секунд, из которых 33 секунды приходится на немного модифицированный рантайм Go, и всего 5 секунд непосредственно на сборку ядра.

Интересны результаты исследования. После проведения тестов производительности на таких приложениях, как NGINX, Redis, и CMailbench — обнаружилось, что сравнение производительности эквивалентных путей кода на Си и на Go показало всего 15% разницы. Доля процессорного времени, потребляемого сборкой мусора и проверками безопасности, по результатам авторов статьи — составляет менее 15%.

>>> Подробности

Ответ на: комментарий от WitcherGeralt

как-то само

Все верно, надо выбить золотыми буквами этот девиз растофанов на их сцайте.

bread ()

Да хрен на 15% процессорного времени. Это голое ядро со старта выжирает вдвое больше памяти, чем дебиан/линукс с рабочим столом xfce, cups и smbd.

kirill_rrr ★★★★★ ()

это отличная новость, ребят. простота применения порвёт варианты на rust и c - попомните мои слова. его ещё немного допилить и привести в порядок, добавить дров, и взлетит ещё как.

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

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

сам себе придумываешь сказку и убеждаешь себя в этом

Вчерашним студентом. На языке со сборщиком мусора. 15%. Звучит одновременно и безумно, и впечатляюще.

аналогичная ОС на java будет иметь 5-10% разницу с линукс ядром(сотни таких проектов на гитхабе)

почему это не мини новость,и почему это вообще новость, чем это лучше тыщи подобных проектов на гитхабе? тем что написавший с «бумажкой»? некрасиво так делать

chimeraxx1 ()

посмотрел код

функциональное программирование, через неделю автор кода забудет что там и как написано

никакого удобства от использования Go нет

функциональщина на десятки тыщ строк это ужасно

chimeraxx1 ()

Форк на горутинах? Иначе не считается

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

функциональщина на десятки тыщ строк это ужасно

Где ты там нашел функциональщину? Типичный драйвер: https://github.com/mit-pdos/biscuit/blob/master/biscuit/src/ahci/ahci.go

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

Ага, возьми среднего первокурсника среднего вуза в России, он даже пятистрочный скрипт на баше написать обосрётся.

на 1 курсе я писал чатботов на джаваскрипте(на тыщи строк примитивной логики иф/елсе), под конец первого курса делал полноценные ГУИ приложения на дельфе/джаве/Веб(ксс джс)
при том что первый раз в жизни ПК я увидел на первом курсе универа,до этого не пользовался

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

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

это отличная новость, ребят. простота применения порвёт варианты на rust и c - попомните мои слова. его ещё немного допилить и привести в порядок, добавить дров, и взлетит ещё как.

да никому это жручая поделка нафик не сдалась, хоть на самом хипстерском гавне напиши, хоть утони в своих смузи. это форменное ненужно.

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

Где ты там нашел функциональщину?

func, func, func, func

нет структуры проекта, нет АПИ, нет никакого удобства пользоваться(и писать темболее) таким кодом, уровень хело ворд

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

Где ты там нашел функциональщину?

func, func, func, func

уровень хело ворд

Фигасе ты тугой.

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

ссылки на википедию давать?

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

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

ссылки на википедию давать?

Давай. Просто ради смеха.

молодец что написал, вон сколько лайков на гитхабе

Фигасе... ну ты понял.

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

ох вейт, не тыли тот болезный модератор что банит по ИП «неугодных хейтеров бтрфс»?

земля пухом

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

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

Ты в какой-то альтернативной вселенной живёшь.

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

ох вейт, не тыли тот болезный модератор что банит по ИП «неугодных хейтеров бтрфс»?

Нет.

земля пухом

Беда печаль, не дождаться мне ссылок на Википедию.

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

Там ещё есть struct. Значит оно структурное?

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

почему это не мини новость,и почему это вообще новость, чем это лучше тыщи подобных проектов на гитхабе?

Потому что от Java у фанатиков Rust не горит, а от любого упоминания Go в контексте системного программирования — полыхает так, что и небезызвестные газовые камеры становятся ненужны.

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

Потому что от Java у фанатиков Rust не горит, а от любого упоминания Go в контексте системного программирования — полыхает так, что и небезызвестные газовые камеры становятся ненужны.

точно забыл про этот важный аспект

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

func, func, func, func

ААААААААААААА!!!!! ЫЫЫЫЫ!!!!!

(Утирая слёзы) я только что распугал всех котов в округе.

Aceler ★★★★★ ()

Скушно, зевать охота :-)
На самом деле 20 лет вливали в Линукс миллиарды, если в бабло пересчитать.
Кое-как поправили, на ноги поставили. Из ближайших конкурентов только Фря на ИВЛ, тоже слабым ручейком баксы вливают в вену, чтобы жисть теплилась.

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

RTP ★★★★★ ()

Вот когда здесь не останется ни одного *.S и *.с и будет только *.go - тогда и приходите.

ЗЫ: Вот так всегда, хочешь поглядеть на ОС написанную на новом языке, заглядываешь, а там *.S и *.с и без них вообще никак.

Клоуны.

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

ЗЫ: Вот так всегда, хочешь поглядеть на ОС написанную на новом языке, заглядываешь, а там *.S и *.с и без них вообще никак.
Клоуны.

А к ядрам написанным на С у тебя претензий нет? А к тому, что там даже не С?

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

Вообще, у Go свой ассемблер, «кроссплатформенный». Но похоже, что в ОС он не умеет.

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

А к ядрам написанным на С у тебя претензий нет?

Нет, конечно. Есть языки пригодные для написания ОС, а есть непригодные, только и всего.

Даже С++ не взлетел для написания ОС, причём не взлетел за десятки лет попыток, что уж тут об этом барахле говорить...

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

Давай расскажи, что в ядре Линупса нету асма, а потом, что Си не пригоден для ядер.

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

Вообще, у Go свой ассемблер, «кроссплатформенный». Но похоже, что в ОС он не умеет.

Ну так у жабы тоже. Сколько существует ОС на жабе? А жаба постарше go будет многократно.

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

Давай расскажи, что в ядре Линупса нету асма, а потом, что Си не пригоден для ядер.

В линуксячьем ядре полно асма, причём полно для каждой отдельно взятой архитектуры. И в любом другом ядре тоже - от венды до какой-ниубдь FreeBSD. Потому что и асм и С - пригодны для написания ОС и отлично друг-друга дополняют. А вот всякие жабы, го, скалы и т.д. для написания ОС совершенно непригодны.

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

Если пригодность определяется наличием файла с расширением S в исходниках, тогда и Си никуда не годиться. Линус, сворачивай проект, это было ошибкой.

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

Если пригодность определяется наличием файла с расширением S в исходниках

Нет, пригодность определяется не этим.

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

простота применения порвёт варианты на rust и c

вариант на rust она и сейчас порвет, а вот на С в обозримом будущем нет

добавить дров

вот с этим и будут проблемы - кто будет писать дрова? Под Linux писать драйверы очень просто и проблемы вообще не в языке - проблемы в специалистах которые разбираются в тонкостях работы устройств для которых нужно написать драйверы

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

Дрова лучше не писать, а использовать линуксовые. А то код-то все умеют писать, а вот факи энвидиям показывать не каждый может. Во всяком случае, мне кажется это единственный путь сделать что-то до старости.

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

простота применения порвёт варианты на rust и c

вариант на rust она и сейчас порвет

Расскажи, какой из «вариантов на Rust» она порвет «по простоте применения».

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

Дрова лучше не писать, а использовать линуксовые.

в опенсорсных микроядерных ОС так и делают, только go там никто не использует ;)

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

Расскажи, какой из «вариантов на Rust» она порвет «по простоте применения».

если что это шутка была, для меня очевидно им всем очень далеко до ОС написанных на С.

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

на месте компилировать в натив с нужным уровнем верификации, что мол конкретных код не содержит unsafe

Дык уже было не раз. Наиболее известные наверное от MS и от Кашперского.
Но MS разработку свернула, а дядя Женя сориентировал в индустриальное применение, где всех пишущих под ОС можно _заставить_ писать так, как надо.

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

Даже боюсь себе представить такую ОСь которая совершенно неожиданно может сделать stop-the-world .. Интересно даже а как же IOP-ы всякие такое будут переживать???

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

Даже боюсь себе представить такую ОСь которая совершенно неожиданно может сделать stop-the-world

Значительная часть статьи посвящена мерам, позволяющим этого избежать.

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

Позволяющим ... но не гарантирующим!

anonymous ()

4763 MB of physical memory
...
remaining mem: 503.99MB

Скажите, я правильно понимаю, что ядро добутилось до инита и сожрало при этом 4 с лихом гига? )

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

Тем не менее у него до сегодня практически однозначное соответствие с генерируемым машинным кодом.

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

Даже боюсь себе представить такую ОСь

Любая не-RT? Тут дело в масштабах этого «stop-the-world».

GAMer ★★★★★ ()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)