список проектов потенциально аффектнутых Log4j vulnerability и их статус:
https://github.com/NCSC-NL/log4shell/tree/main/software#a
https://github.com/NCSC-NL/log4shell/tree/main/software#a
GitHub
log4shell/software at main · NCSC-NL/log4shell
Operational information regarding the log4shell vulnerabilities in the Log4j logging library. - NCSC-NL/log4shell
Если кто-то ещё не устал от драмы с модераторами, то вот follow up
https://blog.rust-lang.org/inside-rust/2021/12/17/follow-up-on-the-moderation-issue.html
https://blog.rust-lang.org/inside-rust/2021/12/17/follow-up-on-the-moderation-issue.html
blog.rust-lang.org
Follow-up on the moderation issue | Inside Rust Blog
Want to follow along with Rust development? Curious how you might get involved? Take a look!
Полезная новость, в отличии от предыдущей, анансированна Tokio Console 0, для async дэбага
https://tokio.rs/blog/2021-12-announcing-tokio-console
https://tokio.rs/blog/2021-12-announcing-tokio-console
tokio.rs
Announcing Tokio Console 0.1 | Tokio - An asynchronous Rust runtime
Tokio is a runtime for writing reliable asynchronous applications with Rust. It provides async I/O, networking, scheduling, timers, and more.
Forwarded from opennet.ru
В Linux обеспечена работа 80% из 100 наиболее популярных в Steam игр https://opennet.ru/56390/
www.opennet.ru
В Linux обеспечена работа 80% из 100 наиболее популярных в Steam игр
По данным сервиса protondb.com, собирающего информацию о работоспособности в Linux игровых приложений, представленных в каталоге Steam, в настоящее время в Linux работоспособны 80% из 100 самых популярных игр. При рассмотрении 1000 наиболее популярных игр…
вот немножко рождественского настроения вам
https://github.com/AngelOnFira/rusty-christmas-tree
https://github.com/AngelOnFira/rusty-christmas-tree
GitHub
GitHub - AngelOnFira/rusty-christmas-tree: A LED Christmas Tree controlled by Rust. Contribute your own renderers!
A LED Christmas Tree controlled by Rust. Contribute your own renderers! - GitHub - AngelOnFira/rusty-christmas-tree: A LED Christmas Tree controlled by Rust. Contribute your own renderers!
свежий отчет Redmonk по языкам раскладывает
https://youtu.be/nh34MRmkvo0
https://youtu.be/nh34MRmkvo0
YouTube
Самые популярные языки программирования 2022
#soer #itubeteam
Основной канал для общения и публикации новых видео - Телегарм - https://t.me/softwareengineervlog
Спонсорство - https://donate.s0er.ru
Сайт платным контентом - https://soer.pro
Зеркало для видео Дзен Видео - https://zen.yandex.ru/i…
Основной канал для общения и публикации новых видео - Телегарм - https://t.me/softwareengineervlog
Спонсорство - https://donate.s0er.ru
Сайт платным контентом - https://soer.pro
Зеркало для видео Дзен Видео - https://zen.yandex.ru/i…
сам видос, как раз как интро для совсем не слышащих про раст, но подача инфы на канале, мое почтение
https://youtu.be/5C_HPTJg5ek
https://youtu.be/5C_HPTJg5ek
YouTube
Rust in 100 Seconds
Rust is a memory-safe compiled programming language for building high-performance systems. It has the simplicity of high-level languages (Go, Python), but the control of low-level languages (C, Cpp) https://github.com/fireship-io/rust-in-100
#programming…
#programming…
Forwarded from Experimental chill
Недавно задался вопросом, а где вообще почитать про процессоры и как они устроены. К сожалению, архитектура практически всех современных процессоров закрыта.
С одним небольшим исключением, которое мне скинули друзья из ARM. Это процессоры Exynos, которые делались для каких-то Samsung вплоть до S20. Это единственные продакшен процессоры, которые соревновались с Snapdragon и Apple A* на мобильных устройствах. Серверные процессоры скорее отличаются большими кешами, а вот branch predictions, pipelining достаточно похожи. Статья сложная, но хочу рассказать о ментальной моделе, которую я выучил.
Branch Predictor во всех процессорах это мелкие перцептроны (однослойные нейронные сети), которые собирают три-четыре объекта
GHIST (Global History) — хэш информации о том, как последние N бранчей были взяты или не взяты. В статье сказали, что в M1 модели было 160 бит, к 4 поколению 200
PHIST (Path History) — хэш нескольких бит адресов (со второго по четвёртый) последних бранчей, массив длины 80
PC (Program Counter) — хэш указателя на сам бранч
RAS (Return Address Stack, опционально) — хэш возвращаемого значения из функции
Два уровня для TAKEN и NOT-TAKEN бранчей (c некоторыми разделителями для always-, often-, rare-, always-not-), чтобы запоминать всю информацию выше. В итоге получилось 32kb на перцептрон, 280kb на таблицы.
Recovery buffer — когда происходит mispredict, инструкции, которые были уже загружены и операции, которые были выполнены, должны уйти из буффера. В M5 также появился совсем маленький буффер для миспредикта often-taken бранчей, который сокращает latency при миспредикте.
Тем не менее, большинство улучшений были от увеличения буфферов и для редких бинарей. Увеличиваешь буффер в два раза, получаешь на 0.01-0.1% меньше проблем.
С точки зрения кода расстановка бранчей практически никак не влияет на современных процессорах. Если бранч непредсказуем, будет какая-то latency, если предсказуем, процессор почти всегда поймёт. Есть патологические случаи:
Много горячих функций нельзя, скорее всего 8-10 бит берется из адреса, поэтому уже с 256 будут проблемы. Обычно так и не происходит.
Если много холодных блоков и прыжок далекий, то могут быть проблемы с фрагментацией памяти. Если вы собираете свой бинарь с Profile Guided Optimization (что я настоятельно рекомендую), то никаких проблем с бранчами не будет, ставить [[likely]] и [[unlikely]] тоже бесполезно. Не бесполезно, если вы собираете библиотеку. PGO также поможет компилятору понять, стоить ли векторизировать некоторые циклы
Поэтому проблема с бранчами в целом решена для процессоров, лучшее, что вы можете сделать — убирать эти бранчи.
Статья также описывает то, как работают L1, L2-3 кеши. Скажем, сейчас процессоры через другой перцептрон предсказывают паттерны и даже непростые как p+2, p+4, p+9, p+11, p+13, p+18 предскажут, что надо подгрузить в кэш p+20, p+22, p+27 (+2, +2, +5). В L2 кеше из интересного размер кэшлинии 64 байта, но при загрузке из кэша также подгружается соседняя линия.
В общем, статья безумно интересная. Мне как человеку, который занимается перфом, было полезно прочитать. Видимо, буду ещё разбираться месяц-два до конца.
Это более глобальная проблема, мало людей, которые понимают как устроено hardware, чтобы делать быстрее software. В какой-то степени в последнее время развиваюсь в этом направлении — а как я могу утилизировать лучше код, зная как вещи работают изнутри, а не просто экспериментировав. Спасибо, что есть люди, которые рассказывают про технологии как Exynos.
Потихоньку отвечаю себе на вопрос, а как мой компьютер работает.
[1] Пост danluu о branch prediction, прям с нуля с 90 годов. Нет сложных вещей
[2] Перцептронные branch predictions
[3] Эксперименты cloudflare с branch predictions в AMD и Apple M1 (тоже нулевой порог входа)
[4] Статья про процессоры Exynos
[5] LLVM Profile Guided Optimization
[6] Agner Fog x86 branch predictors — без новых процов
С одним небольшим исключением, которое мне скинули друзья из ARM. Это процессоры Exynos, которые делались для каких-то Samsung вплоть до S20. Это единственные продакшен процессоры, которые соревновались с Snapdragon и Apple A* на мобильных устройствах. Серверные процессоры скорее отличаются большими кешами, а вот branch predictions, pipelining достаточно похожи. Статья сложная, но хочу рассказать о ментальной моделе, которую я выучил.
Branch Predictor во всех процессорах это мелкие перцептроны (однослойные нейронные сети), которые собирают три-четыре объекта
GHIST (Global History) — хэш информации о том, как последние N бранчей были взяты или не взяты. В статье сказали, что в M1 модели было 160 бит, к 4 поколению 200
PHIST (Path History) — хэш нескольких бит адресов (со второго по четвёртый) последних бранчей, массив длины 80
PC (Program Counter) — хэш указателя на сам бранч
RAS (Return Address Stack, опционально) — хэш возвращаемого значения из функции
Два уровня для TAKEN и NOT-TAKEN бранчей (c некоторыми разделителями для always-, often-, rare-, always-not-), чтобы запоминать всю информацию выше. В итоге получилось 32kb на перцептрон, 280kb на таблицы.
Recovery buffer — когда происходит mispredict, инструкции, которые были уже загружены и операции, которые были выполнены, должны уйти из буффера. В M5 также появился совсем маленький буффер для миспредикта often-taken бранчей, который сокращает latency при миспредикте.
Тем не менее, большинство улучшений были от увеличения буфферов и для редких бинарей. Увеличиваешь буффер в два раза, получаешь на 0.01-0.1% меньше проблем.
С точки зрения кода расстановка бранчей практически никак не влияет на современных процессорах. Если бранч непредсказуем, будет какая-то latency, если предсказуем, процессор почти всегда поймёт. Есть патологические случаи:
Много горячих функций нельзя, скорее всего 8-10 бит берется из адреса, поэтому уже с 256 будут проблемы. Обычно так и не происходит.
Если много холодных блоков и прыжок далекий, то могут быть проблемы с фрагментацией памяти. Если вы собираете свой бинарь с Profile Guided Optimization (что я настоятельно рекомендую), то никаких проблем с бранчами не будет, ставить [[likely]] и [[unlikely]] тоже бесполезно. Не бесполезно, если вы собираете библиотеку. PGO также поможет компилятору понять, стоить ли векторизировать некоторые циклы
for (int i = 0; i < some_value; ++i) { ... }
И обычно компилятор векторизирует из-за незнания some_value, но профиль собирает эту информацию и в итоге лучше компилирует код.Поэтому проблема с бранчами в целом решена для процессоров, лучшее, что вы можете сделать — убирать эти бранчи.
Статья также описывает то, как работают L1, L2-3 кеши. Скажем, сейчас процессоры через другой перцептрон предсказывают паттерны и даже непростые как p+2, p+4, p+9, p+11, p+13, p+18 предскажут, что надо подгрузить в кэш p+20, p+22, p+27 (+2, +2, +5). В L2 кеше из интересного размер кэшлинии 64 байта, но при загрузке из кэша также подгружается соседняя линия.
В общем, статья безумно интересная. Мне как человеку, который занимается перфом, было полезно прочитать. Видимо, буду ещё разбираться месяц-два до конца.
Это более глобальная проблема, мало людей, которые понимают как устроено hardware, чтобы делать быстрее software. В какой-то степени в последнее время развиваюсь в этом направлении — а как я могу утилизировать лучше код, зная как вещи работают изнутри, а не просто экспериментировав. Спасибо, что есть люди, которые рассказывают про технологии как Exynos.
Потихоньку отвечаю себе на вопрос, а как мой компьютер работает.
[1] Пост danluu о branch prediction, прям с нуля с 90 годов. Нет сложных вещей
[2] Перцептронные branch predictions
[3] Эксперименты cloudflare с branch predictions в AMD и Apple M1 (тоже нулевой порог входа)
[4] Статья про процессоры Exynos
[5] LLVM Profile Guided Optimization
[6] Agner Fog x86 branch predictors — без новых процов
Forwarded from radio-t bot
⚠️ Best practices for writing code comments - https://stackoverflow.blog/2021/12/23/best-practices-for-writing-code-comments/
stackoverflow.blog
Best practices for writing code comments - Stack Overflow
отличная новость, 0.1 релиз low level OCI runtime на Раст - youki
https://www.utam0k.jp/en/blog/2021/12/27/youki_first_release/
https://www.utam0k.jp/en/blog/2021/12/27/youki_first_release/
utam0k
Hello, youki!
First release of youki, an OCI container runtime written in Rust
Forwarded from Полезняшки от "Разбора Полетов"
Amazon Introduces Re:Post, a “Stack Overflow” for AWS
https://t.me/iv?url=https://aws.amazon.com/blogs/aws/aws-repost-a-reimagined-qa-experience-for-the-aws-community/&rhash=ec6cb38db5870a
https://t.me/iv?url=https://aws.amazon.com/blogs/aws/aws-repost-a-reimagined-qa-experience-for-the-aws-community/&rhash=ec6cb38db5870a
Amazon Web Services
AWS re:Post – A Reimagined Q&A Experience for the AWS Community
The internet is an excellent resource for well-intentioned guidance and answers. However, it can sometimes be hard to tell if what you’re reading is, in fact, advice you should follow. Also, some users have a preference toward using a single, trusted online…