k001
k001
:...

April 2032
        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30

k001 [userpic]
да не убоимся KLOC

Я в блоге OpenVZ написал о результатах небольшого исследования, которое сделал Паша Емельянов. Тут пишу примерно о том же самом по-русски.

Собственно, целей исследования было две:
* прикинуть количество изменений, которые OpenVZ патчсет вносит в ядро;
* сравнить с количеством изменений, которые вносит в ядро RHEL.

Были взяты три ядра:
* RHEL5.3 2.6.18-128.1.1.el5 (на базе 2.6.18);
* OpenVZ 2.6.18-028stab062.1 (на базе вышеупомянутого RHEL5.3);
* OpenVZ 2.6.27-aivazovskiy.1 (на базе 2.6.27).

По результатам подсчётов нарисовали картинку, которую можно наблюдать во всей красе, тыкнув тут или в превьюшку справа. Для OpenVZ ядер мы различаем собственно основные изменения в ядре и то, что можно собрать как отдельные модули. Патчи RHEL ядра мы делим на несколько категорий, типа drivers, Xen, ext4; всё, что ни в одну из этих категорий не входит, записываем в other.

Выводы из разглядывания оной картинки можно сделать вот какие:
1. Даже если выкинуть из набора патчей RHEL5 драйвера, то остаётся 434 добавленных/удалённых KLOC*, что в 8.5 раз больше, чем весь OpenVZ патч (51 KLOC). Нет, конечно, патч большой, но не такой уж и большой.
2. Основная часть патча OpenVZ (то есть без модулей) для 2.6.27 ядра похудела на 40% по сравнению с 2.6.18. Положительно сказываются усилия по интеграции контейнеров в мейнстрим.

Вот такие пироги.

* KLOC -- это тысяча строчек кода (Kilo-Lines of Code).

Comments

А мне вот интересно. Вы интегрируетесь, интегрируетесь, а при этом февральский Linux Format в обзоре различных систем виртуализации под линукс про OpenVZ даже на секундочку не вспоминает (про Xen там есть). Мужики-то, получается, и не знают :(

Ну чёрт его знает, почему…

Скажи мне, Кир, к чему эта пропаганда, когда ежу ясно [*], что OpenVZ никуда не идет, и что Parallels полностью прогадили все дело допустив контейнеры? Вам надо было мержиться 6 лет назад. А сейчас что говорить?! Все кончено, хоть плачь, хоть жопу рви!

И между прочим, твоей личной ответственности полно. Все твоя мягкотелость, нежелание публично ссориться с Бидерманом и пр. Зачем надо было соглашаться разбивать на части, когда главное не решено? Ведь пока бинкаунтер не включен, пока старый ABI не включен, OpenVZ невозможно включить в ядро. В результате, годы ушли на отгрызание мелочей, у ядра появились network namespaces, а результата нет.

А что касается сравнений с RHEL, то там есть два типа патчей: 1. которые не идут в апстрим, и 2. бакпорты. Мы никогда не держимся за 1-й тип. И было их всего-то... Ну 4:4, Tux, execshield, японский diskdump. Все они появляются на релиз или два, и уходят. Все остальное - просто из Линуксного дерева, в основном драйверы для Qlogic и все такое. Что тут сравнивать? Даже смешно! Нам не нужно эти патчи поддерживать на совместимость с апстримом (они оттуда пришли), а вам нужно.

[*] Мне было не ясно, и я попробовал посмотреть. В результате стало ясно.

Я соглашусь с тем, что да, надо было 6 лет назад мержиться. Но не соглашусь, что просрали.

Если ты думаешь, что мы не спорили с Бидерманом, то мы спорили, только ему хоть в лоб, хоть по лбу. Он где-то локально может согласиться, но в целом будет всё равно стоять на своём. А авторитет в мейнстриме у него приличный.

Вместо бинкаунтеров будет (уже частично есть) memory resource controller на cgroups, который, в общем-то, нас более-менее устраивает (хотя там надо ещё дописывать kernel memory ctrl, сделать RSS reclamation и т.п.). Возможно, в итоге даже лучше бинкаунтеров получится… Переделать юзер-левел под новый API (или на худой конец втащить в наше ядро какой-то compatibility wrapper) не сложно и не страшно.

Network namespaces, как они есть, нас тоже вполне устраивают. Тут, можно сказать, мы выиграли битву.

Очередная битва — checkpointing. Там, да, всё очень непросто, и непонятно, куда кривая выведет. Но ещё можно побороться.

ИМХО (чисто ИМХО) в самом начале политика была выбрана неверная: не нужно было изначально вайолейтить GPL и не пускать никого к коду (please contact sales, да-да). А когда очухались -- пыщ-пыщ, время потеряно.

Между «выложить код» и «замержить его в мейнстрим» дистанция, как говорится, огромного размера. В частности, выясняется, что ни одного маленького кусочка OpenVZ кода просто так в мейнстрим не возьмут. Всё надо доделывать, переделывать, иногда до неузнаваемости…

и не потому, что код плох, а по всяким другим причинам.