#рецензии
Ультракороткие рецензии на тoп инженерных находок 2020го года от @Danlark, которых не было в блоге. Часть 2.
6. New Linux Slab Allocator
Slab аллокатор в системе Linux заточен на то, чтобы переиспользовать выделенную память для часто встречающихся структур данных и вообще контролировать большинство аллокаций в самом ядре. Роман Гущин из Facebook нашёл большую проблему в том, что аллокации не переиспользуются между различными cgroup. Инженеры из Google нашли неоптимальный O(n^2) алгоритм для освобождения памяти при загруженной машины в shrink_slab. Большой лист из 47 патчей был принят в Linux 5.9, который ведёт к 45% лучшей утилизации, петабайтам сэкономленной оперативной памяти и миллионам ядер в Facebook и Google.
7. unfork(2)
С первого взгляда не самый примечательный репозиторий, но он предлагает user space функциональность по слиянию адресных пространств двух процессов в одно. Работает через свежедобавленные системные вызовы ядра как userfaultfd(2), который помогает лениво, только при pagefault, обрабатывать такие изменения. Надеюсь, мы увидим больше таких решений, например, в оптимизациях памяти в Chromium и базах данных.
8. io_uring
После долгих лет споров с Линусом по поводу того, как должен выглядеть асинхронный интерфейс работы с IO, наконец-то был достигнут консенсус и стабилизировался io_uring. Этот вызов вам позволит асинхронно задавать сразу много запросов к устройству, выжимая максимум из вашего железа. Бенчмарки при сильно загруженных дисках по сравнению со старым io_submit, показывают улучшение на 3-6%, но самое главное, что теперь интерфейс максимально удобен и каноничен.
9. rseq в TCMalloc
Мы наконец-то стали видеть применение Restartable Sequences в реальных приложениях, чтобы избегать долгих блокировок при чтении памяти, которая потенциально находится на том же логическом ядре. Аллокатор TCMalloc, который используется во всём Google, выиграл до 50% перформанса, применив эту парадигму.
10. SQLancer
Исследователи из ETH Zurich выложили весьма простой и понятный фаззер запросов, который проверяет какие-то простые логические условия в зависимости от вставленных данных в таблицы. В итоге суммарно было найдено около 400(!) багов, 10-15 различных SEGFAULT в самых популярных базах данных как SQLite, MySQL, PostgreSQL и, конечно же, этот труд был приглашен на две топовые конференции OSDI и OOPSLA. Одна из лучших и элегантных статьей на 2020 год, по моему мнению.
To be continued...
Ультракороткие рецензии на тoп инженерных находок 2020го года от @Danlark, которых не было в блоге. Часть 2.
6. New Linux Slab Allocator
Slab аллокатор в системе Linux заточен на то, чтобы переиспользовать выделенную память для часто встречающихся структур данных и вообще контролировать большинство аллокаций в самом ядре. Роман Гущин из Facebook нашёл большую проблему в том, что аллокации не переиспользуются между различными cgroup. Инженеры из Google нашли неоптимальный O(n^2) алгоритм для освобождения памяти при загруженной машины в shrink_slab. Большой лист из 47 патчей был принят в Linux 5.9, который ведёт к 45% лучшей утилизации, петабайтам сэкономленной оперативной памяти и миллионам ядер в Facebook и Google.
7. unfork(2)
С первого взгляда не самый примечательный репозиторий, но он предлагает user space функциональность по слиянию адресных пространств двух процессов в одно. Работает через свежедобавленные системные вызовы ядра как userfaultfd(2), который помогает лениво, только при pagefault, обрабатывать такие изменения. Надеюсь, мы увидим больше таких решений, например, в оптимизациях памяти в Chromium и базах данных.
8. io_uring
После долгих лет споров с Линусом по поводу того, как должен выглядеть асинхронный интерфейс работы с IO, наконец-то был достигнут консенсус и стабилизировался io_uring. Этот вызов вам позволит асинхронно задавать сразу много запросов к устройству, выжимая максимум из вашего железа. Бенчмарки при сильно загруженных дисках по сравнению со старым io_submit, показывают улучшение на 3-6%, но самое главное, что теперь интерфейс максимально удобен и каноничен.
9. rseq в TCMalloc
Мы наконец-то стали видеть применение Restartable Sequences в реальных приложениях, чтобы избегать долгих блокировок при чтении памяти, которая потенциально находится на том же логическом ядре. Аллокатор TCMalloc, который используется во всём Google, выиграл до 50% перформанса, применив эту парадигму.
10. SQLancer
Исследователи из ETH Zurich выложили весьма простой и понятный фаззер запросов, который проверяет какие-то простые логические условия в зависимости от вставленных данных в таблицы. В итоге суммарно было найдено около 400(!) багов, 10-15 различных SEGFAULT в самых популярных базах данных как SQLite, MySQL, PostgreSQL и, конечно же, этот труд был приглашен на две топовые конференции OSDI и OOPSLA. Одна из лучших и элегантных статьей на 2020 год, по моему мнению.
To be continued...