EnglishРусский Map

Ядро Linux в PostgreSQL с помощью pgit

title
Ядро Linux в PostgreSQL с помощью pgit
type
summary
summary
1,4 млн коммитов ядра в PostgreSQL через pgit: узкие места контрибьюторов, текучка в драйверах GPU и SQL-запросы к git
tags
git, postgresql, linux-kernel, data-analysis
created
2026-04-09
updated
2026-04-09
lang
ru
translation_of
linux-kernel-pgit
source_updated
2026-04-09
translated
2026-09-01
translator
lllm/antigravity/gemini-3.7-flash-medium

Оливер Зайферт (Oliver Seifert) импортировал всю историю git ядра Linux - 1 428 882 коммита, 24,4 миллиона версий файлов и 20 лет разработки - в PostgreSQL с помощью pgit, своего CLI на Go с хранилищем на основе дельта-компрессии. Задача не в том, чтобы заменить git. Цель - сделать историю git доступной для SQL-запросов, и статья демонстрирует это на серии аналитических выборок, которые было бы мучительно или вовсе невозможно выполнить только через git log.

Импорт

Всё ядро импортировалось примерно за 2 часа на 24-ядерном сервере Hetzner с 512 GB RAM. Фактический объём данных на диске составил 2,7 GB - сжатие в 53,5 раза по сравнению с исходными несжатыми объектами git. Штатный gc --aggressive в Git сжимает сильнее (в 74,1 раза, 1,95 GB), но формат pack-файлов в git не поддерживает запросы, а pgit поддерживает.

Сжатие обеспечивает pg-xpatch - Table Access Method для PostgreSQL, который хранит дельта-сжатые данные. Текстовое содержимое (1,3 GB) и коммиты (600 MB) жмутся хорошо; ссылки на файлы (сопоставление коммитов с путями и blob'ами) занимают 2,1 GB и составляют основную часть хранилища.

Что SQL открывает в истории ядра

Самая интересная часть статьи - сами запросы. Вот несколько ярких выводов:

Узкое горлышко коммиттеров. 38 506 уникальных авторов, но всего 1 540 коммиттеров - соотношение 25:1. Три человека (Дэвид С. Миллер, Грег Кроа-Хартман, Линус Торвальдс) влили 22,5% всех коммитов. На одного Миллера приходится 7,9%. Иерархия слияний ядра концентрирует колоссальное доверие в руках узкой группы.

Разовые участники. 14 000 авторов отправили ровно один патч и больше не возвращались. Это 36% от всех авторов. Доля индивидуальных контрибьюторов (с адресами Gmail) достигла пика в 12% в 2010 году и снизилась до 8% к 2025 году: разработка ядра становится всё более корпоративной.

Преобладают мелкие коммиты. 61,3% коммитов затрагивают только один файл. 90% - 5 файлов или меньше. Редкие огромные коммиты (вплоть до 53 003 файлов) - это merge-коммиты от мейнтейнеров подсистем.

Драйверы GPU выделяются хаосом. Драйвер Intel i915 встречается 8 раз в топ-30 попарно связанных файлов. На драйверы графики (amd/display, amdgpu, i915) приходится ~516 revert'ов - почти 10% от всех откатов в ядре. Разработка драйверов под постоянно меняющиеся спецификации "железа" порождает непрерывную переделку кода, с которой другие подсистемы не сталкиваются.

Самый "забагованный" коммит. На начальный импорт Линуса в git (1da177e4c3f4) ссылаются 665 меток Fixes: - его используют как обозначение для багов, существовавших ещё до начала эпохи git.

13-летний путь bcachefs Кента Оверстрита. От первого коммита в 2011 году до слияния с основной веткой в 2023 году, когда только за один год было сделано 1 194 коммита.

Производительность запросов

Все запросы выполнялись без материализованных представлений и предварительной обработки. Большинство отрабатывало быстрее чем за 3 секунды по 24,4 миллиона записей о файлах. Дорогими оказались связность файлов (48 секунд, требует self-join таблицы ссылок на файлы) и полнотекстовый поиск по всем сообщениям коммитов (44 секунды). Вполне пригодно для интерактивного анализа.

Ссылки

  • pgit - сам инструмент (страница в toolbox)
  • git-magic-files - ещё один взгляд на внутреннее устройство git
  • postgresql - используемая база данных