После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 6.18. Среди наиболее заметных изменений: dm-pcache для дискового кэширования в энергонезависимой памяти (PMEM), удаление Bcachefs, online-режим проверки XFS, драйверы Binder (Android IPC) и Tyr (GPU Mali) на Rust, возможность создания USB-драйверов на Rust, оптимизация кэширования в аллокаторе памяти SLUB, адресация пространств имён по файловым дескрипторам, ускорение работы подкачки (swap), верификация BPF-программ по цифровой подписи, виртуализация Intel CET в KVM, сетевой протокол PSP (гибрид TLS и IPsec), поддержка IP-расширения AccECN, оптимизация UDP-стека...Подробнее: https://www.opennet.me/opennews/art.shtml?num=64346
>оптимизация размещения структур данных в памятиRust так не может ведь? Или может? на С это запросто
Надо праздновать релиз свежего ядра, а не спорить кто что может! Накатим!
Ближайшие 20 лет из-за активного переписывания кода толку от линукса не будет. По сути Линус сделал откат в 90-е гг, когда было непонятно, что за инструмент лепится.
> на С это запростоНа си это надо делать вручную, потому что структуры в памяти лежат в таком же порядке как в коде описаны, а Rust это по дефолту сам оптимизирует для лучшего layout
> На си это надо делать вручнуюСказки-то не рассказывай. С тех пор как лэйаут стал влиять на производительность С делает это автоматом.
Добавить паддинг для выравнивания ≠ оптимизация.
>> На си это надо делать вручную
> Сказки-то не рассказывай. С тех пор как лэйаут стал влиять на производительность
> С делает это автоматом.C только выравнивание добавляет, и твоя задача как программиста сделать так, чтобы после добавления выравнивания структура не выросла слишком сильно, иногда такое надо делать по разному для разных архитектур, и отличие почти всегда только в порядке полей
Предположим
bool b
uint32_t b
bool c
uint32_t dЗаймёт 16 байт, потому что после каждого bool оно добавит 3 байта для выравнивания полей b, d до границ в 4 байта требуемых uint32_t, а
uint32_t a
uint32_t b
bool c
bool dВсего 10, потому что a, b уже выровнены
Rust тоже добавляет выравнивание, однако оптимальный порядок полей определяет сам.
В каких-то очень больших структурах конечно в теории этот порядок может быть не лучшим для кеша, однако это редкость, и в большинстве случаев Rust делает всё правильно.
В этом и проблема - для СИСТЕМНОГО ПО категорически нельзя допускать любых "сам оптимизирует", ибо если завтра добавят модуль на Си с другим лэйаутом (как в коде), растовая "оптимизация" сразу же фэйлит.
Поддерживаю. Самооптимизации вполне себе могут медленно работать, наблюдал такое.
В раст эта оптимизация включается/выключается прямо из кода с помощью директив. Причем для одних структур ее можно включить, а для других выключить.
> В этом и проблема - для СИСТЕМНОГО ПО категорически нельзя допускать любых
> "сам оптимизирует", ибо если завтра добавят модуль на Си с другим
> лэйаутом (как в коде), растовая "оптимизация" сразу же фэйлит.Если структуру нужно шарить с C - то её можно явно пометить #[repr(C)], и тогда её layout будет совпадать между Rust и C
Что однако не мешает использовать в Rust коде свои, оптимизированные структуры
Вообще, Си, и не только он, могут оптимизировать структуры.
Но это не всегда уместно, когда то они должны располагаться в памяти жестко.
Поля тоже можно перетасовать, но подобное еще менее вероятно что понадобится.Допустим, перетасовало поля структуры "для лучшего layout"...
А а куда, кроме как в мусорную корзину, можно передать такую структуру, неизвестного формата, не соответствующую ни исходнику, ни документации? :)
А в OS большинство структур передаются из компонента в компонент, или на сторону пользователя.
> Допустим, перетасовало поля структуры "для лучшего layout"...
> А а куда, кроме как в мусорную корзину, можно передать такую структуру,
> неизвестного формата, не соответствующую ни исходнику, ни документации? :)
> А в OS большинство структур передаются из компонента в компонент, или на
> сторону пользователя.Если тебе важен layout для передачи кому-то ещё - укажи это явно, #[repr(C)], и тогда layout структуры в Rust будет совпадать с аналогичным описанием на языке C.
Однако это совсем не важно для внутренних структур, и структур которые шарятся только с Rust кодом
> структуры в памяти лежат в таком же порядке как в коде описаныДавно не правда. Даже в паскале есть reordered.
Да просто пишите вы уже на языке каком хотите, а не топите за него, троллота.
Пофиг о чем речь ц или раст.
Ваша проблема в том, что вы концентрируетесь на вопросах, а надо на ответах.
>Из ядра удалён код файловой системы BcachefsГлючная ^W эспериментальная ФС по дефолту теперь насквозь редхатовская btrfs. Её не выкинут. Даже если разработчик будет хоть сам чёрт во плоти.
Редхат-то как раз, вроде бы, ее уже выкинул.
17 становится LTS же?
12+6=17?
так, а какого фига proxmox на 17 переехал?
Помню тут пару дней назад в комментах радостно рассказывали, что раст уже забросили в ядре, мейнтейнеры ушли и прочее.
Не имеет значения, когда именно ржу выбросят. Просто сам факт мёртворождённого изычка не даёт ему никаких шансов. Как только гугля решит оптимизировать дармоедов, ВНЕЗАПНО окажется, что "раст оказался непригоден" и далее шлейф обещаний что завтра будет лучше, чем вчера, но деньги, про_с_раные на ржу, никто уже не вернёт.
Вот это уровень копиума.
"Этот драйвер не имел стратегического значения"
> В NTFS3 добавленаЭтот тот что от Paragon? Кто владеет вопросом, подскажите, что происходит с этим драйвером. Есть ещё NTFSPLUS если не ошибаюсь
Да, от Paragon. У меня работает, не ловил корраптов, но репорты от других пользователей были. Второй вариант ntfs-3g через FUSE, сильно медленнее.
Ржавеет по-тихоньку.А что для конечного пользователям может пригодиться?
Возможно драйвера?
> драйвера Nova для GPU NVIDIA.
> драйвер TyrДумаю без них для "конечного пользователя" будет весьма грустно.
> реализация Binder, написанная на языке Rust.
А это сотни миллионов пользователей.
Проясните плз про boot_display, с целью повышения уровня образованности. Не понятно, в каком формате его указывать?
>> Добавлена поддержка ARM-плат, SoC и устройств:а где RISC-V ? (((
Зачем оно вам? Там все равно без блоблов не взлетит.
блобов бояться - в лес не ходить.
Ядро - это в принципе независимый проект, в нём не может быть "возможность писать на раст", как и "возможность похапэшных вставок" - это просто глупо и узконаправлено. Либо ты можешь писать для ядра (Си, Ди, ассемблер), либо ты идёшь в сад писать опердни - в ядре тебе делать нечего.
> Либо ты можешь писать для ядра (Си, Ди, ассемблер),Ога, на Ди, на с++)))
Ты просто пишешь для ядра на расте, а те кому не нравится, спорят с Торвальдсом и потом или закрывают варешку, или идут в сад писать опердни - в ядре таким делать нечего.
> PSP (гибрид TLS и IPsec)А это как?
> В состав принята реализация механизма межпроцессного взаимодействия Binder, написанная на языке Rust. Binder используется в Android для организации взаимодействия между процессами и удалённого вызова методов (один процесс Android может вызвать метод или функцию в другом процессе Android, используя Binder для идентификации, вызова и передачи аргументов между процессами). Код Binder был переписан на языке Rust в рамках инициативы Google по усилению защищённости Android.Собака лает, караван идёт.
Самокритичненько
Где то во второй декаде декабря Фряха 15 зарелизится,вот это полезная новость. Тут же сплошной бета тест. Версия 6.12-6.14 максимум в серьезных дистрах и те для фанатиков не различающмх что такое хорошо и плохо.
Какой второй декаде? Релиз завтра.
Серьезно?Норм,а то помню читал вроде как 21 декабря.
21 декабря это уже как бы третья декада.
> Фряха 15 зарелизится,вот это полезная новость.Как у тебя в одном предложении сочитаются "фряха" и "полезность"?!
ФРЯ это бесполезная поделка нудность которой можно оценить по ее распространености.
>> Началась работа по реорганизации излишне раздутой структуры "page", используемой для управления страницами оперативной памяти. Добавлен тип 'memdesc_flags_t"Как-то противоречиво звучит
Кто разбирается в BPF? Оно заметно замедляет работу ядра?
scx_bpfland поставь, да проверю. Спойлер: ОС станет более отзывчивой.
> В ksmbd (работающий на уровне ядра SMB-сервер) добавлен параметр для ограничения максимального числа соединений с одного IP-адреса. smbdirect, smbclient и smbserver переведены на использование типовых структур ядра.Всегда было интересно, а вот это вот вообще зачем в ядре? Почему именно SMB, а не SSH, например?..
Выглядит как идеальный вектор атаки.
nfs тоже в ядре, это тебе не интересно почему ?!
> В состав принята реализация Binder, написанная на языке Rust.
> Продолжена интеграция компонентов драйвера Nova для GPU NVIDIA.
> В состав ядра принят драйвер Tyr, написанный на языке RustХехе, а ведь неплохо получается))
Ждем набега хейтерочков с завываниями "пачиму растаманы не сделают свое ядро! зачим вы портите НАШ линyкc?!" Так вот, он нифига не ваш))
Лучше начинайте рассказывать про то, что язык мертворожденный, что драйвера экспериментальные, что это опциональная зависимость, что вот-вот и его удалят из ядра (на удаляют почему-то Bcachefs).
Я обожаю слушать такой копиум! Это как про вейланд, только еще веселее))
> В выпуске 6.18 обновлён код чистки blob-ов в драйверах Nova-Core, Intel XE, TI PRUeth, Lantiq GSWIP, Marvell WiFi-Ex. Выполнена чистка имён blob-ов в dts-файлах (devicetree) для ARM-чипов Qualcomm, Mediatek и TI ARM64. Нейтрализована загрузка blob-ов в новых драйверах FourSemi fs2104/5s, TI TAS2783 и Qualcomm GENI.Офигеть...
А оно хоть как-то запускается после такого?
Или "нам главное чистота крови", а работает или нет - это значения не имеет?
Как-то же они в интернет запостили это, должно быть что-то да работает.