commit -m "better"
3.24K subscribers
1.03K photos
149 videos
3 files
2.39K links
just random thoughts
Download Telegram
Forwarded from Дидлошная
😁15👍7🤣2
commit -m "better"
#wasm #bootstrap После написания того текста я решил, что мне катастрофически не хватает какого-то решения для поддержки WebAssembly - как для сборки в него, так и выполнения. Потому что раз всем нужно, то и мне тоже нужно! Вот, теперь все есть: pg# cat…
#wasm #wasi #bootstrap

Я таки собрал какое-то приложение в WASM формате, под платформу WASI (специально постоянно про это упоминаю, потому что набор команд (WASM) и доступные вызовы в систему (WASI) - это разные вещи).

К сожалению, пока ничего не заработало.

Сначало оно ругалось на неподдерживаемые ассемблерные команды:

pg# /ix/.../wasm-interp \
/ix/.../bin/base64
0002080: error: unexpected opcode: 0xfe 0x48

Я дизассемблировал этот файл, и понял, что речь идет про

0020bf: fe 48 02 00 i32.atomic.rmw.cmpxchg 2 0

Попробовал включить в интерпретаторе поддержку тредов, но:

pg# /ix/.../bin/wasm-interp \
--enable-all \
/ix/.../bin/base64
error initializing module:
invalid import "wasi_snapshot_preview1.args_get"

Оказалось, что интерпретатор собран без поддержки WASI. Пересобрал, но:

pg# /ix/.../bin/wasm-interp \
--enable-all --wasi \
/ix/.../bin/base64
unknown wasi API import:
`sched_yield`

Тут я пока сдался, потому что WTF?
👍6
commit -m "better"
#wasm #wasi #bootstrap Я таки собрал какое-то приложение в WASM формате, под платформу WASI (специально постоянно про это упоминаю, потому что набор команд (WASM) и доступные вызовы в систему (WASI) - это разные вещи). К сожалению, пока ничего не заработало.…
#wasm #wasi #bootstrap #ix_run

Ну, вот, после пары сегфолтов, я это дело таки завел:

pg# ./ix run \
bin/b64 --target=wasi32 \
bld/sh \
bin/iwasm/fast/er \
-- \
iwasm --fast-jit \
'$(command -v base64)'

b64 (Base64 Encode/Decode) Bob Trower 2001/08/03
(C) Copr Bob Trower 1986-2015 Version 0.94R
Purpose: This program is a simple utility that implements
Base64 Content-Transfer-Encoding (RFC1113).
Use -h option for additional help.

https://wasi.dev/ мне кажется черезчур сложным для реализации. Ну и там пока очень мало чего, чтобы стать полноценным OS API - там нет всяких манипуляций с FS, сигналов, треды в зачаточном состоянии, процессов тоже нет.

Жду, когда запилят WASM + Linux ABI. Кажется, это не должно быть очень сложным - нужно запилить тонкую прослойку, которая бы проксировала из контекста интерпретатора в контекст системы всего шесть функций - syscall0, ..., syscall5 (это Linux ABI), а поверх этого сконпелять musl в виде libc.

Это не так гранулярно, зато можно очень быстро получить связку WASM jit + Linux, в качестве target platform.
🔥11🤔3👍2
commit -m "better"
https://lwn.net/Articles/935592/ RH закрывает доступ к исходникам, из которых собирает RHEL. По подписке они продолжают быть доступны, все честно. В комментариях срач, коллеги никак не могут договориться, кто же больше паразитирует на open source: * RH…
https://www.opennet.ru/opennews/art.shtml?num=59332

Продолжение истории про Red Hat.

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

Из интересного:

"Для клиентов компания Red Hat оставила возможность загрузки кода srpm-пакетов RHEL через закрытый раздел сайта, на котором действует дополнительное пользовательское соглашение (EULA), запрещающее редистрибуцию RHEL. Использование в AlmaLinux и Rocky Linux srpm-пакетов, загруженных через клиентский портал Red Hat, сопряжено с юридическими рисками."
👍4🤔3🤡2
commit -m "better"
#wasm #wasi #bootstrap #ix_run Ну, вот, после пары сегфолтов, я это дело таки завел: pg# ./ix run \ bin/b64 --target=wasi32 \ bld/sh \ bin/iwasm/fast/er \ -- \ iwasm --fast-jit \ '$(command -v base64)' b64 (Base64 Encode/Decode) Bob…
#wasm #wasi #bootstrap

Однажды начав, бывает сложно остановиться.

Собрал еще 4 wasm рантайма:

https://github.com/wasmx/fizzy
https://github.com/wasm3/wasm3
https://github.com/WasmEdge/WasmEdge
https://github.com/tetratelabs/wazero

Из них только wasmedge оказался способен выполнить мою тестовую программу:

pg# ./ix run bin/b64 \
--target=wasi32 \
bld/sh \
bin/wasm/edge \
-- \
wasmedge --enable-all \
'$(command -v base64)'

b64 (Base64 Encode/Decode) Bob Trower 2001/08/03
(C) Copr Bob Trower 1986-2015 Version 0.94R
Purpose: This program is a simple utility that implements
Base64 Content-Transfer-Encoding (RFC1113).
Use -h option for additional help.
pg#

Вообще, их, конечно, больше - https://github.com/appcypher/awesome-wasm-runtimes, но остальные или выглядят заброшенными, или написаны на странных языках, типа Python, или Rust.
🤔5👍2🔥1
Forwarded from The After Times
🐳15
Forwarded from Daniel Lemire's blog
Science and Technology links (June 25 2023)

1. Women in highly religious relationships report the highest levels of relationship quality. 2. US politics is largely divided into two parties (Republicans and Democrats). People who are affiliated with the Republicans have many more kids. 3. The Antartic ice shelves gained 661 gigaton of ice over the past decade. 4. A low protein diet increases mortality among older men. 5. Consuming magnesium may preserve your brain, especially if you are a woman. 6. A third of the planet around common stars in our galaxy could be in the habitable zone. 7. Taurine (a supplement) might keep you young. It works, in some ways, in different animals. McGaunn et al. (2023) make a case for human beings, but they do not have much in the way of quality clinical trials. 8. Older people often lose their thymus, a gland that plays an important role in your immune system. Sandstedt et al. report that about two-third of their middle-age subjects had lost entirely the thymus (complete…

https://lemire.me/blog/2023/06/25/science-and-technology-links-june-25-2023/
👍43🤔3
https://www.phoronix.com/news/Go-1.21-RC

#perf

Меня расстраивают игры с PGO в Go.

Go сейчас - sweet point между скоростью компиляции и качеством генерируемого кода. Это, кстати, одна из тех причин, по которым мне НРАВИТСЯ писать на Go. Не просто "ок", а именно нравится - вспоминается детство, безумно быстрый borland pascal (безумно - потому что он рожал код моментально на моем pentium 75, а не на современных многоядерных монстрах), и это ощущение "потока", когда от изменения строчки кода до ее проверки проходит нисколько времени.

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

Много раз писал и буду писать, что я почти всегда предпочту компилятор, генерирующий код в 2 раза медленнее, но делающий это в 20 раз быстрее. Потому что ускорить целевую программу в 2 раза, в целом, решаемая задача, а нервные клетки не восстанавливаются.
👍12👎9🤔4💯1
commit -m "better"
#wasm #wasi #bootstrap Однажды начав, бывает сложно остановиться. Собрал еще 4 wasm рантайма: https://github.com/wasmx/fizzy https://github.com/wasm3/wasm3 https://github.com/WasmEdge/WasmEdge https://github.com/tetratelabs/wazero Из них только wasmedge…
#perf #wasm

Ну вот я, с помощью лома и такой-то матери, собрал нетривиальное приложение, которое actually do something - компрессор brotli.

И потестил его в разных runtime, которые у меня уже были, vs. нативное выполнение:

pg# cat g | time .../brotli -1 -c > qw.brotli.1
real 0m 0.50s
user 0m 0.46s
sys 0m 0.03s
pg# cat g | time .../wasmedge \
--enable-all \
.../brotli -1 -c > qw.brotli.2
real 1m 2.35s
user 1m 2.27s
sys 0m 0.04s
pg# cat g | time .../iwasm \
--llvm-jit \
.../brotli -1 -c > qw.brotli.3
real 0m 2.71s
user 0m 5.86s
sys 0m 0.06s
pg# cat g | time .../iwasm \
--fast-jit \
.../brotli -1 -c > qw.brotli.4
real 0m 1.21s
user 0m 2.20s
sys 0m 0.06s


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

Про плохой результат wasmedge - это, кажется, что-то странное, скорее всего, я его криво собрал.
🔥9
commit -m "better"
https://www.opennet.ru/opennews/art.shtml?num=59332 Продолжение истории про Red Hat. Судя по тексту, альтернативные сборки редхата пока не очень понимают, как им жить дальше, все, что они могут сказать - "ну, мы как-то решим эту проблему, как - пока не знаем…
https://www.redhat.com/en/blog/red-hats-commitment-open-source-response-gitcentosorg-changes

Мерзотный текст от RH, с "объяснением" происходящего.

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

* "Нам нужны деньги, чтобы платить ЗП разрабам" (а еще акционерам, но про это не сказано), "поэтому нам приходится делать так, чтобы нашу работу было сложно повторить".

* "Нуачотакова? Вот исходники, все выложено, делайте с ними, чо хотите". И опять же, четко не сказано, что собрать из этих исходников RHEL, не зная конкретные ревизии, невозможно, потому что смотри предыдущий параграф.
🤡10🐳3🔥1🙈1
commit -m "better"
#wasm #wasi #bootstrap #ix_run Ну, вот, после пары сегфолтов, я это дело таки завел: pg# ./ix run \ bin/b64 --target=wasi32 \ bld/sh \ bin/iwasm/fast/er \ -- \ iwasm --fast-jit \ '$(command -v base64)' b64 (Base64 Encode/Decode) Bob…
#wasm

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

https://wasix.org/

https://github.com/wasix-org/wasix-libc

Вот, почти полный POSIX wasm runtime. К сожалению, пока работает только в https://wasmer.io/
🔥51👍1
🤮10🗿8😁5🔥3👍2🐳1
commit -m "better"
#perf #wasm Ну вот я, с помощью лома и такой-то матери, собрал нетривиальное приложение, которое actually do something - компрессор brotli. И потестил его в разных runtime, которые у меня уже были, vs. нативное выполнение: pg# cat g | time .../brotli -1…
#wasm #perf

Разобрался с отставанием wasmedge.

Чтобы все работало быстро, нужно пройтись по wasm с помощью его AOT компилятора, и тогда получается вот такой результат:

real  0m 0.62s
user 0m 0.57s
sys 0m 0.03s

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

Впрочем, скорость его AOT не впечатляет:

pg# time .../bin/wasmedgec \
--optimize 3 \
--enable-threads \
.../brotli brotli
[2023-06-29 01:55:52.636] [info] compile start
[2023-06-29 01:55:52.669] [info] verify start
[2023-06-29 01:55:52.710] [info] optimize start
[2023-06-29 01:55:56.632] [info] codegen start
[2023-06-29 01:56:01.680] [info] output start
[2023-06-29 01:56:01.682] [info] compile done
[2023-06-29 01:56:01.686] [info] output start

real 0m9.117s
user 0m9.063s
sys 0m0.041s
🔥13
https://www.opennet.ru/opennews/art.shtml?num=59354

Oracle запилили автоматический оптимизатор настроек ядра Linux, о как.

На моей памяти это уже вторая (а то и третья) такая попытка.

(быстрым грепом не нашел эту историю в интернете, если у вас есть под рукой - киньте ссылкой)

Но, насколько я помню, тогда оно не полетело, потому что:

* Linux был еще глючнее, чем сейчас.
* Многие комбинации параметров приводили к тому, что система просто вставала колом, с невозможностью тюнить ее дальше. С учетом первого пункта это было бомбически.
* Шум.

Интересно, как Oracle решили эти проблемы.
🤔6🔥4💯1
commit -m "better"
https://www.redhat.com/en/blog/red-hats-commitment-open-source-response-gitcentosorg-changes Мерзотный текст от RH, с "объяснением" происходящего. Мерзотный - потому что он, в лучших традициях, пытается одновременно объяснить два взаимоисключающих параграфа:…
https://rockylinux.org/news/keeping-open-source-open/

Не менее мерзотный текст от Rocky Linux, с описанием того, что они собираются сделать в ответ на действия RH.

В целом, все просто - они заявляют, что с болтом клали на EULA от RH, и будут выковыривать сурсы отовсюду, куда дотянутся. В основном, через облачные инсталляции RH.

Почему этот текст не менее мерзотный?

Вот из-за этого абзаца:

"These methods are possible because of the power of #GPL. No one can prevent redistribution of GPL software. To reiterate, both of these methods enable us to legitimately obtain RHEL binaries and SRPMs without compromising our commitment to open source software or agreeing to TOS or EULA limitations that impede our rights. Our legal advisors have reassured us that we have the right to obtain the source to any binaries we receive, ensuring that we can continue advancing Rocky Linux in line with our original intentions"

Как обычно, это "полуправда", призванная скрыть суть происходящего.

Да, для GPL софта они имеют право получить исходники и SRPMS таким образом.

А вот для не-GPL бинарников - не имеют.

И, на самом деле, довольно много системного софта в Linux не идет под GPL (практически весь графический стек, не считая конечных тулкитов - permissive, например).

В глубине души, я, конечно, больше на их стороне, но, КМК, им надо быть более аккуратными.
🤔5🔥42👍1🤡1
Forwarded from The After Times
👍23😁9🤯2
commit -m "better"
#wasm #perf Разобрался с отставанием wasmedge. Чтобы все работало быстро, нужно пройтись по wasm с помощью его AOT компилятора, и тогда получается вот такой результат: real 0m 0.62s user 0m 0.57s sys 0m 0.03s Это уже довольно близко к нативной скорости…
#wasm

От сборки примитивной ерунды до запускающегося интерпретатора python прошло не очень много времени:

pg# ./ix run bin/wasm/edge bin/python/11/wasi --target=wasi32 -- wasmedge --enable-all '$(command -v python3.wasm)' --help
usage: python3.wasm [option] ... [-c cmd | -m mod | file | -] [arg] ...
Options (and corresponding environment variables):
-b : issue warnings about str(bytes_instance), str(bytearray_instance)
and comparing bytes/bytearray with str. (-bb: issue errors)
-B : don't write .pyc files on import; also PYTHONDONTWRITEBYTECODE=x
-c cmd : program passed in as string (terminates option list)
-d : turn on parser debugging output (for experts only, only works on
debug builds); also PYTHONDEBUG=x
-E : ignore PYTHON* environment variables (such as PYTHONPATH)
-h : print this help message and exit (also -? or --help)
-i : inspect interactively after running script; forces a prompt even
if stdin does not appear to be a terminal; also PYTHONINSPECT=x
-I : isolate Python from the user's environment (implies -E and -s)
-m mod : run library module as a script (terminates option list)
-O : remove assert and __debug__-dependent statements; add .opt-1 before
.pyc extension; also PYTHONOPTIMIZE=x
-OO : do -O changes and also discard docstrings; add .opt-2 before
.pyc extension
-P : don't prepend a potentially unsafe path to sys.path
-q : don't print version and copyright messages on interactive startup
-s : don't add user site directory to sys.path; also PYTHONNOUSERSITE
-S : don't imply 'import site' on initialization
-u : force the stdout and stderr streams to be unbuffered;
this option has no effect on stdin; also PYTHONUNBUFFERED=x
-v : verbose (trace import statements); also PYTHONVERBOSE=x
can be supplied multiple times to increase verbosity
-V : print the Python version number and exit (also --version)
when given twice, print more information about the build
-W arg : warning control; arg is action:message:category:module:lineno
also PYTHONWARNINGS=arg
-x : skip first line of source, allowing use of non-Unix forms of #!cmd
-X opt : set implementation-specific option
--check-hash-based-pycs always|default|never:
control how Python invalidates hash-based .pyc files
--help-env : print help about Python environment variables and exit
--help-xoptions : print help about implementation-specific -X options and exit
--help-all : print complete help information and exit
Arguments:
file : program read from script file
- : program read from stdin (default; interactive mode if a tty)
arg ...: arguments passed to program in sys.argv[1:]
pg#


Впрочем, сам интерпретатор пока не очень работает:

pg# ./ix run bin/wasm/edge bin/python/11/wasi --target=wasi32 -- wasmedge --enable-all '$(command -v python3.wasm)' 
Exception ignored error evaluating path:
Traceback (most recent call last):
File "<frozen getpath>", line 353, in <module>
OSError: [Errno 0] Error
Fatal Python error: error evaluating path
Python runtime state: core initialized

Current thread 0x00000000 (most recent call first):
<no Python frame>
👍17🔥2🎉1
На phoronix обсуждают какую-то презу, в которой объясняется, почему Linux не используют в mission critical системах.

https://www.phoronix.com/news/Linux-On-Airplanes-Challenges

КМК, приведенный выше слайд очень хорошо описывает культуру разработки ядра (а, точнее, ее полное отсутствие).

#linux #kernel
😁9🤔6👍3🔥2🤯1
commit -m "better"
Я давно откладывал эту тему, но вот вышла эта новость, и, видимо, пора: https://www.opennet.ru/opennews/art.shtml?num=56587 "Отмечается, что для полноценной работы приложений на базе SDL в Wayland требуется наличие библиотеки #libdecor для декорирования…
#GNOME #gtk #ssd

https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/6161

Продолжение темы про server side decorations, жирно, годно.

На этот раз господа из gtk прямым текстом говорят, что wayland - им не указ:

"There is no debate. And this is not a standard. It is an experimental protocol that somebody slapped the xdg name on and merged into the wayland repos. It is not implemented by anybody except sway and kwin"

И ответ:

"Please refrain from making fun of the Wayland community this way. We've worked very hard to reach a consensus among all wayland-protocols members, and it feels like you're dismissing this work"

Тут вот активно форсят тему про планирующийся бой Маска и Цукерберга, а я вот, конечно, хотел бы посмотреть, как подерутся Simon Ser и Clasen, например.
🔥10🐳2
#llvm

https://reviews.llvm.org/rG75a1797044fc

Поддержка fat lto .o файлов.

Сделано это изящным (нет) хаком:

"The new pipeline initially clones the module and runs the
selected (Thin)LTOPrelink pipeline, after which it will serialize the
module into a .llvm.lto section of an ELF file"

Натурально, положили IR в отдельную секцию в .o файле.

Получается, что, если, в итоге, будет использован LTO, то дополнительная работа по оптимизации и подготовке объектного кода будет выброшена на ветер.

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

Если уметь пересобрать все дерево зависимостей одним махом с нужными флагами, то все эти приседания, очевидно, не нужны.
🔥11👍2