commit -m "better"
Потом он уйдет под управление гипервизором как неплохой POSIX слой
https://www.opennet.ru/opennews/art.shtml?num=60285
Вот, простая и понятная демонстрация мысли про то, что Linux-у останется роль POSIX подсистемы и FS в каких-нибудь нормальных OS.
Заголовок новости врет, там, конечно, не "RTOS на Rust как Linux subsystem", а "Linux запущен как процесс в RTOS на Rust, для обеспечения POSIX слоя". Потому что иначе обеспечить гарантии RTOS просто невозможно.
Спутником управляет надежный код на Rust (хорошо, что не очередное поделие на C), Linux обеспечивают "удобный gui для админа" (ну или там ssh, неважно).
Туда ему и дорога.
Вот, простая и понятная демонстрация мысли про то, что Linux-у останется роль POSIX подсистемы и FS в каких-нибудь нормальных OS.
Заголовок новости врет, там, конечно, не "RTOS на Rust как Linux subsystem", а "Linux запущен как процесс в RTOS на Rust, для обеспечения POSIX слоя". Потому что иначе обеспечить гарантии RTOS просто невозможно.
Спутником управляет надежный код на Rust (хорошо, что не очередное поделие на C), Linux обеспечивают "удобный gui для админа" (ну или там ssh, неважно).
Туда ему и дорога.
www.opennet.ru
В Китае запущен спутник с real-time подсистемой ядра Linux, написанной на Rust
9 декабря в Китае был запущен спутник Tianyi-33, разработанный в рамках проекта Tiansuan и оснащённый бортовым компьютером, на котором задействовано модифицированное ядро Linux с компонентами для обеспечения работы в режиме реального времени, написанными…
🔥12🫡7🤔2🤡2
У меня сегодня, для разнообразия, вместо баек про IT, приготовление тушенки на год.
Потому что я тут подумал, что грех это - жить за городом, и не пользоваться большой кухней, в которой можно хранить девайс, использующийся раз в году!
(если ебанет, прошу считать меня коммунистом!)
Потому что я тут подумал, что грех это - жить за городом, и не пользоваться большой кухней, в которой можно хранить девайс, использующийся раз в году!
(если ебанет, прошу считать меня коммунистом!)
🔥46🫡13👍4😁1
https://ubuntu.com/blog/ubuntu-performance-engineering-with-frame-pointers-by-default #gold #LTO #perf
В ubutu включили -fno-omit-frame-pointer для 64 битных систем, по умолчанию.
Хорошая новость, из разряда "долго тупили, но опомнились, и сделали по уму".
Много раз писал, и буду писать, что вам, в среднем, не нужны оптимизации "последних 5% перфа", которые сильно усложняют отладку, и ухудшают время сборки:
- LTO. Коллеги, если вы включаете LTO в своих сборках, то вы подписываетесь на то, что будете регулярно чинить проблемы, которые просто не возникают у других людей. По двум причинам:
* Вы начинаете использовать код, который используется меньше, чем 1% пользователей вашего компилятора. Этот код хуже отлажен, в нем больше багов, он чаще будет генерить некорректный код в результате.
* Вы подвергаете свою кодовую базу стрессу, который мог совсем не предполагаться теми, кто пишет весь остальной код в вашем репозитории. Представьте себе монорепу, в которой вы пишете маленькую программу, она использует кучу библиотек из монорепы, и вы решили собрать ее с LTO. Вы наложили новый контракт на используемый вами код, и его никто не будет соблюдать, кроме вас.
Это все звучит очень теоретически, пока вы не начнете разгребать проблемы, когда компилятор что-то там хорошо "разынлайнил", и где-то закешировал регистр FS, потому что не ожидает перед собой переключение стеков, а кто-то из ваших коллег творчески поюзал код, переключающий контексты (тот или иной движок корутин, например).
Людям, которые принимают решение о выкатке кода в прод, дам совет. Если вам кто-то приносит 5% перфа, полученного за счет LTO,шлите его в хуй, спросите, за чей счет банкет, и кто будет этот код обслуживать дальше, и чинить всякие веселые баги в компиляторе, и в вашей кодовой базе. Это совершенно не бесплатные 5%, вы за них будете платить все время жизни вашего софта.
LTO имеет смысл для браузера, который собирается и отлаживается очень большой командой, и используется много кем.
Твоей программе, username, он не нужен.
- fomit-frame-pointer. Отладка затрудняется, корки совершенно бессмысленные, стектрейсы для записи в лог стоят дорого. Современные компиляторы сводят ущерб от frame pointer к минимуму.
Я иду дальше, и запрещаю UB в следующих случаях:
https://github.com/pg83/ix/blob/main/pkgs/lib/build/opt/safe/ix.sh#L4
Да, я отключаю UB в переполнениях с целыми числами, и выключаю strict aliasing.
Желающие отлаживать всякие интересные (нет) корки могут себе это отключить, на всю систему, или на отдельный пакет.
В ubutu включили -fno-omit-frame-pointer для 64 битных систем, по умолчанию.
Хорошая новость, из разряда "долго тупили, но опомнились, и сделали по уму".
Много раз писал, и буду писать, что вам, в среднем, не нужны оптимизации "последних 5% перфа", которые сильно усложняют отладку, и ухудшают время сборки:
- LTO. Коллеги, если вы включаете LTO в своих сборках, то вы подписываетесь на то, что будете регулярно чинить проблемы, которые просто не возникают у других людей. По двум причинам:
* Вы начинаете использовать код, который используется меньше, чем 1% пользователей вашего компилятора. Этот код хуже отлажен, в нем больше багов, он чаще будет генерить некорректный код в результате.
* Вы подвергаете свою кодовую базу стрессу, который мог совсем не предполагаться теми, кто пишет весь остальной код в вашем репозитории. Представьте себе монорепу, в которой вы пишете маленькую программу, она использует кучу библиотек из монорепы, и вы решили собрать ее с LTO. Вы наложили новый контракт на используемый вами код, и его никто не будет соблюдать, кроме вас.
Это все звучит очень теоретически, пока вы не начнете разгребать проблемы, когда компилятор что-то там хорошо "разынлайнил", и где-то закешировал регистр FS, потому что не ожидает перед собой переключение стеков, а кто-то из ваших коллег творчески поюзал код, переключающий контексты (тот или иной движок корутин, например).
Людям, которые принимают решение о выкатке кода в прод, дам совет. Если вам кто-то приносит 5% перфа, полученного за счет LTO,
LTO имеет смысл для браузера, который собирается и отлаживается очень большой командой, и используется много кем.
Твоей программе, username, он не нужен.
- fomit-frame-pointer. Отладка затрудняется, корки совершенно бессмысленные, стектрейсы для записи в лог стоят дорого. Современные компиляторы сводят ущерб от frame pointer к минимуму.
Я иду дальше, и запрещаю UB в следующих случаях:
https://github.com/pg83/ix/blob/main/pkgs/lib/build/opt/safe/ix.sh#L4
Да, я отключаю UB в переполнениях с целыми числами, и выключаю strict aliasing.
Желающие отлаживать всякие интересные (нет) корки могут себе это отключить, на всю систему, или на отдельный пакет.
Ubuntu
Performance engineering on Ubuntu leaps forward with frame pointers by default in Ubuntu 24.04 LTS | Ubuntu
Today Canonical is raising the bar for performance and observability by enabling frame pointers by default in Ubuntu 24.04 LTS. […]
👍17🤔9👎3🔥2💩2🫡2🥰1
Не на правах рекламы.
https://iina.io/
https://github.com/iina/iina
Нормальный медиаплеер для macOS, и не богомерзкий (потому что плюгин на плюгине и плюгином погоняет) VLC!
GUI над mpv, на кошерном swift (выглядит как "настоящее" приложение под macOS), красота, да и только!
Удивительно, репе 7 лет, а я узнал про этот плеер всего неделю назад.
https://iina.io/
https://github.com/iina/iina
Нормальный медиаплеер для macOS, и не богомерзкий (потому что плюгин на плюгине и плюгином погоняет) VLC!
GUI над mpv, на кошерном swift (выглядит как "настоящее" приложение под macOS), красота, да и только!
Удивительно, репе 7 лет, а я узнал про этот плеер всего неделю назад.
GitHub
GitHub - iina/iina: The modern video player for macOS.
The modern video player for macOS. Contribute to iina/iina development by creating an account on GitHub.
👍13🔥5🤔4
https://www.opennet.ru/opennews/art.shtml?num=60303
Первый сетевой драйвер на #Rust в ядре. https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/commit/?id=cbe0e415089636170aa6eb540ca4af5dc9842a60
Ажно 135 строк кода, 134 из которых - взаимодействие с остальным ядром, ничего интересного, проходим мимо.
Зато классный срачик на похорониксе - https://www.phoronix.com/forums/forum/phoronix/latest-phoronix-articles/1429237-the-first-rust-written-network-phy-driver-set-to-land-in-linux-6-8
Коллеги спорят, можно ли писать "боевой" код на С, или нельзя.
Это, очевидно, instance of https://ru.wikipedia.org/wiki/%D0%9D%D0%B8_%D0%BE%D0%B4%D0%B8%D0%BD_%D0%B8%D1%81%D1%82%D0%B8%D0%BD%D0%BD%D1%8B%D0%B9_%D1%88%D0%BE%D1%82%D0%BB%D0%B0%D0%BD%D0%B4%D0%B5%D1%86, поэтому принимать участие в этом обсуждении я не вижу никакого смысла, только скажу, что писать надежный код на С - запредельно дорого.
Первый сетевой драйвер на #Rust в ядре. https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/commit/?id=cbe0e415089636170aa6eb540ca4af5dc9842a60
Ажно 135 строк кода, 134 из которых - взаимодействие с остальным ядром, ничего интересного, проходим мимо.
Зато классный срачик на похорониксе - https://www.phoronix.com/forums/forum/phoronix/latest-phoronix-articles/1429237-the-first-rust-written-network-phy-driver-set-to-land-in-linux-6-8
Коллеги спорят, можно ли писать "боевой" код на С, или нельзя.
Это, очевидно, instance of https://ru.wikipedia.org/wiki/%D0%9D%D0%B8_%D0%BE%D0%B4%D0%B8%D0%BD_%D0%B8%D1%81%D1%82%D0%B8%D0%BD%D0%BD%D1%8B%D0%B9_%D1%88%D0%BE%D1%82%D0%BB%D0%B0%D0%BD%D0%B4%D0%B5%D1%86, поэтому принимать участие в этом обсуждении я не вижу никакого смысла, только скажу, что писать надежный код на С - запредельно дорого.
www.opennet.ru
В ядро Linux 6.8 намечено включение первого сетевого драйвера на языке Rust
В ветку net-next, в которой развиваются изменения для ядра Linux 6.8, включены изменения, добавляющие в состав ядра начальную Rust-обвязку над уровнем абстракции phylib и использующий данную обвязку драйвер ax88796b_rust, обеспечивающий поддержку PHY-интерфейса…
👍4🔥2🤮2💯1
commit -m "better"
https://github.com/CuarzoSoftware/Louvre/blob/main/LICENSE Слона-то я и не заметил. Бибилиотека под GPLv3, а, значит, использовать ее никто не будет. А если у библиотеки нет пользовательской базы, то в ней нет багфиксов и развития. Есть, конечно, небольшое…
https://github.com/CuarzoSoftware/Louvre/releases/tag/v1.1.0-1
Чувак прямо как услышал меня:
Еще одна причина посмотреть на библиотеку внимательнее.
Чувак прямо как услышал меня:
License updated from GPLv3 to MIT.
Еще одна причина посмотреть на библиотеку внимательнее.
GitHub
Release Louvre v1.1.0-1 · CuarzoSoftware/Louvre
Louvre (1.1.0-1)
License
License updated from GPLv3 to MIT.
Dependencies
Substituted the FreeImage dependency with STB Image.
Building
Substituted LConfig.h configuration header with LComposit...
License
License updated from GPLv3 to MIT.
Dependencies
Substituted the FreeImage dependency with STB Image.
Building
Substituted LConfig.h configuration header with LComposit...
❤6😢4🔥3🥱3👍1
#llvmweekly
https://github.com/llvm/llvm-project/commit/f7407411a1da
Прикольная оптимизация для deque-подобных контейнеров (это когда контейнер состоит из указателей на сегменты, в которых уже и хранятся реальные элементы) - а давайте std::find будет работать не через ++it (который очень дорогая операция, потому что надо проверять, не в конце ли мы сегмента, и прыгать в начало следующего), а как бы знать, что контейнер состоит из сегментов, и поиск внутри сегмента делать более эффективно.
Вот надо еще inplace sort так оптимизировать, чтобы блоки для сортировки (и последующего слияния, например) совпали с сегментами деки, стало бы совсем хорошо.
https://github.com/llvm/llvm-project/commit/f7407411a1da
Прикольная оптимизация для deque-подобных контейнеров (это когда контейнер состоит из указателей на сегменты, в которых уже и хранятся реальные элементы) - а давайте std::find будет работать не через ++it (который очень дорогая операция, потому что надо проверять, не в конце ли мы сегмента, и прыгать в начало следующего), а как бы знать, что контейнер состоит из сегментов, и поиск внутри сегмента делать более эффективно.
Вот надо еще inplace sort так оптимизировать, чтобы блоки для сортировки (и последующего слияния, например) совпали с сегментами деки, стало бы совсем хорошо.
GitHub
[libc++] Optimize std::find for segmented iterators (#67224) · llvm/llvm-project@f740741
```
--------------------------------------------------------------------------
Benchmark old new
----------------------------------------...
--------------------------------------------------------------------------
Benchmark old new
----------------------------------------...
🔥19❤3👍3
commit -m "better"
https://lwn.net/ml/gcc/CAGWvnym7--36T6L6XhhVhQmafR-w3g1NE1Zh9qTbjcC325Us1Q@mail.gmail.com/ В gcc собираются включить наработки #gccrs, то есть, добавят реализацию Rust. Это будет уже третья реализация, помимо основной, и #mrustc(https://github.com/thepo…
https://lwn.net/SubscriberLink/954787/41470c731eda02a4/
#gccrs
rust in gcc стагнирует, и далек даже от того состояния, в котором сейчас находится #mrustc. mrustc уже умеет в 1.54, а вот эти вот товарищи пытаются в 1.49, да и то, там конь еще не валялся.
https://gcc.gnu.org/wiki/cauldron2023talks?action=AttachFile&do=view&target=GCC+Rust+Update.pdf
Пролистал слайды про устройство proc macro в gccrs,смерть смерть кладбище, тоска, они собираются точно так же динамически линковать и загружать .so, как это сейчас делает rustc.
А, значит, они мне совершенно бесполезны.
#gccrs
rust in gcc стагнирует, и далек даже от того состояния, в котором сейчас находится #mrustc. mrustc уже умеет в 1.54, а вот эти вот товарищи пытаются в 1.49, да и то, там конь еще не валялся.
https://gcc.gnu.org/wiki/cauldron2023talks?action=AttachFile&do=view&target=GCC+Rust+Update.pdf
Пролистал слайды про устройство proc macro в gccrs,
А, значит, они мне совершенно бесполезны.
lwn.net
Progress toward a GCC-based Rust compiler
The gccrs project is an ambitious
effort started in 2014 to implement a Rust compiler within The GNU Compiler
Collection (GCC). Even though the task is far from complete, progress has
been made since LWN's previous coverage,
according to reports from the…
effort started in 2014 to implement a Rust compiler within The GNU Compiler
Collection (GCC). Even though the task is far from complete, progress has
been made since LWN's previous coverage,
according to reports from the…
👍4😢2🤮2😁1
commit -m "better"
Будни #bootstrap Я тут непоправимо улучшил свою реализацию sudo. Напомню, что sudo у меня сделан через ssh на localhost, с эскалацией привилегий до root. Это, в том числе, позволяет не иметь #suid бинарников в системе. К сожалению, у этого решения был недостаток…
https://www.opennet.ru/opennews/art.shtml?num=60317
https://tim.siosm.fr/blog/2023/12/19/ssh-over-unix-socket/
"Использование SSH поверх UNIX-сокета вместо sudo для избавления от #suid-файлов"
Видимо, это не такое уж и безумие, раз пришло в голову не только мне?
(напомню, что я ровно в таком setup живу с самого первого boot в #stal/#ix, по модулю того, что так и не удосужился настроить UDS, вместо сетевого порта)
https://tim.siosm.fr/blog/2023/12/19/ssh-over-unix-socket/
"Использование SSH поверх UNIX-сокета вместо sudo для избавления от #suid-файлов"
Видимо, это не такое уж и безумие, раз пришло в голову не только мне?
(напомню, что я ровно в таком setup живу с самого первого boot в #stal/#ix, по модулю того, что так и не удосужился настроить UDS, вместо сетевого порта)
www.opennet.ru
Использование SSH поверх UNIX-сокета вместо sudo для избавления от suid-файлов
Тимоти Равье (Timothee Ravier) из компании Red Hat, мэйнтейнер проектов Fedora Silverblue и Fedora Kinoite, предложил способ ухода от применения утилиты sudo, использующей suid-бит для повышения привилегий. Вместо sudo для выполнения обычным пользователем…
👍12😁4👏3❤2
https://nickb.dev/blog/the-dark-side-of-inlining-and-monomorphization/ #perf
Зумеры, в очередной раз, переизобретают и переописывают то, что всем заинтересованным людям давно известно - чрезмерный inline-инг (современное его название - мономорфизация, но кому какое дело?) - не только полезно, но и очень вредно.
Статью я проглядел мельком, поэтому не знаю, был ли там озвучен самый главный вред от чрезмерного встраивания (загрязнение кешей для кода процессора, и, тем самым, замедление на реальных задачах (но не на бенчмарках)), поэтому озвучиваю его сейчас, да.
Зумеры, в очередной раз, переизобретают и переописывают то, что всем заинтересованным людям давно известно - чрезмерный inline-инг (современное его название - мономорфизация, но кому какое дело?) - не только полезно, но и очень вредно.
Статью я проглядел мельком, поэтому не знаю, был ли там озвучен самый главный вред от чрезмерного встраивания (загрязнение кешей для кода процессора, и, тем самым, замедление на реальных задачах (но не на бенчмарках)), поэтому озвучиваю его сейчас, да.
nickb.dev
The dark side of inlining and monomorphization
After introducing an incremental lexer that is generic over a Read instance, compilation times quadrupled and output size tripled. What happened? And is it possible to claw back without any downsides?
😁7🤮3🔥2
Forwarded from /g/‘s Tech Memes (ᅠ ᅠ)
This media is not supported in your browser
VIEW IN TELEGRAM
👍8❤5🔥3😁3🤮3