# Понедельник 69 твитов
Всем привет! С вами Сергей Бронников, эту неделю развлекать вас здесь буду я. Может кто-то уже подписан на мой аккаунт @estet.
12:58Последние 11 лет я связан с виртуализацией. Сначала тестирование (Virtuozzo, Parallels Desktop for Mac), теперь занимаюсь проектом OpenVZ.
12:59Пару недель назад аккаунт вела Аня Воробьёва и твитила про терминологию: вирт. машины, контейнеры etc. Поэтому я дублировать ее не буду.
13:03Предлагаю на неделе обсудить контейнерные технологии, opensource, разработку ядра, конференции, сообщества. Если не против, тогда начнём.
13:08Есть у нас такой проект OpenVZ (которому уже 10 лет), который позволяет использовать OS контейнеры. А вы за App или OS контейнеры?
13:21Основные пользователи OpenVZ это хостеры openvz.org/Hosting_provid… Так как здесь нет ни одного хостера, то интересно узнать ваше предпочтение.
13:24@backendsecret Мне нравится docker, это удобно. Я разработчик и с контейнерами у меня не такие серьезные отношения. :)13:37
Что-то я сходу начал с OpenVZ, а может тут никто про проект не знает или не интересно. Давайте активнее или все обедать ушли?
13:45Кто-нибудь планирует делать доклад на @HighLoad_Conf Junior? Осталась последняя неделя подачи заявок.
13:53Давайте я вам расскажу как весело (я не утрирую) разрабатывать продукт в opensource.
14:19Технологии контейнеров реализованы в Linux ядре. Базовые вещи: пространства имён (PID, NET, USER, UTS) и cgroups.
14:27Пространства имён нужны для изоляции объектов контейнера в ядре от хоста и других контейнеров.
14:28cgroups нужны для управления ресурсами на всём сервере. Процессам контейнера 1 столько памяти, процессам контейнера 2 столько то CPU и т.д.
14:29Когда мы начинали делать продукт Virtuozzo, то в ванильном ядре не было никаких пространств имён. Поэтому часть из них появилась в ядре Vz.
14:31Если вы разрабатываете продукт на основе opensource, то нужно работать с апстримом и отдавать туда максимум изменений.
14:35Советую посмотреть слайды разработчика из RedHat @nearyd. Он объясняет почему нужно работать с апстримом slideshare.net/nearyd/swimmin…
14:37Так вот по мере того, как разные вещи для контейнеров появлялись в Linux kernel мы их портировали в ванильное ядро.
14:38Например тред c патчами PID NS от @xemulp marc.info/?t=11837091360… Как видно, PID NS был интересен не только нам, IBM тоже это хотел.
14:40Если вы ещё не заснули, то я продолжу свои речи.
14:41Вообщем всё закончилось хорошо и наши патчи приняли git.kernel.org/cgit/linux/ker… PID NS появился в ванильном ядре.
14:42Потом был черёд NETNS и первые патчи были от Даниэля Лезкано из IBM marc.info/?l=linux-kerne… Потом подключились Э. Бидерман и Д. Лунёв (OVZ).
14:52Так с миру по нитке в ядре появились остальные пространства имён. Всем хорошо: вы не тащите с собой кучу патчей, сообщество получает фичи.
14:55Но тут есть нюанс: не все изменения сообщество готово принимать. Иногда приходится долго убеждать людей, переделывать патчи.
14:58Часто работа с апстримом превращается в самую настоящую политику. Тут важно работать с сообществом: ездить на конференции, работать с людьми
15:01@backendsecret с чем связана переделка? Кодестайл не тот?15:03
. @dcromster это все мелочи. Не всегда люди могут договориться о реализации. Или, например то, что вы хотите принести мало кому интересно.
15:04@backendsecret а почему до контейнеров не додумались ещё во времена 2.2 2.4 ? :)15:04
. @dcromster Гм, ну Москва тоже не сразу строилась. :) Понемногу компании делали компоненты из которых появилась технология контейнеров.
15:05"Не пиара ради, а пользы для". Мой доклад на @lveecon youtube.com/watch?v=IIC427…, я там рассказывал про разработку OpenVZ.
15:07Сейчас контейнеры в тренде и мне понравилась раскраска, которую сотрудники RedHat раздавали на конференции. pic.twitter.com/hYvwaJryPB
15:13Там на примере дома для трёх поросят очень доступно объясняют что такое контейнеры :) Вот ссылка для печати github.com/fedoradesign/c…
15:14Так, тут пришел мой руководитель и хочет, чтобы я не в твиттер писал, а начал работать.
15:17Всё, он ушёл.
15:20Вот так понемногу мы отдавали свои изменения ванильное ядро. Это 2k+ коммитов от разработчиков OpenVZ за всё время. pic.twitter.com/K5QfE9CLLC
15:24Недавно Стас Кинсбурский закончил с патчами для виртуализации NFS (это не гоночки, а сетевая ФС) marc.info/?l=linux-nfs&m…
15:26Худо бедно с пространствами имён разобрались (хотя вот UserNS только недавно появились, а Time NS вроде ещё не сделали).
15:29В 2004 году в ядре 2.6.12 появляются cpusets man7.org/linux/man-page…
15:33В 2006 году Поль Менаж из Гугла kernel.org/doc/ols/2007/o… переделывает cpusets и их переименовывают в control groups.
15:35@backendsecret А что в то время представлял из себя openvz? Мне вот интересно, как давно форкнутые проекты смерживают обратно.15:36
. @Dronmdf Гугл насколько помню до сих пор не может отдать свои изменения для Android в основную ветку Linux ядра.
15:40@backendsecret Но вам приходилось покапле вливать его в ядро... Какую каплю влить первой? вот что мне интересно. :)15:41
. @Dronmdf весь патчсет разделяется на более-менее независимые части и каждую часть пытаются отдать сообществу.
15:42. @Dronmdf кстати тут более уместно слово "продать", чем "отдать". Нужно объяснить людям, что это стоит взять :)
15:43Возвращаясь к теме про cgroups - недавно их переработали и выпустили в cgroups 2.0 linux.org.ru/news/kernel/12…
15:45В OpenVZ было несколько поколений memory management: UBC, SLM, vSwap и в Virtuozzo 7 будет 4-е поколение - VCMMD goo.gl/NLDxa9
15:48Это такой пример итеративного развития технологии управления памятью для контейнеров и пример технологии, которую в ядро не принимали.
15:50Мы активно участвовали в разработке memory cgroups и в RHEL7, на котором мы базируемся, наши изменения появились... 1/2
15:55...и мы смогли выкинуть предыдущие реализации MM и использовать MM из ванильного ядра. Появился vcmmd github.com/OpenVZ/vcmmd 2/2
15:56Весь необходимый код в ядре, а логика по управлению памятью контейнеров в пространстве пользователя.
15:57У нас есть разработчик, который занимается MM. Он очень стеснительный, но мы его вытащили с докладом на митап в Яндексе.
15:58Если интересно больше узнать про управление памятью для контейнеров, то посмотрите запись доклада youtube.com/watch?v=Mo5A-z… Очень доступно.
15:59@backendsecret кстати, а почему в Ubuntu нет OpenVZ?16:01
. @dcromster из-за неготовности поддерживать второй дистрибутив. Мы поддерживаем только RPM-based.
16:01Я примерно описал сложности разработки в opensource. Но у нас есть другой продукт - контейнеры Windows. Тоже для хостеров.
16:07И вот я даже не знаю что проще: заниматься реверс инжинирингом закрытого продукта или заниматься политикой среди разработчиков Linux ядра.
16:08Недавно тимлид команды по разработке Virtuozzo for Windows писал статью на Хабре habrahabr.ru/company/parall… Почитайте.
16:10Все наши усилия по работе с сообществом не прошли даром и мы снизили общий размер патча vzkernel в 4 раза! pic.twitter.com/pwhM2JTWA1
16:17Завтра расскажу про другие примеры компонентов, которые мы пытались "продать" в основную ветку Linux ядра.
16:20Тут часто ведущие задают вопрос про то, кто какую музыку слушает. Я в офисе почти всё время слушаю музыку, для меня лучше Pandora ничего нет
16:31Вообще-то этот сервис не работает в России, но pianobar вкупе с tor и polipo позволяют слушать их и в России.
16:34Что вы делаете прямо сейчас? Только честно. Я ядро пересобираю на RPi, чтобы там можно было тесты запускать.
16:55@backendsecret разворачиваю OpenVZ’шку с последним Squid потестить как он вообще нынче работает :)17:00
. @strizhechenko имеет смысл пробовать Virtuozzo 7, у которой скоро будет финальный релиз. Тот же opensource, бесплатно, но фич больше.
17:02. @strizhechenko вот сравнение с Vz7, OpenVZ, LXC openvz.org/Comparison а там сами смотрите.
17:03@backendsecret переношу ряд mind maps в coggle, чтобы делиться ими и встраивать в бложик.17:18
# Вторник 42 твита
И снова здравствуйте. Прекрасный день, чтобы рассказать про наш опыт реализации "живой" миграции контейнеров в ванильном ядре.
11:45Как я вчера рассказывал, все фичи, которые появляются в vzkernel, мы пытаемся добавить в основную ветку Linux ядра.
11:55Задача "живой" миграции процессов и групп процессов одна из самых интересных и сложных в разработке контейнеров. Сегодня поговорим про нее.
12:03“Живая” миграция это миграция контейнера с низким временем недоступности (downtime). Это 1-2 секунды.
12:20Такая задержка в обслуживании, которая не повлечёт за собой разрыв открытых сетевых соединений.
12:20Это интересная задача, но зачем нужно мигрировать state? Может, проще писать stateless системы? twitter.com/backendsecret/…12:20
. @rubyunderhood спасибо за вопрос. Это просто два разных подхода.
12:22. @rubyunderhood Для инфраструктуры, которую вы полностью контролируете подходит вариант stateless.
12:23. @rubyunderhood В хостинге контейнерами управляет клиент и его окружение не всегда воспроизводимо, чтобы убить контейнер и поднять заново.
12:23. @rubyunderhood поэтому хостеру нужно перенести контейнеры на другой сервер, чтобы выполнить обслуживание сервера
12:25Помимо этих двух подходов есть ещё балансировка сетевого трафика (High Availability). То есть у нас два инстанса, выполняющих обслуживание.
12:28Один инстанс выключаем и выполняем обслуживание. Качество сервиса не страдает. Потом включаем обратно.
12:28Итого есть: "живая" миграция, stateless контейнеры (микросервисы), High Availability. А ещё есть вариант обслуживания "crash-driven".
12:29"crash-driven" это когда вы обслуживаете сервер, когда у вас всё упало.
12:30Миграция это: “заморозка” процессов и сохранение состояния в файлы на диске 1/2
12:41перенос этих файлов на удалённый сервер, восстановление состояния из файлов и “разморозка” процессов. 2/2
12:41Изначально технология "заморозки"/"разморозки" (Checkpoint/Restore (C/R)) была реализована только в ядре vzkernel в виде системного вызова.
12:54Технология была протестирована и отлично работала, но был существенный недостаток - патчи для C/R не принимали в основную ветку Linux ядра.
12:55К слову, были и другие проекты по реализации C/R в ядре (DMTCP, BLCR) и их реализации тоже не принимали criu.org/Comparison_to_…
12:58Поэтому мы взялись за амбициозный проект - реализовать C/R в пространстве пользователя, а в ядро добавить небольшие необходимые изменения.
13:01Так в 2011 году родился проект CRIU (Checkpoint and Restore In Userspace). Идея была описана и сообщество ее приняло lwn.net/Articles/45191…
13:05Хотя и отнеслись к идее CRIU довольно скептично, но первый коммит был принят в ядро git.kernel.org/cgit/linux/ker… pic.twitter.com/9z6GfZ8qDT
13:07За прошедшие 5 лет проект CRIU достиг версии 2.0 и готов полностью заменить предыдущую реализацию "живой" миграции. opennet.ru/opennews/art.s…
13:16В ядро понадобилось добавить "всего" лишь сто с лишним небольших патчей criu.org/Upstream_kerne…
13:18В основном эти патчи добавляют интерфейсы для получения необходимой информации о процессах в Linux.
13:19На сегодняшний день "живая" миграция в LXC, Docker и Virtuozzo 7 работает с помощью CRIU. criu.org/Integration
13:21В проекте CRIU участвуют более 40 разработчиков, в том числе из @Canonical , IBM, @google, @ru_Parallels github.com/xemul/criu/gra…
13:25В результате мы получили возможность не "таскать" на каждое новое ядро патчсет для C/R. Сообщество получило рабочую реализацию C/R.
13:27Лучше один раз увидеть, чем сто раз услышать :) Как работает C/R в CRIU -youtube.com/watch?v=2AjdZS…
13:30На логотипе проекта жар-птица, русский аналог птицы феникс, восстающей из пепла. Как визуализация процесса C/R. pic.twitter.com/ddd8Xgabrc
13:33Кстати возвращаясь к теме про stateless. Как известно, Docker это stateless. Но были желающие, которым нужна была "живая" миграция в Docker.
13:35Это только подтверждает право на жизнь обоих подходов.
13:36Применение CRIU не ограничивается живой миграцией. Например CRIU используется в проекте Tonic blog.tonicdev.com/2015/09/10/tim…
13:42Если интересно больше узнать про миграцию контейнеров, то посмотрите запись доклада youtube.com/watch?v=qZoEL4…
13:58Вот ещё демо миграции с помощью CRIU youtube.com/watch?v=mL9AFk… и описание blog.kubernetes.io/2015/07/how-di… Мигрировали Quake внутри Docker контейнера.
14:59Интересное применение CRIU нашли в @CloudLinuxOS - они делают C/R процесса php для ускорения запуска youtube.com/watch?v=KMbwPp…
15:17CRIU это только "заморозка" и "разморозка" процессов. Но нужен компонент который будет вызывать CRIU для C/R, переносить файлы.
15:23Для этого есть другой проект - P.Haul (Process hauler). Мы его между собой называем “пихль”. criu.org/P.Haul
15:24P.Haul @ProcessHauler выполняет всю черновую работу для миграции контейнера на другой сервер.
15:32А вы участвуете в открытых проектах? Может у вас свой успешный проект? Поделитесь опытом.
16:01Недавно публиковал статью, где объяснял, что не обязательно быть программистом, чтобы участвовать в открытом проекте habrahabr.ru/company/parall…
16:13@backendsecret github.com/akumuli/Akumuli
Time-series database, 6 контрибьюторов. Неплохо :) twitter.com/Lazin/status/7…
16:19# Среда 82 твита
@backendsecret недавно стартанули github.com/WorldBrain/Web…Можно присоединиться :)
Кому интересно - присоединяйтесь! :) twitter.com/mr_mig_by/stat…
11:04Привет, пупсики. А давайте поговорим про конференции. Кто какие митапы и конференции посещает.
12:24Ездите в Европу/Штаты чтобы с народом пообщаться и поделиться опытом?
12:24Вы или не ходите на конференции вообще или не хотите делиться.
14:45На мой взгляд даже в Москве не так много хороших конференций о разработке в opensource. Если хочется пообщаться, надо ехать в US или Европу.
14:47У нас к сожалению нет аналогов @fosdem, @devconf_cz, @fossasia, @lfnw, @linuxplumbers
14:50Я обычно мониторю даты проведения конференций и у меня есть список twitter.com/estet/lists/fo… Может найдёте там что-то для себя.
14:54Кстати кто-нибудь знает как удобно мониторить начало подачи докладов и даты конференций. Я себе сделал RSS ленту bronevichok.ru/ose/
15:06Но лента генерируется из файла, который приходится руками обновлять. Может кто знает способ проще :)
15:06У меня есть две темы, в которых я могу раскрыть наш уникальный опыт.
15:171. как мы тестируем Virtuozzo (вот уж не халява) 2. нюансы открытия исходного кода коммерческого закрытого продукта. Какую первой хотите?
15:18Итак. Начнём с тестирования Virtuozzo, а следующей темой будет наш опыт открытия исходного кода продукта.
15:5998% продукта Virtuozzo тестируется автоматическими тестами. Ручное тестирование в основном там, где нужно воспроизвести уникальный баг.
16:02Для каждого релиза составляем тестплан и запускаем тесты из этого тестплана на физических серверах. pic.twitter.com/V9MWDUkHMb
16:16Физ. серверами управляем с помощью сервиса, который обеспечивает жизненный цикл сервера: установка ОС, настройка окружения, запуск теста.
16:24@backendsecret Тестируете каждый билд? как делаете деплой на железки?
Об этом дальше :) twitter.com/Dronmdf/status…
16:27Плюс контроль состояния серверов, с помощью которого можно понять чем занимались сервера за какой-то период времени. pic.twitter.com/HgBJBWPFA9
16:28Много серверов в QA - значит не успевают разбирать упавшие тесты, много серверов в Dev - не успевают исправлять. График выявляет проблемы.
16:30Скриншот страницы с описанием сервера и страница запуска теста. pic.twitter.com/Lg0aY6nwfH
16:32Каждый сервер имеет разные параметры: CPU, память, наличие SSD, скорость сетевой карты, размер HDD и шедулер тестов выбирает по этим парам.
16:34Самописный шедулер мониторит новые билды и запускает тесты из тестплана, если найдет подходящие сервера для этих тестов.
16:39Мы связали баги в Jira и сервис по обслуживанию серверов, чтобы было видно какой баг занимает сервер. Очень удобно. pic.twitter.com/0aHbNyIuLm
16:41Разработчики в основном работают с багтрекером и так им проще понять доступно ли тестовое окружение для исследования проблемы.
16:43Virtuozzo это целостный продукт, который состоит из множества сложных компонентов: Linux ядро, гипервизор, утилиты и т.д.
16:46Для каждой сборки Virtuozzo делаем удобные чейнджлоги, чтобы менеджер мог понять на чём акцентировать тестирование. pic.twitter.com/5Ol2jQA9tn
16:47Все сборки Virtuozzo проходят Basic Validation Test, если тест не пройден, то билд не попадает в тестирование. Баг от BVT всегда bloker.
16:52Если сборка прошла BVT, то на ней независимо от изменений запускаются порядка 100 тестов. Это базовые тесты, которые выявят деградации.
16:53Если говорить о тестах, то они самые разные: юнит тестов не очень много, в основном функциональные, тесты на произв. и стресс тесты.
16:56Функциональные тесты покрывают всякие сценарии пользователей: установить гостевую ОС, сделать бэкап, миграцию, но все это в жёстких условиях
16:58Юнит-тесты есть мало где. Но, например, для диспетчера они есть github.com/OpenVZ/prl-dis…
16:59Про тесты производительности Virtuozzo уже Аня Воробьёва @AnnaMelekhova написала backendsecret.ru/AnnaMelekhova/, не буду повторяться.
17:04Особой популярностью пользуется тест start-stop, который в заданном окружении запускает и останавливает контейнеры или виртуальные машины.
17:06Несмотря на кажущуюся простоту тест start-stop поймал нам не одну сотню багов и очень полюбился разработчикам.
17:09Так как основные наши клиенты это хостеры, то у нас есть специальный тест, который измеряет макс. количество инстансов на одном сервере.
17:12Чем больше инстансов, тем эффективнее можно использовать каждый физический сервер. Такой тест ещё и выявляет утечки памяти.
17:13Инстансы должны не только запуститься, но и выполнять обслуживание внешних запросов. Так мы узнаём плотность размещения на сервере.
17:14Ядра vzkernel мы гоняем и в хвост и в гриву. Часто своими тестами находим баги, которые присутствуют в ванильном ядре или в ядрах RedHat.
17:17Любопытный факт: мы релизы ядра раньше называли фамилиями русских художников и писателей: Феоктистов, Репин, Гоголь openvz.org/Download/kerne…
17:23Что связывает Достоевского и Гоголя? У Достоевского было четыре с небольшим багфикса. openvz.org/Download/kerne… pic.twitter.com/sMjPsY75P4
17:25У Репина конфиг такой же как и у Левитана #OpenVZ openvz.org/Download/kerne… pic.twitter.com/YmYJJqcLRP
17:27Тесты для vzkernel используем как стандартные (типа LTP), так и самописные.
17:31Ядра мы свои гоняем и в хвост и в гриву. Часто своими тестами находим баги, которые присутствуют в ванильном ядре или в ядрах RedHat.
17:32Вот, например, Кир Колышкин @kolyshkin писал пост, где приводил примеры таких багов openvz.livejournal.com/23621.html #OpenVZ
17:35Или вот так бывает lists.openvz.org/pipermail/deve… #OpenVZ pic.twitter.com/MpeumfyBRU
17:37Или когда старый баг в netlink нашли patchwork.ozlabs.org/patch/83832/ #OpenVZ pic.twitter.com/vjDwt4NT4B
17:39Builds now running on OpenVZ - We moved our entire build infrastructure to an OpenVZ based virtualization... tmblr.co/Zy8qosg4nUU5
Инженеры в @travisci вполне довольны стабильностью OpenVZ twitter.com/travisci/statu…
17:42@peakscale we’re booting 120000 containers per day on OpenVZ, it’s okay I guess.17:42
Так, я ушёл от темы. Продолжим про тестирование Virtuozzo.
17:43Часто находим проблемы в безопасности Linux ядра, которые потом отправляем в RedHat. Вот примеры CVE opennet.ru/opennews/art.s…
17:44Вообще это нормальная практика в разработке opensource - вы берёте чужой код и возвращаете туда фиксы для найденных багов.
17:45Ещё используем два инструмента для контроля тестирования Virtuozzo: бёрндаун и график покрытия тестами. pic.twitter.com/T9Oi3HE3Ws
17:50Графики помогают ответить на вопросы: "в каком состоянии тестирование и когда закончим".
17:50Итого, что делает нашу тестовую лабораторию хорошей кузницей качества. И немаловажный важный фактор это конечно люди pic.twitter.com/yd4jzk0lPl
17:53Формат твиттера не позволяет красноречиво и подробно раскрыть тему, поэтому дальше будет несколько ссылок, если вам интересно узнать больше.
17:55Доклад на тему разработки Virtuozzo speakerdeck.com/sergeyb/razrab… Там есть метрики о разработке и тестировании.
17:56Доклад @vagin_andrey на #LinuxCon о тестировании Virtuozzo slideshare.net/andreywagin/pr…
17:57Подробнее об автоматизации тестирования Virtuozzo я писал в статье habrahabr.ru/post/204292/
17:59Основной акцент делаем на тестировании продукта, но некоторые компоненты тестируются отдельно. Например CRIU @__criu__.
18:00Проект CRIU поддерживает несколько архитектур и на всех мы запускаем тесты с помощью Jenkins ci.openvz.org/view/CRIU/job/…
18:01После релиза 2.0 мы разделили репозиторий на две ветки: master для проверенных изменений и criu-dev для новых патчей github.com/xemul/criu/tre…
18:02Все новые патчи попадают в <s>рай</s> в ветку criu-dev и только если патч не вызвал никаких деградаций, то его комиттят в master.
18:04Помимо тестов мы регулярно измеряем покрытие кода тестами. Сейчас покрытие составляет 64% ci.openvz.org/job/CRIU-x86_6… pic.twitter.com/W8v5Pe8DAH
18:05Неплохо, но есть куда стремиться.
18:05Основной тест CRIU это ZDTM (Zero Down Time Migration), которым уже успешно тестировали C/R в OpenVZ. criu.org/ZDTM_Test_Suite
18:09Соотношение полезного и тестового кода в CRIU: 48 KLOC vs. 30 KLOC
18:14Каждый тест из ZDTM запускается отдельно и проходит 3 стадии: подготовка окружения, «демонизация» и ожидание сигнала, проверка результата.
18:15Тесты ZDTM условно разделены для две группы.
18:16Первая группа — это статические тесты, которые подготавливают некое постоянное окружение или состояние и «засыпают» в ожидании сигнала.
18:16Вторая группа — динамические тесты, которые постоянно меняют состояние и/или окружение (например пересылают данные через TCP соединение).
18:17В первый релиз в CRIU было порядка 70 отдельных тестовых программ, а сейчас их количество увеличилось до 200 github.com/xemul/criu/tre…
18:19Это что касается функционального тестирования. Но разработчики не брезгуют Fuzz тестированием и Fault injection lists.openvz.org/pipermail/criu…
18:21Такие техники тестирования служат неплохим дополнением к обычным функциональным тестам.
18:22Сложность тестирования заключается в нелинейном росте количества конфигураций. Базовое тестирование происходит на хосте и внутри контейнера.
18:24Недавно в релиз Linux ядра вошла поддержка User namespaces и у нас добавилась ещё одна конфигурация.
18:25Вдобавок к этому тесты запускаются в разных позах:
"сделать два раза CR и проверить что процесс работает (повторный CR)"...
"сделать CR и проверить что процесс не развалился (безресторный тест)"
18:30"C/R нескольких процессов", "проверка обратной совместимости",
"снапшоты, в окружении неймспейсов", "C/R с правами обычного пользователя"
Длительность тестов небольшая 2-10 мин, но если учесть количество комбинаций всех сценариев и конфигураций, то получается внушительная цифра
18:31Помимо тестирования пользуемся статическими анализаторами (clang-analyzer, Coverity) scan.coverity.com/projects/3365
18:34Это всё, что я хотел бы рассказать о нашем тестировании. Есть вопросы - спрашивайте.
18:36@backendsecret Впечатляет... Так что насчет деплоя на железо? Как вы это делаете?
WinPE/PXE twitter.com/Dronmdf/status…
18:45Завтра расскажу о нашем опыт открытия исходного кода коммерческого продукта.
18:51# Четверг 49 твитов
У меня осталось два дня, а столько всего интересного ещё.
13:19Я в предыдущие дни много писал про наш проект CRIU, но рассказал естественно не всё.
13:21Павел Емельянов, который проект CRIU начал, согласился поделиться опытом, полученным за 4 года проекта.
13:21История C/R глазами Павла. Вообще до нас много кто пытался сделать C/R в Linux. Все останавливались по схожим причинам.
13:24Корень всех предыдущих провалов -- недостаток API в ядре для понимания состояния процессов. И для восстановления, но это другая история.
13:25В восстановлении процессов основной проблемой является автоматическая генерация ядром разных идентификаторов.
13:28Вот BLCR например, решил обойти эти проблемы написанием своего ядерного модуля. crd.lbl.gov/departments/co…
13:30Эта идея не пошла, так как ядро развивается быстро и таскать свой код вне дерева со временем всё тяжелее.
13:31DMTCP решали проблему добавив прокладку между ядром и программой -- свою собственную версию glibc. dmtcp.sourceforge.net
13:34Это не заработало по той же причине -- ядро мчится вперёд быстрее, чем они успевают обновлять свою glibc.
13:36CryoPID пытался решить проблему "в лоб", т.е. с использованием обычных Linux kernel интерфейсов. github.com/maaziz/cryopid
13:38Но у них не хватило... чего-то, чтобы пойти в ядро и попросить добавить недостающих вызовов.
13:40А у нас хватило! :)
13:42По мере развития CRIU мы добавляли недостающую функциональность в ядро. На данный момент около 180 патчей criu.org/Upstream_kerne…
13:44И то, что мы наделали в ядро пригодилось не только нам.
13:45Например, sock_diag -- для детального изучения сокетов. На него "села" утилита ss, теперь про сокеты можно узнать гораздо больше.
13:46Подробнее можно посмотреть в слайдах slideshare.net/openvz/speedin… и статье habrahabr.ru/post/275545/
13:49Для unix сокетов -- с кем они соединены. Раньше такой возможности не было.
13:49Между прочим, проблему "быстро двигающегося ядра" мы тоже не решили. Мы её оседлали :)
14:14@backendsecret у меня в гостях в SDCast'е был Андрей Вагин, рассказывал про CRIU: sdcast.ksdaemon.ru/2014/12/sdcast… Для тех, кто не слышал.
Сам слушал, было интересно :) twitter.com/KSDaemon/statu…
14:15Вся новая функциональность ядра тоже требует соответствующей работы в CRIU.
14:16Но мы уверены в том, что ядерщики обязательно пойдут нам на встречу и помогут.
14:17Многие, кстати, при разработке своих штук в ядре уже думают "а что скажет команда CRIU, когда это увидит".
14:18Между прочим, CRIU не заточено строго под OpenVZ, как это было у нас раньше (мы пытались делать как BLCR).
14:22CRIU вообще готово работать не только с контейнерами.
14:23Сообщество вокруг открытого проекта -- важная составляющая успеха.
14:37Сообщество CRIU на сегодняшний день не такое большое, как у ядра, но и не такое крохотное как у OpenVZ kernel.
14:38За всю историю проекта там поучаствовали кодом более 60 человек.
14:42Их них около 10 сравнительно постоянных участников. Ну и команда Virtuozzo конечно.
14:43Очень сильно помогла изначальная открытость -- все видели, почему принимаются те или иные решения.
14:52Самой большой трудностью является, пожалуй, невозможность убедить кодописателей гонять все наши тесты. А их у нас очень много.
14:53Сейчас думаем как можно этот процесс автоматизировать. Дженкинс, конечно, помогает, но он не умеет забирать патчи из рассылки.
14:56А вот почему мы пользуемся почтовой рассылкой, а не механизмом пулл реквестов на гитхабе я не скажу, чтобы не разводить очередной холивар :)
14:59А ещё у нас в прошлом году была микро-конференция на @linuxplumbers, посвященная CRIU. plus.google.com/+CriuOrg/posts…
15:01В этом мы тоже хотим её организовать, но пока докладчиков маловато. Хотя есть "гости" -- ребята из DMTCP и OpenMPI.
15:02К слову CFP до сих пор открыт wiki.linuxplumbersconf.org/2016:checkpoin…
15:03Интересно, что CRIU оказался отличным способом обучать студентов. И аспирантов.
15:06Он достаточно низкоуровневый, чтобы разобраться в системном программировании в Linux, но ещё не ядро и не отпугивает своей сложностью.
15:08Есть даже несколько задач чисто на математику, никакого программирования.
15:09Несколько человек уже дипломы защитили на CRIU тематику. И ещё несколько готовятся.
15:10Ещё оказалось, что многие простые вещи, на самом деле сложные. Намример у нас на wiki есть статья про то, как открыть файл %)
15:14Кстати, скоро в рамках CRIU мы поделимся с миром ещё несколькими интересными инструментами.
16:07Именно инструментами, так как технологии уже есть, просто они намертво "вморожены" в сам CRIU.
16:08Один из инструментов -- Сompel (компель). Программа и библиотека для внедрения паразитного кода в процессы. criu.org/Compel
16:10Это безопасно, так как мы пользуемся обычными интерфейсами ядра, и делать ужасные вещи тому, кому это нельзя, не получится.
16:11@backendsecret какой у вас % в ядре?
В 2009 году вошли в 10-ку компаний linuxfoundation.org/sites/main/fil… twitter.com/dcromster/stat…
16:14Это были изменения с PID, IPC и NET пространствами имён.
16:15В разное время количество патчей в Linux ядро от Virtuozzo сильно варьировалось. pic.twitter.com/p3ZUBzkQfx
16:17Твиттер опять испортил картинку, тут есть лучшего качества --openvz.org/File:Kernel_pa…
16:18# Пятница 70 твитов
Осталась одна непокрытая тема - наш опыт перевода коммерческого продукта Virtuozzo в разряд открытых проектов.
12:09Вообще-то сегодня 1-е апреля, но все последующие твиты прошу считать правдой. Всё будет серьёзно и без шуток.
12:17@backendsecret есть вопрос - какой версии тут РНР? habrastorage.org/getpro/habr/co…
Версия определённо включает круглое число, но какая именно - не разобрать. twitter.com/tkachenko/stat…
12:27Небольшой исторический экскурс: у нас был коммерческий продукт Virtuozzo c технологией контейнеров на базе ядра Linux.
12:33На дворе был 1999 год, а ядро имело версию Linux kernel 2.2. Кстати и контейнеров никаких тогда не было, были "Virtual Environments".
12:35В обиходе их называли "Вэ-ешки". Понятие "контейнеры" ввела компания Sun Microsystems в 2004 году.
12:37Кстати сохранилась старая версия Virtuozzo от 2000 года - paul.sladen.org/vserver/aspcom… Там в описании ещё используется термин "VE".
12:40В 2005 году компания SWsoft выпустила основные части Virtuozzo под лицензией GNU GPL в рамках проекта OpenVZ.
12:42Со времени начала существования проекта OpenVZ код проекта и продукта Virtuozzo понемногу "разъезжался".
12:47Основные пользователи OpenVZ - небольшие хостеры, у которых не было денег на Virtuozzo, но хотелось начать свой бизнес.
12:50До сих пор этих хостеров тьма тьмущая - serverbear.com/compare?Sort=R…
12:50OpenVZ был тогда хорошим выбором - хорошо протестированное ядро, отличная плотность размещения контейнеров, бесплатность.
12:52Несмотря на то, что OpenVZ был открытым проектом и исходники были доступны, не было репозитория с исходным кодом ядра.
12:54Исходники выкладывали в виде архивов, но репозитория не было. Так делали чисто по техническим причинам.
12:55Но это затрудняло участие в разработке OpenVZ - трудно было разобраться в изменениях в исходном коде.
12:56Были хостеры, которые начинали с OpenVZ, но по мере роста хотели переехать на Virtuozzo. А такой переезд был нетривиален.
12:57Virtuozzo и OpenVZ имели много общего, но развивались отдельно друг от друга.
12:59По перечисленным ниже причинам мы решили объединить кодовые базы OpenVZ и Virtuozzo и сделать один продукт - Virtuozzo.
13:00Что мы и сделали весной 2015 года - код 90% коммерческой Virtuozzo был открыт и доступен в публичном репозитории - github.com/OpenVZ
13:02Остался один продукт Virtuozzo, который распространяется бесплатно и исходный код которого доступен.
13:04Надо сказать, что публикация исходного кода закрытого продукта тоже занимает время. Это время тратится на приведение кода в порядок.
13:06В первую очередь выложили исходники RHEL7 ядра c нашими патчами opennet.ru/opennews/art.s…
13:07По мере готовности публиковали исходный код утилит Virtuozzo opennet.ru/opennews/art.s…
13:10Понятно, что исходного кода мало для того, чтобы использовать такой большой продукт как Virtuozzo.
13:11Поэтому настроили автоматическую публикацию тестовых сборок Virtuozzo opennet.ru/opennews/art.s… Обновляешься и получаешь последние фичи.
13:13Но так как это промежуточные сборки, то никто не застрахован от багов. Хотя мы выкладываем сборки, прошедшие базовые тестовые проверки.
13:14Но проект делает открытым не только исходный код, но и возможность участия в нём.
13:19Все патчи, которые нам присылали за прошедший год, были приняты. Вот например lists.openvz.org/pipermail/deve…
13:20Для OpenVZ и Virtuozzo раздельными был не только исходный код, но и багтрекеры.
13:22То есть команда разработки работает с одним багтрекером, а где-то сбоку репортят баги на тот же код...
13:23Чтобы решить проблему сделали два инстанса Jira: публичный и внутренний. Множество багов в публичной джире - подмножество багов в приватной.
13:24Летом 2015 настроили публичный инстанс джиры bugs.openvz.org и перенесли туда все существующие баги из багзиллы.
13:28Настроили синхронизацию между публичный багтрекером и приватным, чтобы все дефекты от сообщества появлялись в приватной.
13:29Выиграли все: команда разработки работает с одним багтрекером, сообщество может быть уверено, что их баги заметят.
13:30После появления двух связанных трекеров появился соблазн открыть часть задач для команды разработки.
14:02Если задача для новой Virtuozzo не критична для бизнеса, то нет смысла держать её только в приватной джире. Можно открыть эту информацию.
14:03После всех обсуждений коллеги и руководство поняли, что нет опасности в открытии такой информации и часть задач открыли.
14:05В разработке закрытого продукта всё просто - есть команда, все знают кто и за что отвечает. Внутренние списки рассылки, устное общение.
14:07@backendsecret а как почувствовали себя после появления нескольких источников задач? Неудобно ведь.
Как раз остался один источник - внутренняя джира, в которой появляются дефекты из публичной джиры. twitter.com/strizhechenko/…
14:08Но если хочешь действительно сделать открытым проект, то и обсуждения разработки фич нужно делать открытыми.
14:10Естественно это касается только тех фич, которые в опенсорсе.
14:10И вот тут проблема - нужно менять культуру внутри команд разработки. То, к чему люди привыкли за 15 лет.
14:11У нас исторически есть два списка почтовой рассылки: devel@ и users@. Договорились с командой vzkernel вести всю разработку в devel@.
14:13Так как они кернельщики и способ ревью через почту для них привычен, то все что нужно было поменять это адрес рассылки.
14:14В целом изменения прошло безболезненно и сейчас вся разработка ядра идёт через devel@ lists.openvz.org/pipermail/deve…
14:15В команде разработки утилит принят другой процесс - с помощью пулл реквестов в src.openvz.org.
14:17Тут важно описать правила, по которым вы готовы принимать патчи от других людей openvz.org/How_to_submit_…
14:18Это такой контракт между вами и внешними контрибьюторами. Процесс сразу становится прозрачен для внешних людей.
14:18Культура общения с внешними людьми сама по себе не появится, поэтому нужно идти к этому постепенно. Вовлекать людей в почтовые рассылки, IRC
14:21В общении с сообществом есть один нюанс. Бывает, что люди из сообщества пишут о проблемах использования на личную почту.
14:25По возможности этого нужно избегать. Никто не обязан тратить время на решение ваших проблем.
14:27Если вы используете продукт из открытого исходного кода и встретились с проблемой, то у вас два варианта решения проблемы.
14:281. Воспользоваться помощью сообщества (список рассылки, IRC, форум) 2. Оплатить техническую поддержку.
14:28Важное значение для проекта имеет информация о текущем статусе проекта.
14:32Так как большая часть разработки сосредоточена в одной компании, то при отсутствии этой информации пользователи начинают сильно переживать.
14:33В нашем опыте была ошибка: мы задержали переезд на ядро RHEL и не давали сообществу никакой информации о наших планах.
14:34Это не очень благотворно сказалось на репутации проекта. Поэтому держите сообщество в курсе ваших планов насколько это возможно.
14:35Учитывая этот опыт мы исправились и регулярно публикуем дайджесты изменений в проекте lists.openvz.org/pipermail/user…
14:37Публикуем даты поддержки openvz.org/Releases и ближайшие планы openvz.org/Roadmap
14:38Отдельно сообщаем о появлении в тестовых сборках новой функциональности lists.openvz.org/pipermail/user…
14:40Общение с сообществом двунаправленное. Если нам нужен фидбек, но пользователи готовы его нам дать.
14:42При переезде на RHEL7 был вопрос: оставить SimFS или нет. Все коммерческие клиенты уже использовали ploop и логично было SimFS выбросить.
14:43Но простой вопрос "А кто-то использует SimFS?" вызвал широкое обсуждение simfs vs ploop lists.openvz.org/pipermail/user…
14:44Если вы рассчитываете, что ваш проект может кого-то заинтересовать, то имеет смысл описать как поучаствовать openvz.org/Contribute
14:54и протестировать шаги, через которые должен пройти внешний человек, чтобы принять участие.
14:55Чтобы не оказалось, например, что пулл реквесты от внешних людей никому не попадают и соответственно их никто никогда не увидит.
14:55Спустя год после открытия исходного кода Virtuozzo могу сказать, что мы сделали большой шаг. Но нам есть куда стремиться.
14:58На мой взгляд сообщество с появлением Virtuozzo 7 только выиграло.
14:59Для пользователей открытой версии доступна функциональность, которая раньше была только у коммерческих пользователей.
15:00Плюс отсутствие vendor lock-in: c открытием исходного кода у пользователей появляется возможность вносить изменения в продукт самостоятельно
15:02# Суббота 57 твитов
Если хотите сделать из закрытого продукта открытый проект, то нужно менять внутренние процессы и вовлекать внешних людей.
12:57Это был забытый вчерашний твит. Был вчерашний, стал сегодняшний.
12:57Сегодня немного продолжу вчерашнюю тему про открытые проекты и немного расскажу о том, что нас ждет в виртуализации.
13:00Затрону такую вещь как волонтёрство в открытых проектах. Нам в какой-то мере повезло, что людям интересны наши проекты и они нам помогают.
13:57Потому что “свободных” рук всегда не хватает.
14:02Это снаружи выглядит, что OpenVZ это проект большой коммерческой компании Parallels и там всё делают сотрудники компании.
14:02А по факту проект долгое время лежал на плечах одного сотрудника (Кир Колышкин), который управлял им в одно лицо.
14:03Это и работа с сообществом, и обновление документации, и присутствие на профильных конференциях, разработка и т.д.
14:07Тут большую роль сыграло участие внешних людей, для которых проект не был безразличен.
14:09Кто-то помогает на конференциях, кто-то отвечает на форуме и в списке рассылки менее опытным пользователям.
14:15Вообще волонтёры это огромный плюс мира опенсорса.
14:22Для всех мотивация может быть разной. Кто-то в свободную минуту поможет человеку на форуме, для кого-то по фану починить надоедливый баг.
14:25Мы в свою очередь как можем поощряем волонтёров openvz.org/Membership
14:32Я довольно часто на форумах слышал такой упрёк в нашу сторону: “Вы русские, а документация у вас только на английском."
14:44Но английский это универсальный язык, тем более в сфере IT. Документация на двух языках это как минимум дублирование усилий.
14:44И интересно наблюдать как люди проявляют инициативу в том, что им кажется неправильным.
14:45Один пользователь взялся за написание руководство для Virtuozzo на русском языке github.com/Amet13/virtuoz…
14:50Другой попросил добавить на вики возможность перевода статей и перевел самые популярные статьи на русский язык.
14:52Разработчики тоже интересуются нашими компонентами для контейнерной виртуализации. Но тут нужно понимать, что не у всех хватает компетенций.
14:54А у кого хватает компетенций тот шлёт патчи :) В разработке vzctl за всё время существования OpenVZ поучаствовали порядка 200 человек.
14:55Но по понятным причинам, наиболее активными разработчиками компонентов Virtuozzo/OpenVZ являются сотрудники компании.
14:59Вклад в исходный код проекта сильно зависит от популярности и востребованности проекта, его зрелости и т.д.
15:00Открыв полностью готовое решение вы с меньшей вероятностью привлечёте разработчиков, чем в случае когда проект был в OSS с самого начала.
15:02Поговорим про будущее технологии виртуализации.
15:08Как вы помните, недостаток контейнеров в том, что нельзя запустить ОС, отличную от хостовой. Но плюс в том, что высокая плотность.
15:08Недостатки виртуальных машин: низкая плотность. Плюсы: любая ОС и отличная изоляция.
15:10Все Pro и Contra перечислять не буду, можно здесь посмотреть, если интересно - openvz.org/WP/Containers_…
15:13Примерно год назад Intel анонсировала технологию Clear Containers clearlinux.org/features/clear…
15:23Это такой Proof-of-Concept технологии на стыке виртуальных машин и контейнеров.
15:38Это легковесные виртуальные машины на основе гипервизора KVM, которые могут иметь плотность размещения на уровне контейнеров и все плюсы ВМ.
15:39Если говорить только о контейнерах, то следуя моде на микросервисы, все большие обороты набирает популярность app контейнеров (Docker, Rkt).
15:40И конечно всему этому способствует доступность контейнеров буквально "из коробки".
15:42Даже консервативная Microsoft двигается в сторону контейнеризации.
azure.microsoft.com/en-us/blog/new… Хотя у них пока "недоконтейнеры".
Хотите полноценные и с поддержкой - пользуйтесь Virtuozzo for Windows :)
15:46Из-за всей этой шумихи появляется много игроков на рынке виртуализации, контейнерной в частности.
15:47"Мы поддерживаем Docker" кричат все они :) В надежде обратить на себя внимание.
15:47Поэтому у обывателей часто голова идёт кругом от всех этих контейнерных решений. Что выбрать, что стоит использовать.
15:48Мы в Virtuozzo считаем важным стандартизировать контейнеры в Linux. Чтобы не дублировать усилия и работать в одном направлении.
15:50Вообще все существующие контейнерные проекты на рынке не только конкуренты друг другу. Мы стараемся совместно разрабатывать общие компоненты
15:50Тот же Docker занимается запаковкой и запуском приложений, а мы виртуализацией — низкоуровневой технологией, которая используется в Docker.
15:51Хороший пример — проект libcontainer, библиотека для управления ядерными компонентами, с помощью которых создаются контейнеры.
15:52Docker изначально задумывался как проект по управлению шаблонами контейнеров и запускал их сначала с помощью vzctl.
15:53Потом разработчики перешли на LXC, а еще позже задумали свою библиотеку — libcontainer.
15:53Одновременно с этим мы решили «стандартизовать» околоядерную часть контейнеров и сделать низкоуровневую библиотеку.
15:54Итого на тот момент получилось аж три «движка»: наш LibCT, LXC и libcontainer.
15:54Мы переработали свою версию и показали её людям, но так получилось, что первый релиз библиотеки Docker практически совпал с нашим анонсом.
15:55Поскольку цель у этих проектов была одинаковая, то мы решили объединить усилия.
15:56В libcontainer у нас несколько интересов: 1. сейчас для того, чтобы работать с контейнерами, нужно сделать выбор между несколькими проектами
15:59Это неудобно пользователям и накладно для разработчиков: люди вынуждены поддерживать несколько разных реализаций одной и той же технологии.
16:00Но рано или поздно весь стек будет стандартизован, и мы хотим в этом участвовать, чтобы контролировать процесс и результат.
16:012. мы сможем реализовать мечту многих пользователей запускать Docker-контейнеры на нашем стабильном ядре.
16:02Сейчас libcontainer существует под именем runc и развивается консорциумом компаний-разработчиков runc.io
16:03А вообще таких консорциумов два: Open Containers opencontainers.org и Cloud Native Computing Foundation cncf.io
16:06Это всё, что я хотел бы вам рассказать :) Спасибо за внимание.
16:11Надеюсь, что вам было интересно, несмотря на то, что тематика моих твитов не совсем соответствовала тематике @backendsecret.
16:12Последний твит - просьба нашего HR менеджера. "Мы ищем таланты! virtuozzo.com/about/#careers".
16:13# Ссылки
openvz.org
- https://openvz.org/Hosting_providers
- https://openvz.org/Comparison
- https://openvz.org/Download/kernel/2.6.26/2.6.26-gogol.1
- https://openvz.org/Download/kernel/2.6.27/2.6.27-repin.1
- https://openvz.org/File:Kernel_patches_stats.png
- https://openvz.org/How_to_submit_patches
- https://openvz.org/Releases
- https://openvz.org/Roadmap
- https://openvz.org/Contribute
- https://openvz.org/Membership
- https://openvz.org/WP/Containers_density
www.youtube.com
- https://www.youtube.com/watch?v=IIC427FYyjM
- https://www.youtube.com/watch?v=Mo5A-z9lwRw
- https://www.youtube.com/watch?v=2AjdZSnHH_M
- https://www.youtube.com/watch?v=qZoEL4QXQ2A
- https://www.youtube.com/watch?v=mL9AFkJJAq0
- https://www.youtube.com/watch?v=KMbwPpST6_A
github.com
- https://github.com/fedoradesign/coloringbook-containers/blob/master/Print-Ready/Pages.A4.pdf
- https://github.com/OpenVZ/vcmmd
- https://github.com/xemul/criu/graphs/contributors
- https://github.com/OpenVZ/prl-disp-service/tree/master/Tests
- https://github.com/xemul/criu/tree/criu-dev
- https://github.com/xemul/criu/tree/master/test
- https://github.com/maaziz/cryopid
- https://github.com/OpenVZ
- https://github.com/Amet13/virtuozzo-tutorial
habrahabr.ru
- https://habrahabr.ru/company/parallels/blog/245533/
- https://habrahabr.ru/company/parallels/blog/274217/
- https://habrahabr.ru/company/parallels/blog/261609/
- https://habrahabr.ru/post/204292/
- https://habrahabr.ru/post/275545/
criu.org
- https://criu.org/Comparison_to_other_CR_projects
- https://criu.org/Upstream_kernel_commits
- https://criu.org/Integration
- http://criu.org/P.Haul
- https://criu.org/ZDTM_Test_Suite
- https://criu.org/Compel
www.opennet.ru
- http://www.opennet.ru/opennews/art.shtml?num=34958
- http://www.opennet.ru/opennews/art.shtml?num=41162
- http://www.opennet.ru/opennews/art.shtml?num=42113
- http://www.opennet.ru/opennews/art.shtml?num=42343
- http://www.opennet.ru/opennews/art.shtml?num=42483
lists.openvz.org
- https://lists.openvz.org/pipermail/devel/2007-July/006281.html
- https://lists.openvz.org/pipermail/criu/2015-October/022763.html
- https://lists.openvz.org/pipermail/devel/2015-December/067490.html
- https://lists.openvz.org/pipermail/devel/
- https://lists.openvz.org/pipermail/users/2016-February/006795.html
- https://lists.openvz.org/pipermail/users/2016-March/006833.html
- https://lists.openvz.org/pipermail/users/2015-July/thread.html
other
- http://www.slideshare.net/nearyd/swimming-upstream-45666354
- http://www.slideshare.net/andreywagin/presentation-13-25959670
- http://www.slideshare.net/openvz/speeding-up-ps-and-top-57448025
- http://marc.info/?t=118370913600004&r=1&w=2
- http://marc.info/?l=linux-kernel&m=114988733428756&w=2
- http://marc.info/?l=linux-nfs&m=131349235221612&w=2
- https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=4c3f2ead5a3dff9069a45560ba4d007c8ae2e2ee
- https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=099469502f62fbe0d7e4f0b83a2f22538367f734
- http://man7.org/linux/man-pages/man7/cpuset.7.html
- https://www.kernel.org/doc/ols/2007/ols2007v2-pages-45-58.pdf
- https://www.linux.org.ru/news/kernel/12268996
- https://goo.gl/NLDxa9
- http://blog.dustinkirkland.com/2015/12/more-people-use-ubuntu-than-anyone.html
- http://lwn.net/Articles/451916/
- http://blog.tonicdev.com/2015/09/10/time-traveling-in-node.js-notebooks.html
- http://blog.kubernetes.io/2015/07/how-did-quake-demo-from-dockercon-work.html
- https://bronevichok.ru/ose/
- http://backendsecret.ru/AnnaMelekhova/
- http://openvz.livejournal.com/23621.html
- http://patchwork.ozlabs.org/patch/83832/
- https://speakerdeck.com/sergeyb/razrabotka-kommierchieskogho-po-s-vysokoi-doliei-innovatsii-na-primierie-virtuozzo
- https://ci.openvz.org/view/CRIU/job/CRIU/
- https://ci.openvz.org/job/CRIU-x86_64-coverage/ws/gcov/html/index.html
- https://virtuozzo.com/jobs/linux-kernel-developer/
- https://virtuozzo.com/about/#careers
- https://scan.coverity.com/projects/3365
- http://crd.lbl.gov/departments/computer-science/CLaSS/research/BLCR/
- http://dmtcp.sourceforge.net/
- https://plus.google.com/+CriuOrg/posts/BPoZW97K3Jb
- http://wiki.linuxplumbersconf.org/2016:checkpoint-restart
- http://www.linuxfoundation.org/sites/main/files/publications/whowriteslinux.pdf
- http://www.paul.sladen.org/vserver/aspcomplete/2000-08-25/
- http://serverbear.com/compare?Sort=RAM&Order=asc&Server+Type=VPS&Monthly+Cost=-&HDD=-&RAM=-&Virtualization=OpenVZ
- https://bugs.openvz.org/
- https://src.openvz.org/
- https://clearlinux.org/features/clear-containers
- https://azure.microsoft.com/en-us/blog/new-windows-server-containers-and-azure-support-for-docker/
- https://runc.io/
- https://www.opencontainers.org/
- https://cncf.io/