The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Запуск WebAssembly runtime как модуля ядра Linux, opennews (??), 27-Сен-18, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


1. "Запуск WebAssembly runtime как модуля ядра Linux"  +11 +/
Сообщение от zfs (??), 27-Сен-18, 18:40 
> Запуск WebAssembly-приложений на уровне ядра позволяет избавиться от накладных расходов

А так же от безопасности, изоляции процессов и т.п.
Пярмо DOS+DPMI64 какой-то.

Ответить | Правка | Наверх | Cообщить модератору

7. "Запуск WebAssembly runtime как модуля ядра Linux"  –2 +/
Сообщение от Orduemail (ok), 27-Сен-18, 18:53 
> А так же от безопасности, изоляции процессов и т.п.

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

Ответить | Правка | Наверх | Cообщить модератору

12. "Запуск WebAssembly runtime как модуля ядра Linux"  +7 +/
Сообщение от Аноним (-), 27-Сен-18, 19:02 
А вот тут или-или. Вы или таки имеете накладные расходы на песочницу и оверхед на хренову кучу проверок того что то что оно делает здесь и сейчас - типа безопасно, или таки на это забивается, и вот тогда - быстро :).

В общем не с того конца они яйца чистить начали. Да и вообще, если их в модули ядра понесло - ну, сделали бы нормальную сборку gcc'ом для начала, чтоли. А то все эти перверсии с emscripten'ом - занятие для очень небольшого числа ценителей странного.

Ответить | Правка | Наверх | Cообщить модератору

19. "Запуск WebAssembly runtime как модуля ядра Linux"  +/
Сообщение от Orduemail (ok), 27-Сен-18, 19:40 
> А вот тут или-или. Вы или таки имеете накладные расходы на песочницу
> и оверхед на хренову кучу проверок того что то что оно
> делает здесь и сейчас - типа безопасно, или таки на это
> забивается, и вот тогда - быстро :).

Это oversimplification. Переупрощение, наверное, если переводить на русский. Всё сложнее. Если мы посмотрим на то, как nginx тратит процессорные такты, то часть он тратит на выполнение кода в ring3, часть он тратит на выполнение кода в ring0, часть на ожидание i/o, и часть на переключение контекстов из ring3 в ring0 и обратно. Ожидание i/o, так же как и выполнение ring0 кода никак не изменится от того, что nginx будет перенесён в ядро. А вот выполнение собственно nginx кода и переключение контекстов изменится. Код nginx, надо полагать, будет выполняться медленнее, а переключение контекстов быстрее, потому что для выхода из jit понадобятся не тысячи тактов процессора, а десятки. Что-то станет медленнее, что-то быстрее, каким же будет суммарное изменение времени выполнения -- я могу лишь гадать.

> В общем не с того конца они яйца чистить начали.

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

> сделали бы нормальную сборку gcc'ом для начала

Я не знаю, как там насчёт gcc, но rustc сегодня имеет встроенный target webassembly. Emscripten не нужен. И вообще, кто ты такой, чтобы указывать им чем им заниматься? Разработка компиляторов -- это одно, разработка модулей ядра -- это другое и не твоё собачье дело решать за других, чем им заниматься в своё свободное время.

Ответить | Правка | Наверх | Cообщить модератору

25. "Запуск WebAssembly runtime как модуля ядра Linux"  +/
Сообщение от Аноним (25), 27-Сен-18, 21:37 
> Это oversimplification.

Дудки. Дополнительные проверки для безопасности или есть, и на это тратятся ресурсы, или нет, и тогда они не тратятся. Дядька Тюринг на самом фундаментальному уровне гарантировал нам что мы заранее поведение программы своей программой (как то компилером) целиком не просчитаем - значит оверхед в рантайме на фактические проверки в момент операции. А какие еще варианты? При том в тугом цикле это может угрохать скорость в разы. В кернеле все еще усугубляется тем что нельзя заранее верить компилятору и прочему внешнему миру. Это мигом приведет к взлому, поэтому надо параноидально чикерить все и вся. Без оверхеда куча проверок не бывает - если процессору приваливает работенки, то и времени на ее выполнение приваливает.

> часть он тратит на выполнение кода в ring3, часть он тратит
> на выполнение кода в ring0, часть на ожидание i/o, и часть
> на переключение контекстов из ring3 в ring0 и обратно.

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

> того, что nginx будет перенесён в ядро. А вот выполнение собственно
> nginx кода и переключение контекстов изменится.

Вот конкретно Linux сейчас довольно здорово оптимизнут на предмет сисколов, с использованием хреновой кучи не-классических техник, придуманых линуксоидами. Например, vDSO, группировка сисколов и 1 переключения контекста на целый батч и проч. Им видите ли оверхед тоже не нравится и они изобрели много нового для его уменьшения.

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

В общем случае так. Но сравнивая уровень технологий Linux и тем что вытворяют jit - я пожалуй поставлю на Linux. Эти парни умеют работать так, чтобы результат радовал глаз. А сказать то же самое про jit'ы я не могу.

> Мы это узнаем совершенно точно, когда они запустят nginx в ядре, и
> прогонят его через тесты.

Флаг им.

> Я не знаю, как там насчёт gcc, но rustc сегодня имеет встроенный target webassembly.

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

> Emscripten не нужен.

Да и rust куда-то туда же, как по мне.

> модулей ядра -- это другое и не твоё собачье дело решать
> за других, чем им заниматься в своё свободное время.

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

Ответить | Правка | Наверх | Cообщить модератору

28. "Запуск WebAssembly runtime как модуля ядра Linux"  +/
Сообщение от Orduemail (ok), 27-Сен-18, 22:10 
>[оверквотинг удален]
> Дудки. Дополнительные проверки для безопасности или есть, и на это тратятся ресурсы,
> или нет, и тогда они не тратятся. Дядька Тюринг на самом
> фундаментальному уровне гарантировал нам что мы заранее поведение программы своей программой
> (как то компилером) целиком не просчитаем - значит оверхед в рантайме
> на фактические проверки в момент операции. А какие еще варианты? При
> том в тугом цикле это может угрохать скорость в разы. В
> кернеле все еще усугубляется тем что нельзя заранее верить компилятору и
> прочему внешнему миру. Это мигом приведет к взлому, поэтому надо параноидально
> чикерить все и вся. Без оверхеда куча проверок не бывает -
> если процессору приваливает работенки, то и времени на ее выполнение приваливает.

А вот сейчас ты пытаешься переусложнить. Зачем? Чтобы выглядеть умнее, чем ты есть на самом деле?

>> часть он тратит на выполнение кода в ring3, часть он тратит
>> на выполнение кода в ring0, часть на ожидание i/o, и часть
>> на переключение контекстов из ring3 в ring0 и обратно.
> И вот тут хотелось бы какой-то инструментированной метрики с разблюдовкой по временам
> - куда сколько потрачено и какого масштаба выигрыш ожидается. И не
> окажется ли это как в песенке про мельника, который истратил шиллинг
> и заработал грош.

Зачем тебе все эти разблюдовки, когда можно засунуть nginx в ядро и сравнить производительность с nginx вне ядра?

>> того, что nginx будет перенесён в ядро. А вот выполнение собственно
>> nginx кода и переключение контекстов изменится.
> Вот конкретно Linux сейчас довольно здорово оптимизнут на предмет сисколов, с использованием
> хреновой кучи не-классических техник, придуманых линуксоидами. Например, vDSO, группировка
> сисколов и 1 переключения контекста на целый батч и проч. Им
> видите ли оверхед тоже не нравится и они изобрели много нового
> для его уменьшения.

С этим тоже можно будет сравнить.

>> что-то быстрее, каким же будет суммарное изменение времени выполнения -- я могу лишь гадать.
> В общем случае так. Но сравнивая уровень технологий Linux и тем что
> вытворяют jit - я пожалуй поставлю на Linux. Эти парни умеют
> работать так, чтобы результат радовал глаз. А сказать то же самое
> про jit'ы я не могу.

А я не буду ставить. Я подожду результатов тестов.


> Несомненно. Но повертеть пальцем у виска, в том числе и публично. я
> все же могу и это вполне в пределах моего собачьего дела
> уже.

Да-да. Главное делать это не только публично, но ещё и анонимно, чтобы потом не выглядеть идиотом.

Ответить | Правка | Наверх | Cообщить модератору

41. "Запуск WebAssembly runtime как модуля ядра Linux"  +1 +/
Сообщение от Совершенно другой аноним (?), 28-Сен-18, 11:08 
>> В общем не с того конца они яйца чистить начали.
> Мы это узнаем совершенно точно, когда они запустят nginx в ядре, и прогонят его через тесты.

А ещё можно графику в ядро засунуть и тогда... Wait! OH, SHI--

Ответить | Правка | К родителю #19 | Наверх | Cообщить модератору

42. "Запуск WebAssembly runtime как модуля ядра Linux"  +/
Сообщение от Orduemail (ok), 28-Сен-18, 12:15 
>>> В общем не с того конца они яйца чистить начали.
>> Мы это узнаем совершенно точно, когда они запустят nginx в ядре, и прогонят его через тесты.
> А ещё можно графику в ядро засунуть и тогда... Wait! OH, SHI--

Это зачем? Думаешь это уменьшит количество сисколлов? Ну, может быть, я честно говоря не знаю, как там на уровне сисколлов выглядят все эти ваши 3d ускорители.

Ответить | Правка | Наверх | Cообщить модератору

16. "Запуск WebAssembly runtime как модуля ядра Linux"  –1 +/
Сообщение от Кирилл (??), 27-Сен-18, 19:29 
Так главная идея этого модуля в том, чтобы выкинуть эту самую песочницу с высокими стенками и дать коду привилегии ядра и полный доступ к памяти и прочим ресурсам.
Ответить | Правка | К родителю #7 | Наверх | Cообщить модератору

18. "Запуск WebAssembly runtime как модуля ядра Linux"  –1 +/
Сообщение от Orduemail (ok), 27-Сен-18, 19:39 
> Так главная идея этого модуля в том, чтобы выкинуть эту самую песочницу
> с высокими стенками и дать коду привилегии ядра и полный доступ
> к памяти и прочим ресурсам.

Можно цитату со ссылкой, где эта "главная идея изложена"?

Если пройти по ссылке на github, то там написано следующее:

> primary target is a Linux kernel module that can host Emscripten-generated WebAssembly
> modules. In this configuration it runs WebAssembly modules in kernel-space (ring 0)
> and provides access to system calls as normal function calls. This configuration avoids
> user-kernel transition overhead, as well as scheduling overheads from swapping page tables.

Тут нет ни слова о "привилегиях ядра" и о "полном доступе к памяти и прочим ресурсам".

Ответить | Правка | Наверх | Cообщить модератору

20. "Запуск WebAssembly runtime как модуля ядра Linux"  +2 +/
Сообщение от Аноним (20), 27-Сен-18, 19:51 
> Here are the current developments goals in order of priority:
> * Implement enough Emscripten host-bindings to run nginx.wasm
> ...

Это означает, как минимум, доступ к сети, а также, скорее всего, еще и к диску.

Ну и "In this configuration it runs WebAssembly modules in kernel-space (ring 0) and provides access to system calls as normal function calls." как бы намекает.

Ответить | Правка | Наверх | Cообщить модератору

22. "Запуск WebAssembly runtime как модуля ядра Linux"  +/
Сообщение от Orduemail (ok), 27-Сен-18, 20:58 
>> Here are the current developments goals in order of priority:
>> * Implement enough Emscripten host-bindings to run nginx.wasm
>> ...
> Это означает, как минимум, доступ к сети, а также, скорее всего, еще
> и к диску.

То есть необходимый набор сисколлов, чтобы было как у юзерспейс процесса, так ведь?

> Ну и "In this configuration it runs WebAssembly modules in kernel-space (ring
> 0) and provides access to system calls as normal function calls."
> как бы намекает.

Что это намекает? У nginx в user-space есть доступ ко всем сисколлам, значит ли это, что у него есть полный доступ к памяти ядра?

Ответить | Правка | Наверх | Cообщить модератору

26. "Запуск WebAssembly runtime как модуля ядра Linux"  +/
Сообщение от Аноним (25), 27-Сен-18, 21:44 
> Что это намекает? У nginx в user-space есть доступ ко всем сисколлам,
> значит ли это, что у него есть полный доступ к памяти ядра?

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

Ответить | Правка | Наверх | Cообщить модератору

29. "Запуск WebAssembly runtime как модуля ядра Linux"  +/
Сообщение от Orduemail (ok), 27-Сен-18, 22:24 
>> Что это намекает? У nginx в user-space есть доступ ко всем сисколлам,
>> значит ли это, что у него есть полный доступ к памяти ядра?
> Там как бы есть один жирный плюс: изоляция кернел-юзер аппаратно энфорсится железками.

И в чём, собственно, плюс? Как я понимаю этот "плюс" он хорош для выполнения недоверенного кода, который, вероятно, злонамеренно будет использовать любую дырку для того, чтобы изоляцию обойти. Этот "плюс" хорош для изоляции кода, практики написания которого допускают нечаянный выход за границы массива или выделенного адресного пространства. И этот "плюс" оказывается минусом, когда практики написания кода гарантируют отсутствие выхода за границы, с выполнением всех проверок в compile-time.

> И это по скорости вообще ничего не стоит - проверки делаются
> прямо железками в момент выполнения команд.

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

> А переключение контекста - оно
> как бы да, но его как бы совершенно не обязательно делать
> на каждый пшик, как при наивной реализации. И ядерщики Linux об
> этом как-то догадались и заимплементили.

И тем не менее, как подсказывают ниже, некоторые запиливают юзерспейсные tcp/ip-стеки, дабы уменьшить количество переключений контекста ещё ниже того, что позволяет API построенное вокруг socket и epoll.

Ответить | Правка | Наверх | Cообщить модератору

47. "Запуск WebAssembly runtime как модуля ядра Linux"  +/
Сообщение от eganruemail (?), 30-Сен-18, 13:43 
насколько я помню ядро linux выполняется в одном адресном пространстве.
если не ошибаюсь, то в общем случае из ring 0 есть возможность управлять mmu, что означает полный доступ к памяти.

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

Ответить | Правка | К родителю #18 | Наверх | Cообщить модератору

49. "Запуск WebAssembly runtime как модуля ядра Linux"  +/
Сообщение от Orduemail (ok), 30-Сен-18, 15:00 
> насколько я помню ядро linux выполняется в одном адресном пространстве.
> если не ошибаюсь, то в общем случае из ring 0 есть возможность
> управлять mmu, что означает полный доступ к памяти.

Угу. А ещё выполнение в ring3 означает доступ к сисколлам, так? Попробуй из wasm в браузере вызвать сисколл.

Ответить | Правка | Наверх | Cообщить модератору

50. "Запуск WebAssembly runtime как модуля ядра Linux"  +/
Сообщение от eganruemail (?), 30-Сен-18, 16:32 
[i]А ещё выполнение в ring3 означает доступ к сисколлам, так?[/i] - конечно нет. выполнение в ring3 позволяет выполнять вызовы ядра, если ядро предоставило возможность себя вызывать. вызовом ядра Вы же фактически просто исключение вызываете. и не более.

web-assembly еще только в начале пути. наверняка abi и прочее будут какое-то время меняться.
и, естественно, без syscall сфера применения web-assemly существенно уже, чем с ними.

Ответить | Правка | Наверх | Cообщить модератору

51. "Запуск WebAssembly runtime как модуля ядра Linux"  +/
Сообщение от Orduemail (ok), 30-Сен-18, 18:18 
> [i]А ещё выполнение в ring3 означает доступ к сисколлам, так?[/i] - конечно
> нет. выполнение в ring3 позволяет выполнять вызовы ядра, если ядро предоставило
> возможность себя вызывать.

Абсолютная аналогия с вызовами из виртуальной машины наружу. Что vm позволит, то и будет.

Ответить | Правка | Наверх | Cообщить модератору

44. "Запуск WebAssembly runtime как модуля ядра Linux"  +/
Сообщение от Аноним (44), 28-Сен-18, 16:15 
не изолирован. Он выполняется с правами ring 0, в каком месте он изолирован?
Ответить | Правка | К родителю #7 | Наверх | Cообщить модератору

45. "Запуск WebAssembly runtime как модуля ядра Linux"  +/
Сообщение от Orduemail (ok), 28-Сен-18, 16:34 
> не изолирован. Он выполняется с правами ring 0, в каком месте он
> изолирован?

Он выполняется в песочнице jit.

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру