Компания Netflix представила утилиту bpftop, предоставляющую интерфейс для мониторинга за выполнением eBPF-программ в ядре Linux, реализованный в стиле утилиты top. Утилита показывает показатели производительности, нагрузки на CPU и обработки событий для каждой eBPF-программы. Поддерживается построение графиков для оценки динамики изменения характеристик выполнения во времени. Код bpftop написан на языке Rust и распространяется под лицензией Apache 2.0...Подробнее: https://www.opennet.dev/opennews/art.shtml?num=60676
У них же серваки на bsd как нам много лет писали в комментах
вроде остались только узлы CDN остальное на linux
> вроде остались только узлы CDN остальное на linuxО, опять срач намечается ...
Ты хотел сказать, "узлы, обеспечивающие 15% мирового сетевого траффика - на замшелой бзде, а вот зато все остальное!"
А остальные 85% трафика на чём?
У них действительно есть серваки на FreeBSD, прямо настоящие, в стойках, в разных ДЦ по миру, и выполняющие одну-единственную функцию: взять байты с диска и как можно быстрее положить их в сетевой сокет. Оказалось, что для этого FreeBSD очень даже пригодна. А вот бизнес-логика и всё необходимое, чтобы знать какие именно байты кому отдавать, это уже на линуксах в клауде, как у всех нормальных людей. Слухи ходят, что с появлением в ядре линукса rust, io uring и eBPF FreeBSD могут выкинуть, но пока что таких подвижек не было, а слухам верят только на базаре.
> Слухи ходят, что с появлением в ядре линукса rust, io uring и eBPF FreeBSD могут выкинуть, но пока что таких подвижек не было, а слухам верят только на базаре.Ну это не слухи, с eBPF и XDP последние преимущества сетевого стека freebsd тупо пропали, да. Будут ли переписывать или нет - вопрос времени.
Это именно что слухи. Официальных и неофициальных заявлений не было.
А какие там были преимущества у сетевого стека? Разве что Netgraph, но это про гибкость, а не про скорость.
Никаких не было. Они там разве не переписывали куски под свои проприетарные нужды? Т.е. никакого отношения к обычной фряхе и не имеет тот код.
> Никаких не было. Они там разве не переписывали куски под свои проприетарные нужды?Для SaaS, GPLv2 как бэ, точно так же позволяет "переписывать куски под свои проприетарные нужды"
Гугл так и поступает. Возможно, тут дело в том, что линукс намного сложнее и значительно дороже в сопровождении (синхронизация с апстримом) и не каждый может себе это позволить. Я много раз слышал этот аргумент от основных потребителей фряхи.
один из авторов этого вот CDN от Netflix на Фряхе, где-то писал что ему в том числе было проще работать с ядром Фряхи [для допилки дров] и коммунити во Фряхе.
А разве у Linux сетевой стек хуже/менее производительнее чем у BSD? Я слыхал, у них там с многопоточностью проблемы. (Я ничего не утверждаю, просто хочу знать почему так).
Выходит что хуже, если для того чтобы сравняться с фряхой нужны дикие костыли в виде eBPF(просто вдумайтесь - в нулевом кольце выполняется прикладной код) и io uring. На фре ведь они обходятся без этого всего
На фре оно без eBPF запрогано сразу патчем к ядру.
Ну не было бы eBPF, были бы соотвествующие под решаемую проблему модули ядра. Всё равно, выпонялся бы код, только сразу машинный. А раз код для выполнения в ядре, то нефиг позволять никому, кроме рута, его туда вгружать.
Там нет никакой многопоточности в том виде, в каком у неё проблемы. Задача I/O bound. У фряхи ядро значительно примитивнее, чем линуксовое, а потому проще поддаётся модификации. Напомню, что когда нетфликс выбирал фряху, в линуксе не было адекватных подсистем для их задач, а у команды был опыт эксплуатации и, главное, модификации фряхи. Сегодня аыбор мог бы быть (или не быть) иным.
Много лет был хуже. С тех пор линуксовую сеть уже 2 раза переписали почти целиком. Сейчас разница маленькая. Просто в случае с Netflix нет смысла мигрировать, у них уже есть экспертиза по фраяхе. С нуля бы и они Linux взяли.
> с появлением в ядре линукса rust, io uring и eBPFЭто всё никакого отношения к use cases в которых работает у них фря не имеет.
Растаманы как всегда в своём репертуаре, дофига ненужных зависимостей
>wasiЭто линуксовая программа для выполнения от рута, какой к чёрту WASI?
>winapi, winapi-i686-pc-windows-gnu, winapi-x86_64-pc-windows-gnu
>windows-sys, windows-targets, windows_aarch64_gnullvm, windows_aarch64_msvc, windows_i686_gnu, windows_i686_msvc, windows_x86_64_gnu, windows_x86_64_gnullvm, windows_x86_64_msvcМало того, что программа для линукса зачем то требует виндовые зависимости, так ещё и все сразу, и почему-то в виде пакетов. Растаманы в своём репертуаре, не могут определиться, под какую целевую платформу они собирают, и поэтому тащат всё в виде мусорных пакетов
Хм... луди делают для себя, под свои задачи.
С чего ты взял что эти зависимости не нужны?Пользоваться или нет - это твое право.
Но можешь показать мастеркласс и переписать на правильный язык с правильными зависимостями))
Да, под свои задачи. Как Гугл — Базель под свои задачи сделал. И систему сборки Android, и Tensorflow. И нам теперь всем этим дерьмом приходится пользоваться. Как и bpftopом. Вместо
> нам теперь всем этим дерьмом приходится пользоватьсяКто-то заставляет? Не пользуйся раз не нравится. Как будто кроме гугла нигде больше софт разрабатывать не умеют.
>Как будто кроме гугла нигде больше оплачивать разработку бесплатного софта не умеют.Умеют, но почему-то всегда получается блоатварь, выгодная исключительно корпорации и её партнёрам.
>bitflags (2 версии)
>Generate types for C-style flags with ergonomic APIs.
>const A = 0b00000001;
>ergononic API/0
>compact_str
>A memory efficient string type that can store up to 24* bytes on the stack.В Расте даже базовых вещей нет.
>itoa
>fast conversion of integer primitives to decimal stringsПохоже на велосипед.
>memoffset
>A crate used for calculating offsets of struct members and their spans.
>This functionality currently can not be used in compile time code such as const or const fn definitions.Bullshit bingo. Мало того, что не в стандартной библиотеке, так ещё и в рантайме считает.
>static_assertions
>Assertions to ensure correct assumptions about constants, types, and more.То, что в C++ — в стандартной библиотеке. Хорошо хоть, что тут ещё смогли в compile time.
>rustversion
>This crate provides macros for conditional compilation according to rustc compiler version, analogous to #[cfg(...)] and #[cfg_attr(...)].Даже чтобы версию самого раста проверить, нужен дополнительный пакет!
>version_check
>This tiny crate checks that the running or installed rustc meets some version requirements. The version is queried by calling the Rust compiler with --version. The path to the compiler is determined first via the RUSTC environment variable. If it is not set, then rustc is used. If that fails, no determination is made, and calls return None.Ещё один пакет для проверки версии раста, на этот раз путём вызова бинарника. Да, любой пакет изтгигантского дерева зависимостей при компиляции может делать с вашей маоиной что ему угодно, хочет — профиль затереть, хочет - пароли спереть, хочет — с вашего компа кибератаки совершать, хочет — 0day заюзать и поруткитить всю сборочную инфраструктуру, а с прогами, собранными на ней — и весь мир. Это вам не сишка.
>stability
>This crate provides attribute macros for specifying API stability of public API items of a crate.
>The Rust standard library has a concept of API stability and custom attributes for managing that on a per-item basis, but most of these attributes are not available for normal crates to use, with the exception of the #[deprecated] attribute.
>Currently, only the #[unstable] attribute is available. Please see the documentation of that macro for an explanation on what it does and how to use it.То есть
1. ничего принципиально нового не предоставляют, лишь овторяют то, что и так предоставляет стандартная библиотека
2. но обязательно нужна сторонняя зависимость — потенциальный бэкдор
>either
>The enum Either with variants Left and Right is a general purpose sum type with two cases.То есть std::pair<std::optional<LeftT>, std::optional<RightT>. Из-за этого целый пакет городить? Они долбанулись.
>num_enum
>Procedural macros to make inter-operation between primitives and enums easierВот что бывает, когда при дизайне языка в него вкладывают неадекватные догмы, руководствуясь NIH-синдромом, вместо клонирования удачных фич других языков.
>num_cpus
>get Returns the number of available CPUs of the current system.аналог std::thread::hardware_concurrency
>get_physical Returns the number of physical cores of the current system.
аналогов нет, жуткие костыли на каждую платформу. Кажется было что-то в pthreads.
>equivalentне понимаю, что это и зачем, но по-видимому это должно быть частью стандартной библиотеки
>anyhow
>This library provides anyhow::Error, a trait object based error type for easy idiomatic error handling in Rust applicationsпо-видимому тоже должно быть частью стандартной библиотеки
>cfg_if
>A macro for defining #[cfg] if-else statements.Должно быть частью стандартной библиотеки.
>cfg_aliases
>You use the the cfg_aliases! macro in your build.rs script to define aliases such as x11 that could then be used in the cfg attribute or macro for conditional compilation:Связка функциональности с целевой платформой должна делаться не в макросах, а в Cargo.toml
>castawayЗамена static_cast видимо.
>cassowary
Либа для линейного программировения. Зачем она этой утилите?
cassowary - это для ui layout - для вычисления позиции виджетов с учётом их вложенности и ограничений
>allocator-api2Выделение памяти. Должно уже быть в стандартной библиотеке.
>hermit-abi
>hermit-abi is small interface to call functions from the Hermit unikernel.Вы уж определитесь, под какую платформу собираете.
>pkg-config
Поиск зависимостей через pkg-config. Должен быть частью Cargo, а не отдельным пакетом с кастомными програмами. выполняющимися во время сборки.
>zerocopy
>FromZeroes indicates that a sequence of zero bytes represents a valid instance of a typeаналог конструктора в C++
>FromBytes indicates that a type may safely be converted from an arbitrary byte sequence
>AsBytes indicates that a type may safely be converted to a byte sequencestd::bit_cast
>Unaligned indicates that a type’s alignment requirement is 1
Зачем это, это по-умолчанию должно идти.
Ну и прочие фичи C++ вроде move semantics.
>itertoolsstd::ranges + rangesv3
>unicode-ident, unicode-segmentation, unicode-widthНафигатсистемной утилите с английской локализацией вся эта возня с юникодом? Я понимаю, что имена процессов можно повесить любые, но это уже ССЗБ и должно быть explicitly out of scope.
>heck
>This library exists to provide case conversion between common cases like CamelCase and snake_case. It is intended to be unicode aware, internally consistent, and reasonably well performing.Зачем эта функциональность в этой утилите?!
>crossterm_winapiПрограмма не для винды, какой winapi?!
>strumВроде-бы легитимно, аналог magic_enum и nameof, но это должно быть в стандартной библиотеке.
>strum_macros (2 версии)
Почему требуются 2 версии?!
>hashbrownВелосипедный аналог контейнера стандартной библиотеки.
>once_cell
std::unique_ptr
>scopeguardЛишь бы C++ с его try-catch-finaly не использовать!
>thiserror, thiserror-impl
>This library provides a convenient derive macro for the standard library’s std::error::Error trait.Очередной костыльный обход недоделок ядра языка и его стандартной библиотеки.
>indoc
>This crate provides a procedural macro for indented string literals.Должно быть частью ядра языка и без каких-либо извращений.
>ryu
>Pure Rust implementation of Ryū, an algorithm to quickly convert floating point numbers to decimal strings.Это работа стандартной библиотеки, и детали реализации алгоритма конвертации вообще не должны волновать программиста, которому либу как чёрный ящик предоставили.
>lazy_static
>A macro for declaring lazily evaluated statics.
>Using this macro, it is possible to have statics that require code to be executed at runtime in order to be initialized.В C++ - из коробки. Лишь бы на нормальном языке не писать.
>memchr
>This library provides heavily optimized routines for string search primitives.Должно быть в стандартной библиотеке.
>parking_lot parking_lot_core
>This library provides implementations of Mutex, RwLock, Condvar and Once that are smaller, faster and more flexible than those in the Rust standard library. It also provides a ReentrantMutex type.Очередные велосипеды, от которых зависит большаятчасть пакетов в crates.io, но которые почему-то не были проаудированны и не заменили реализации из стандартной библиотеки.
>proc-macro2Либа с крайне сомнительной ценностью и отсутствующим обоснованием нужности, кроме "от нас зависят те либы, хотите их – придётся терпеть и нас". В прочем подобное обоснование ко всему расту применимо, только либы заменить на проги.
>proc_macro_crateинтроспекция зависимостей в Cargo.toml во время компиляции. Не вижу ни одного легитимного применения.
>redox_syscallОтсутствует нормальная документация = вообще не понятно, для черо нужен.
Это аналог winapi для операционной системы redox.Видимо, качается для единственной операции: "проверить, что компилируемся не для redox".
>quoteпредназначен для обфускации.
>mioОчередная велосипедная библиотека асинхронного ввода-вывода.
>signal-hook
обработка сигналов, должна быть частью станд. библиотеки
>signal-hook-mio
интеграция с mio, должна быть частью самого mio
>signal-hook-registry
слой абстракции над signal-hook, из-за того что signal-hook не имеет стабильного API, как и почти все растоманские либы, и поэтому приходится делать слои абстракции
>vsprintfконвентация сишной форматной строки в растовую, легитимно если программа использует сишные форматные строки где-нибудь в конфиге. Но IMHO использовать сишные форматные строки не по назначению - это жуткий изврат.
>indexmap
Упорядоченные множества и отображения в порядке вставки, должны быть частью станд. библиотеки.
>smallvecМассивы на стеке. Должно быть частью языка и стандартной библиотеки.
>lock_api
>This library provides type-safe and fully-featured Mutex and RwLock types which wrap a simple raw mutex or rwlock type. This has several benefits: not only does it eliminate a large portion of the work in implementing custom lock types, it also allows users to write code which is generic with regards to different lock implementations.Судя по описанию — очередные костыли из-за угрёбищности станд. библиотеки.
>autocfg
>A Rust library for build scripts to automatically configure code based on compiler support. Code snippets are dynamically tested to see if the rustc will accept them, rather than hard-coding specific version support.Должно быть частью cargo, а не внешним пакетом, который приделан сбоку и пересобирается.
>pasteЛиба для какой-то чёрной магии на макросах.
>syn (2 версии)
Парсер Rustового кода в AST в виде макроса.
>logСлой абстракции, абстрактный интерфейс. Должен быть частью стандартной библиотеки.
>libc
ffi-биндинги к glibc. должны быть частью станд. библиотеки.
>ccКомпиляция сишного кода и статическая линковка его к остальной части либы на расте. Зачем писать на расте, если всё равно пишете на C? И опять же: выполнение произвольных команд при сборке пакета должно быть абсолютно запрещено.
Может быть легитимно
>ahash - хэш-функция
>circular-buffer
>libbpf-rs
>libbpf-sys
>toml_datetime, toml_editесли они конфиги программы в TOML хранят
>winnowкомбинатор парсеров, нужен для редактора TOML.
>crosstermдля вывода текста с контрольными кодами
>ratatuiаналог libcurses
>lruLRU-кэш
>nix (2 версии)
>Rust friendly bindings to the various *nix system functions.Зачем нужно — понятно. Но нахрена 2 версии?
Опять же: всё это дерьмо статически слинковано, отсюда жор памяти и места и прочих ресурсов. И проблемы с обновлениями. Netflix безусловно виноваты в недостатках Rust и её экосистемы — ведь это Netflix выбрала их в качестве основы для своего продукта.