https://anssi-fr.github.io/rust-guide/01_introduction.html небольшой гайд по секьюрному #rust. тут про библиотеки что помогают искать проблемы, утечки памяти, систему типов и ffi
anssi-fr.github.io
Introduction - Secure Rust Guidelines
Recommendations for secure applications development with Rust
https://medium.com/@pailee.wai/how-we-migrate-our-framework-into-async-await-c67b160e16be немного про миграцию старых фьюч на async/await в #rust
Medium
How we migrate our framework into async/await
The logs of async/await migration in Obsidian-rs
https://doc.rust-lang.org/edition-guide/rust-2018/module-system/path-clarity.html чтото мимо меня промчался тот факт что больше в #rust не нужен mod.rs в каждой субдериктории
https://rust-lang.github.io/async-book/01_getting_started/01_chapter.html видел эту книгу, забыл про то что она есть. И как оказалось некоторые сложности с асинхронщиной в #rust, что я героически решил, в ней хорошо описаны 🙈
интересные результаты переписывания блокируюещго раста на async/await. хочу поделиться
дано:
16к строк кода в блокирующем многопоточном виде. хороший nvme SSD, гигобитная сеть, 24поточный Xeon 2678 в 3.3ГГц на ядро.
результат:
выигрыш отрицательный.
было 4.2сек сейчас 4.9сек. это проход 2000 файлов и пересчет параметров. жестко (для меня это большие цифры, если что). большее количество файлов имеет тот же эффект. поэтому обычно проверяю на этих 2к файлов с десяток раз, для правдоподобности, разброс малый очень
большую часть io задач у меня приходится на чтение с диска (цпу зубодробилку смысла нет на async/await переписывать). и когда куплен оч хороший nvme SSD то вообще оказывается в забрать в 24 потока блокирующе в буфер весь файлик быстрей. (фс настроена без лога времени доступа и тп, полностью под скорость) И возможно это уже приколы того как работает железо, шина и nvme, тут я уже теряюсь, может вы подскажете
сами файлики редко больше 30мб, там числовые данные, предобработанные и лежат сразу в бинарном виде что бы просто загрузить в память, нетратя лишний раз цпу. поэтому влияние самих файлов не особо заметно. заметно то что код пришлось менять так что бы оно того поддерживало, без блокирующих штук. и видимо таки есть оверхэд константный, пересчет обычно тратит все ядра на 100% и оно не троттлит, проверял
но вот для слабых систем уже чувствуется что не просело, а даже иногда выигрывает. чем хуже винт тем заметней
и получается что даже учтя все возможные проблемы, и убрав все что могло быть блокирующим в io задачах - прироста не дало
неожиданные результаты для меня тем, что и вроде как круто что железо хорошее, но вот вопрос стоили ли мои две недели переписывания того или нет. если хороший nvme SSD Samsung 970 EVO Plus стоит всего 100$ (понятное дело можно найти и дешевле), и мне нужно заменить на 10тачках, то я попал в просак...
с другой стороны это мои первые потуги в стабильном асинхронном расте. Может кто работал с ним уже ? я вот 100% уверен что чтото упустил, и можно дотюнить.
дано:
16к строк кода в блокирующем многопоточном виде. хороший nvme SSD, гигобитная сеть, 24поточный Xeon 2678 в 3.3ГГц на ядро.
результат:
выигрыш отрицательный.
было 4.2сек сейчас 4.9сек. это проход 2000 файлов и пересчет параметров. жестко (для меня это большие цифры, если что). большее количество файлов имеет тот же эффект. поэтому обычно проверяю на этих 2к файлов с десяток раз, для правдоподобности, разброс малый очень
большую часть io задач у меня приходится на чтение с диска (цпу зубодробилку смысла нет на async/await переписывать). и когда куплен оч хороший nvme SSD то вообще оказывается в забрать в 24 потока блокирующе в буфер весь файлик быстрей. (фс настроена без лога времени доступа и тп, полностью под скорость) И возможно это уже приколы того как работает железо, шина и nvme, тут я уже теряюсь, может вы подскажете
сами файлики редко больше 30мб, там числовые данные, предобработанные и лежат сразу в бинарном виде что бы просто загрузить в память, нетратя лишний раз цпу. поэтому влияние самих файлов не особо заметно. заметно то что код пришлось менять так что бы оно того поддерживало, без блокирующих штук. и видимо таки есть оверхэд константный, пересчет обычно тратит все ядра на 100% и оно не троттлит, проверял
но вот для слабых систем уже чувствуется что не просело, а даже иногда выигрывает. чем хуже винт тем заметней
и получается что даже учтя все возможные проблемы, и убрав все что могло быть блокирующим в io задачах - прироста не дало
неожиданные результаты для меня тем, что и вроде как круто что железо хорошее, но вот вопрос стоили ли мои две недели переписывания того или нет. если хороший nvme SSD Samsung 970 EVO Plus стоит всего 100$ (понятное дело можно найти и дешевле), и мне нужно заменить на 10тачках, то я попал в просак...
с другой стороны это мои первые потуги в стабильном асинхронном расте. Может кто работал с ним уже ? я вот 100% уверен что чтото упустил, и можно дотюнить.
короче это был кэш)). скатина блин. вылетело из головы что он в кернеле есть и если файлы загружать понятным образом, то кернел сам сохраняет в памяти, так как файлы небольшие
кэш подтягивается системой почти предиктивно, он не забивает всю память и не забирает все файлы, всеравно диск так или иначе меряется. но уже асинхронщина не дает прелестей, так как кернел загрузил в память мгновенно. и уже оттуда читает буфером, что впрочем может равнятся тупому реюзанию скопированной памяти
https://k6.io/ тула что бы деть стресс и нагрузочные тесты апишек. надо не забыть, явно пригодится скоро.
скриптом можно сэмулировать любые перепады трафика и отхэндлить любые косяки разными способами (счетчиками, рейтами и т.п.)
скриптом можно сэмулировать любые перепады трафика и отхэндлить любые косяки разными способами (счетчиками, рейтами и т.п.)
k6.io
Load testing for engineering teams | Grafana k6
k6 is an open-source tool and cloud service that makes load testing easy for developers and QA engineers.
https://engineering.mongodb.com/post/getting-storage-engines-ready-for-fast-storage-devices статья очень мне в тему сейчас. про
Memory-mapped files для ускорения работы с дискомMongoDB
MongoDB Engineering Blog | MongoDB Blog
MongoDB's blog includes technical tutorials, MongoDB best practices, customer stories, and industry news related to the leading non-relational database.
https://www.youtube.com/watch?v=8cV4ZvHXQL4 забавный оч старый но хороший доклад про то как работает eventloop в #js не видел перевода до сегодня
https://www.youtube.com/watch?v=K_wnB9ibCMg&feature=youtu.be помимо токио есть еще вогон проектов. забавны ее невыспавшиеся круги вокруг глаз, как у меня. вот до чего доводит #rust
YouTube
An Async Story. Katharina Fey
Katharina lives in Berlin and works as a software engineer at Ferrous Systems. She’s been writing Rust actively since 2017, is author of many crates and is an active community member. Currently she’s part of the CLI working group, the community team, and…
обратил внимание то что пол проекта в многопоточностях и конкуренции, и это совершенно не имеет никакой боли в поддержке, вообще стало обычным делом при работе с #rust
к слову о том что в плюсах очень много разных реализаций String в #rust тоже
но то что я нашел - оно в основном под нужды конкретных кодировок например под ASCII https://lib.rs/crates/tinystr
https://lib.rs/crates/smol_str
перформанс этого значительно выше, конечно же, иначе небыло бы смысла делать такие пакеты
но то что я нашел - оно в основном под нужды конкретных кодировок например под ASCII https://lib.rs/crates/tinystr
https://lib.rs/crates/smol_str
перформанс этого значительно выше, конечно же, иначе небыло бы смысла делать такие пакеты
Lib.rs
TinyStr — data structures in Rust
A small ASCII-only bounded length string representation
забавный вариант описания как кидать ошибку в #rust с помощью макроса
https://docs.rs/fehler/1.0.0/fehler/index.html
throws https://boats.gitlab.io/blog/post/failure-to-fehler/ https://docs.rs/fehler/1.0.0/fehler/index.html
withoutblogs
From failure to Fehler
About two and a half years ago I wrote a Rust library called failure, which quickly became one of the most popular error handling libraries in Rust. This week, its current maintainer decided to …
https://www.rustsim.org/ вот про это бы не забыть через пару месяцев. стопроцентов надо будет вернуться к моделированию и есть желание потискать #rust в этом направлении а не только питон
https://shahinrostami.com/posts/programming/rust-notebooks/denoscriptive-statistics-with-ndarray/ и NDArray тоже есть. збз
https://shahinrostami.com/posts/programming/rust-notebooks/denoscriptive-statistics-with-ndarray/ и NDArray тоже есть. збз
www.rustsim.org
The rustsim organization · Rust crates for numerical simulation.
https://stjepang.github.io/2019/12/04/blocking-inside-async-code.html эх где же ты была раньше, статья, а ? Я вже сломал копья, а тут все красиво и понятно про то как в асинхронный код на #rust вставить блокирующий код правильно.
https://stjepang.github.io/2020/04/03/why-im-building-a-new-async-runtime.html многообещающая скорость нового рантайма для асинков в #rust. Автор много хорошего уже напилил. ждемс
https://users.rust-lang.org/t/sync-async-best-practices/36869 еще тредик обсуждения на тему синхронного в асинхронном в #rust
The Rust Programming Language Forum
Sync/Async best practices
Hello folks, I want to implement a crate for some external api. Right now I am deciding how to combine sync and async clients in the single crate with following to DRY principle. Are there any best practices? I want to avoid re-implementing the same things…
нашел еще пару мест в проекте, где было не асинхронные вызовы. поправил. с ходу сразу 10% прироста в скорости. приятно. блокировки были
http://zsiciarz.github.io/24daysofrust/index.html хороший практический туториал по #rust
zsiciarz.github.io
Introduction | 24 days of Rust
Build StatusBuild status