Программа будет работать как раньше, никаких лишних segfault-ов быть не должно. Если файл будет удален, то его содержимое будет сохранено и на ресторе файл будет восстановлен, открыт и снова удален. С закрытым сокетом проблем еще меньше, достаточно на восстановлении создать сокет и закрыть его. С мьютексом проблемы совсем нет, его состояние хранится в памяти, а она восстанавливается.
Предупрежу дальнейшие вопросы. Мы не просто приоткрываемым сокеты, пайпы и т д, но и восстанавливаем их состояния. Для каждого объекта свой подход. Сначала мы стараемся использовать существующие механизмы, если не получается добавляем новые интерфейсы в ядро.
Чет хабр не послал письмо об этом коменте, поэтому так поздно. Мы здесь говорим об OpenVZ контейнерах, а они поддерживаются только OpenVZ ядром, в ред хате их нет. Так что любые ссылки тут не уместны.
По меркам enterprise-а это не срок. С учетом того, что из этих трех лет некоторое время понадобилось на его допиливание. Я думаю, что пока KVM используется меньше чем конкуренты и будет со временем набирать обороты.
Мой комент лиш относился с громкой фразе, что KVM используется с 2009 года. Используется, но не очень широко. Единственная ошибка, которая была сделана это то, что у RedHat не будет решение на его основе, а оно уже есть.
Использование в продакшене, не означает отсутствие проблем. В 2009 эта платформа выглядела очень слабой как по стабильности, так и по производительности.
А вы его видели? Proxmox базируется на ядре OpenVZ. Начиная с версии 1.9 они используют OpenVZ ядра из серии 2.6.32-042stab0XX, которые базируются на rhel6 ядре. До этого использовалось 2.6.32 ядро c OpenVZ патчами из debian.
В ядрах OpenVZ, которые базируются на rhel6, механизм распределение памяти был серьезно переработан. Теперь он максимально похож на хостовый. Подобные проблемы должны исчезнуть.
Живая миграция — это не только миграция данные, но и миграция процессов и весь смак именно тут. Думаю, коротко об этом мы увидим в интервью. К слову сказать мы недавно начали новый проект criu.org, цель которого протолкнуть эту функциональность в мейнстрим.
Если ядро в лог выдает Panic, BUG, WARNING, которые обычно сопровождаются бектрейсами и состоянием регистров, то это однозначно баг в ядре.
Под драйверами, вы скорей всего понимаете модули, тогда это тоже ядро. В бектрейсе будет видно какому модулю принадлежит функция и можно будет догадаться на кого файлить баг. Если вы ошиблись, разработчики переведут баг на нужную компоненту.
Сложнее когда, что-то не работает, а логах ничего нет. Тогда можно попробовать запустить программу под strace и попытаться понять, что идет не так. Так же стоит попробовать вспомнить, когда в последний раз эта функциональность работала, попытаться загрузить старое ядро и попробовать воспроизвести проблему. Если понять так и не удалось, то лучше зафайлить проблему на user space, просто по статистике в нем больше багов.
Зависит от того чьё ядро вы используете. Если собрали из мейнстрима, то на bugzilla.kernel.org. Если используете ядро из дистрибутива, то в баг трекер дистрибутива или в службу поддержки.
Предупрежу дальнейшие вопросы. Мы не просто приоткрываемым сокеты, пайпы и т д, но и восстанавливаем их состояния. Для каждого объекта свой подход. Сначала мы стараемся использовать существующие механизмы, если не получается добавляем новые интерфейсы в ядро.
Пример userspace кода вы можете найти тут: git.criu.org/?p=crtools.git;a=blob_plain;f=sk-tcp.c;hb=HEAD
ru.wikipedia.org/wiki/Proxmox
pve.proxmox.com/wiki/Roadmap
Мой комент лиш относился с громкой фразе, что KVM используется с 2009 года. Используется, но не очень широко. Единственная ошибка, которая была сделана это то, что у RedHat не будет решение на его основе, а оно уже есть.
Например вот флейм о (CVE-2011-3192)
www.mail-archive.com/centos@centos.org/msg76267.html
Ну и цитата:
how about getting a rhel subscription and stop flaming around here?
Под драйверами, вы скорей всего понимаете модули, тогда это тоже ядро. В бектрейсе будет видно какому модулю принадлежит функция и можно будет догадаться на кого файлить баг. Если вы ошиблись, разработчики переведут баг на нужную компоненту.
Сложнее когда, что-то не работает, а логах ничего нет. Тогда можно попробовать запустить программу под strace и попытаться понять, что идет не так. Так же стоит попробовать вспомнить, когда в последний раз эта функциональность работала, попытаться загрузить старое ядро и попробовать воспроизвести проблему. Если понять так и не удалось, то лучше зафайлить проблему на user space, просто по статистике в нем больше багов.