Size: a a a

WebAssembly — русскоговорящее сообщество

2020 July 28

SK

Slava Kuzmich in WebAssembly — русскоговорящее сообщество
Mikhail Voronov
я только в сорцах вм (в том числе и в v8) видел, но и вообще это достаточно известная техника. Вроде это никак не мешает держать несколько инстансов вм в памяти, потому что доп память под GP реально не выделяется
тоесть если у тебя 100 разных линейных памятей, можно разным load инструкциям запрещать разные страницы?
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Ну кстати подход с guard pages работает на сколько я знаю пока только в linux / unix и только для 32-битного адресного пространства, для wasm64 это уже не будет работать
источник

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
Slava Kuzmich
тоесть если у тебя 100 разных линейных памятей, можно разным load инструкциям запрещать разные страницы?
Если я правильно тебя понял, это не совсем так работает: ты выделяешь весь регион памяти под васм кучу (ну или часть коммитишь, а часть только резервируешь), а сразу после резервируешь 4 Гб под область с GP, обращение в которую даёт исключение. Далее любое переполнение в load/store ведёт к обращению в эту область и исключению. А памяти различных инстансов между собой изолированы и не пересекаются. Для каждой свой такой регион.
источник

К

Константин in WebAssembly — русскоговорящее сообщество
Проблема с выделением памяти под все инстансы в 1 блоке GROW.
Если будет 2 модуля подряд, 1 решил себе 1гб выделить, придётся его двигать
источник

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
Константин
Проблема с выделением памяти под все инстансы в 1 блоке GROW.
Если будет 2 модуля подряд, 1 решил себе 1гб выделить, придётся его двигать
просто разносишь начала куч по адресному пространству на 8 Гб
источник

К

Константин in WebAssembly — русскоговорящее сообщество
Ну как бы не многовато ли?
источник

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
ты же знаешь, в чём отличие физической от виртуальной памяти, маппинги, что системный вызов mmap в никсах на самом деле не аллоцирует реально память, пока не попробуешь туда записать
источник

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
в винде то же самое поведение, но чуть более сложно
источник

К

Константин in WebAssembly — русскоговорящее сообщество
фрагментации все равно походу не избежать
источник

MV

Mikhail Voronov in WebAssembly — русскоговорящее сообщество
для x86-64 о фрагментации обычно говорят на уровне аллокатора памяти, но тут всё должно происходить в обход него с помощью системного вызова mmap (к слову большинство аллокаторов напрямую вызывают mmap для достаточно больших запросов). А уже внутри васм кучи есть свой внутренний аллокатор и вот там уже фрагментация
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Ну и стоит еще заметить, что страницы wasm выделяет последовательно (поэтому и называется память линейной) и уменьшить колличество страниц кстати не может
источник
2020 July 29

К

Константин in WebAssembly — русскоговорящее сообщество
Да, интересный вопрос.
Почему не может?
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
ну есть кстати предложение / обсуждкния добавить memory.shrink, но что то я не видел позитивного фидбека от браузерных вендоров
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
источник

К

Константин in WebAssembly — русскоговорящее сообщество
Это например надо сделать декомпрессию чего-то, тот же deflate на 20mb файлик, у меня память к 200мб для нее выделилась, а потом я просто 2мб юзаю к примеру.
Я боюсь знать сколько жрет webmp декодер/энкодер в wasm:)
источник

AT

Alexander Tchitchigi... in WebAssembly — русскоговорящее сообщество
Богдан
А почему свой стек - медленно? Понятно что в x64 уже есть встроенные инструкции для стека но я не понимаю почему это будет прям сильно медленно. Любое обращение в память всегда считывает всю кеш-линию (область памяти в 64 байта). Считал хотя бы один байт - получай в подарок практически бесплатное обращение к 64 близлежащим байтам. Поскольку стек это идеальная с точки зреня локальности структура ( последовательная запись или считывание) то даже кастомный стек будет работать быстро за счет этих кеш-линий
Во-первых, на практике Ваши рассуждения не подтверждаются, и все реализации shadow stack (нативные в первую очередь, без WASM) работают медленно. Учитывайте, что писать-то надо в оба стека, иначе Вы даже функции вызывать не сможете. Уж точно не из сторонних библиотек.
Во-вторых, работу со встроенным стеком WASM runtime может оптимизировать, а про Ваш собственный, понятное дело, ничего не знает.
источник

AT

Alexander Tchitchigi... in WebAssembly — русскоговорящее сообщество
Богдан
Кстати а почему возможность сканировать стек это дыра в безопасности? Я так понимаю речь про запись в стек а не считывание (например заменить ссылки на объекты когда gc переместит в другой регион), тогда согласен
Все равно неясно почему комитет webassembly так беспокоится про безопасность. Там ведь все равно будет изоляция и песочница от других сайтов. Все что может wasm-модуль так это навредить сам себе. Мне кажется задача обеспечивать безопасность относится не к рантайму а к  тому языку который компилируется в wasm, например memory-safe ссылки на объекты вместо явных указателей, статическая типизация и проверки и т.д
Даже чтение чего попало -- дыра в безопасности, потому что так могут утекать секретные данные. Это раз.
Второе, WebAssembly относится в Web и браузерам лишь постольку поскольку, его вообще активнее на серверах используют на данный момент. Так что модель безопасности должна учитывать и такие, и ещё всякие сценарии. Что она и делает.
И наконец, будучи универсальным таргетом, WASM не может полагаться на языки. В него массово C/C++ компилируют, со всеми сопутствующими гарантиями (примерно никакими). А можно и руками WASM писать.
источник

M

MaxGraey in WebAssembly — русскоговорящее сообщество
Вот уже и Mac OS 8 на WebAssembly портировали)

UPD там не wasm а asm.js:
https://github.com/felixrieseberg/macintosh.js/tree/master/src/basilisk

https://github.com/felixrieseberg/macintosh.js
источник

SR

Sergey Rubanov in WebAssembly — русскоговорящее сообщество
Слайды доклада Wasm GC and JS Interaction со вчерашнего доклада встречи подгруппы #WebAssembly GC.

https://docs.google.com/presentation/d/1BqRlDrQIYdkRHHtoZ7F8a2tpFwYoumCCbqQ4SpULajI/edit#slide=id.p
источник

P🍣

Pavel 🍣 in WebAssembly — русскоговорящее сообщество
Sergey Rubanov
так, надо тогда сразу определиться — в оргу добавляем всех желающих или активных участников =)
Да, кроме желания что то еще надо что бы стать энтузиастом?
источник