eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС
выпущен 4 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: (+4 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Оффтоп —› Лог работы ВМ
Посл.ответ Сообщение

Ранг: 42.5 (посетитель)
Статус: Участник

Создано: 6 марта 2018 13:02 New!
Цитата · Личное сообщение · #1

Можно ли (теоретически) создать тулзу для записи полного лога (небольшой части) работы ВМ - все выполненные инструкции+I/O+memory R/W, с возможностью "воспроизведения" работы ВМ из этого лога?


Ранг: 316.1 (мудрец)
Статус: Участник

Создано: 6 марта 2018 16:08 New!
Цитата · Личное сообщение · #2

spinz

Какой именно вм, это понятие слишком растяжимое. В любом случае придётся сворачивать выполняемый код, выделяя повторные проходы, таким образов обьединять инструкции в блоки/циклы/функции. А это не простая задача. Иначе лог получится бесконечно большим и бесполезным.

Ранг: 42.5 (посетитель)
Статус: Участник

Создано: 6 марта 2018 17:34 New!
Цитата · Личное сообщение · #3

difexacaw

Какая вм, думаю, принципиальной разницы нет, пусть будет вмваря какая-нибудь. А свертка кода это первое, что приходит в голову, конечно.


Ранг: 316.1 (мудрец)
Статус: Участник

Создано: 6 марта 2018 18:08 · Поправил: difexacaw New!
Цитата · Личное сообщение · #4

spinz

ОС выполняет огромное количество инструкций, причём параллельно и на железе. На секундный лог не хватит никакой дисковой памяти, это безумная, невозможная и глупая задача.
Дамп какой то локальной вм возможен и думаю актуален. Даже гпв нт работает на конкретных событиях, а не на трассировке инструкций. Так что для начала вам нужно как всегда сформулировать задачу/цель. Так как это далее определит решение. Такое пилится всегда исходя из главного - эффективности работы(минимальный тайминг). Именно это значительно усложняет задачу, так как придётся выбирать самый эффективный алгоритм в каждой части задачи и как то их совместить. Это всегда так сложно ддя реалтайм вм

Ранг: 42.5 (посетитель)
Статус: Участник

Создано: 6 марта 2018 18:40 New!
Цитата · Личное сообщение · #5

difexacaw
Если взять одноядерную гостевую ВМ, то параллельности не будет. И инструкций за одну секунду не так уж и много, если конечно проц не нагружен на 100%, что бывает редко. Ну пусть даже по максимуму будет 3-4млрд инструкций в секунду (что крайне завышенная цифра), по 4 байта на инструкцию (что тоже завышено) - даже без свертки кода на терабайтный диск уже влезет минута работы ВМ.

Да, цели никакой нет, чисто умозрительная задача пришла в голову.

P.S. Что такое гпв нт?

P.P.S. Думаю, подобная тулза была бы в отдельных случаях востребована.


Ранг: 316.1 (мудрец)
Статус: Участник

Создано: 6 марта 2018 19:10 · Поправил: difexacaw New!
Цитата · Личное сообщение · #6

spinz

Понятие загрузки проца лишь условно, то что вы видите в диспетчере задач статистику - оно не отображает реальную работу проца. Он никогда не останавливается. На младших версиях процов был реализован холодильник" - остановка выполнения через halt. Это уже давно не актуально, учитывая загрузку системы.

> по 4 байта на инструкцию (что тоже завышено) - даже без свертки кода на терабайтный диск уже влезет минута работы ВМ.

Чего 4 байта ?

А как же механизм трансляции, это намного больше займёт памяти. Есчо n*4 на трансляцию. И только для линейного сохранения адресов каждой инструкции. Без выборок данных. На запуск блокнота не хватит никакого диска. Впрочем не важно.

> Да, цели никакой нет, чисто умозрительная задача пришла в голову.

P.S. Что такое гпв нт?

Виндовый гипервизор, во все ключевые события нт встроен обмен данными с визором.

Задача как алгоритмическая весьма интересна, но это уже не конкретно тз, а чисто алгоритмическая и абстрактая задача по свёртке кода. Именно к этому сводится исходная задача и так она должна быть сформулирована.

Ранг: 42.5 (посетитель)
Статус: Участник

Создано: 6 марта 2018 19:40 · Поправил: spinz New!
Цитата · Личное сообщение · #7

difexacaw пишет:
Чего 4 байта ?
А как же механизм трансляции, это намного больше займёт памяти. Есчо n*4 на трансляцию. И только для линейного сохранения адресов каждой инструкции. Без выборок данных. На запуск блокнота не хватит никакого диска. Впрочем не важно.


Ну я для простоты предположил, что каждая инструкция занимает в среднем 4 байта (конечно меньше). Адреса инструкций в общем случае хранить не нужно, т.к. стартуя с определенной точки (снапшота ВМ) и "выполняя" последовательно инструкции из лога, ВМ естественным образом повторит всю работу проца, в т.ч. и вычисление текущего IP. По аналогии с восстановлением из бэкапа базы SQL-сервера - имея исходный бэкап (снапшот) и зная все последующие тразакции, сервер может восстановить конечное состояние БД на момент последней записанной в журнал транзакции. Нужно только отслеживать смену IP из-за интерраптов, которые конечно тоже придется сохранять в лог.

difexacaw пишет:
Он никогда не останавливается.

Ну выборка и выполнение инструкций останавливается же после hlt и mwait, хотя tsc, конечно, продолжает увеличиваться. Впрочем, можно проц и в S1 отправить, тогда и tsc будет стоять


Ранг: 316.1 (мудрец)
Статус: Участник

Создано: 6 марта 2018 20:47 · Поправил: difexacaw New!
Цитата · Личное сообщение · #8

Забавно когда человек не зная принципов работы железа и архитектуру видит аналогию с пхп скриптами

Ранг: 42.5 (посетитель)
Статус: Участник

Создано: 6 марта 2018 23:26 New!
Цитата · Личное сообщение · #9

Да ладно тебе, индий, и работу железа, и архитектуру я знаю гораздо лучше тебя.


Ранг: 134.0 (ветеран)
Статус: Участник
Qt Developer

Создано: 7 марта 2018 13:16 · Поправил: hors New!
Цитата · Личное сообщение · #10

spinz пишет:

Да ладно тебе, индий, и работу железа, и архитектуру я знаю гораздо лучше тебя.


Не знаешь.
А если бы знал, то не городил бы тут чушь про базы SQL сервера.

| Сообщение посчитали полезным: difexacaw


Ранг: 42.5 (посетитель)
Статус: Участник

Создано: 7 марта 2018 14:25 New!
Цитата · Личное сообщение · #11

Вот еще один не умеет в аналогии

Ранг: 0.0 (гость)
Статус: Участник

Создано: 7 марта 2018 17:23 · Поправил: shellstorm New!
Цитата · Личное сообщение · #12

spinz пишет: даже без свертки кода на терабайтный диск уже влезет минута работы ВМ

Хорошая шутка. В реальной жизни хорошо если минута работы блокнота со связанными данными влезет в терабайт

spinz пишет: Вот еще один не умеет в аналогии

Аналогия звучит примерно так: "Земля она круглая, начертим круг и как видим он очень простой, можно всю землю перенести на лист бумаги, главное больше слонов с китами добавить"..


Ранг: 316.1 (мудрец)
Статус: Участник

Создано: 7 марта 2018 17:31 · Поправил: difexacaw New!
Цитата · Личное сообщение · #13

hors

Согласен, после #7 понял что это за тема и что за человек, какой у него масштаб знаний. А изначально вопрос довольно интересный. Это чисто алгоритмическая задача по выделению кода и подобному. Я тут поднимал частную задачу по выделению циклов --> Link <--

Задача тс куда сложнее, это полноценное выделение повторно исполняемых блоков. Это просто решается без использования бд и какого либо связывания, те как алгоритм. Но реально нужны довольно гибкие связанные структуры, со сложной организацией, которую нужно продумать. Думаю именно в этом проблема.

Ранг: 0.0 (гость)
Статус: Участник

Создано: 7 марта 2018 18:09 New!
Цитата · Личное сообщение · #14

> Но реально нужны довольно гибкие связанные структуры, со сложной организацией, которую нужно продумать.

Смысл хранить пустую трассу без данных и ко всему прочему без свертки циклов?
С таким же успехом можно запустить софт заново, эффект будет такой же.
Для реализации time travel необходимо сохранять внушительные куски памяти, а в случае с операционной системой, это придется делать часто и сохранять много. Иначе эта трасса будет просто мусором, такую самому можно генерировать рандомом, используя таблицу частот инструкций, пользы от нее будет столько же.
Сохранение трассы состояний операционной системы это конечно же шиза, а для софта вполне практичная задача, можно делать снапы на входе в функцию и откатываться назад во время отладки, только всё украдено задолго до нас. Этой идеи лет больше чем мне и были реализации, windbg частично умеет.

| Сообщение посчитали полезным: difexacaw


Ранг: 42.5 (посетитель)
Статус: Участник

Создано: 7 марта 2018 18:22 New!
Цитата · Личное сообщение · #15

shellstorm пишет:
Смысл хранить пустую трассу без данных и ко всему прочему без свертки циклов?
С таким же успехом можно запустить софт заново, эффект будет такой же.


Не шаришь. Имея исходное состояние(снапшот) + лог инструкций + I/O и интерраптов, можно в точности восстановить на любой момент времени весь контекст работы ВМ (регистры/память/диск)


Ранг: 316.1 (мудрец)
Статус: Участник

Создано: 7 марта 2018 21:12 · Поправил: difexacaw New!
Цитата · Личное сообщение · #16

spinz

Да по вашему все не шарят, он всё верно выше сказал, вы просто не поняли.

Смотрите, к примеру некий системный код в области быстрой и не прерывной обработки(шедулер) сохраняется в лог. В памяти одна и та же инструкция за секунду выполняется миллионы раз. Если отсутствует структурное связывание(не известна предыдущая инструкция или в общем caller"), то инфа про инструкцию есть просто статистическая(таймер-счётчик). Эта инфа соотвественно бесполезна. Утеря хоть одной инструкции из их огромного потока приведёт к отсутствию связывания и бессмысленности всей затеи.

Думаю следует исключить из данной задачи ос-вм, задача не имеет смысла.

В случае софт вм пример свёртки вы можите глянуть, тут где то был мой пример. Код выделялся из исполнения и d-fetch овер гб-цикла итераций(vmp). Без такой свёртки лог будет расти бесконечно и крайне быстро.

Думаю вы это поняли, задача сформулирована. Вам нужно теперь подумать над реализацией свёртки кода - как выделить повторно используемые блоки, причём с учётом вложенности/рекурсивно и с предельно эффективным по размеру использованием памяти на хранение структур, связующих блоки.

Ранг: 42.5 (посетитель)
Статус: Участник

Создано: 7 марта 2018 21:53 New!
Цитата · Личное сообщение · #17

Внезапно подумалось, что для точного воспроизведения работы ВМ лог инструкций не нужен вообще. Достаточно снапшота и лога интерраптов+I/O. Инструкции проц автоматом возьмет из памяти, сохраненной в снапшоте.


Ранг: 316.1 (мудрец)
Статус: Участник

Создано: 7 марта 2018 22:08 · Поправил: difexacaw New!
Цитата · Личное сообщение · #18

Вот и поговорили

Отличная мотивация на задачу у тс.. тут особо и сказать нечего. У меня детектор реагирует на тролей или пустых" людей, он сработал и редко ошибается.)


Ранг: 539.1 (!)
Статус: Участник
оптимист

Создано: 8 марта 2018 05:19 New!
Цитата · Личное сообщение · #19

spinz пишет:
Можно ли (теоретически) создать тулзу для записи полного лога (небольшой части) работы ВМ - все выполненные инструкции+I/O+memory R/W, с возможностью "воспроизведения" работы ВМ из этого лога?

Всё давно изобретено виртуальная машина с snapshots

Ранг: 42.5 (посетитель)
Статус: Участник

Создано: 8 марта 2018 09:22 New!
Цитата · Личное сообщение · #20

ClockMan

Одного снапшота недостататочно для точного воспроизведения работы ВМ. Тот же сетевой трафик в разные моменты времени будет разным, значит и работа ВМ будет отличаться.

Ранг: 0.0 (гость)
Статус: Участник

Создано: 8 марта 2018 12:33 New!
Цитата · Личное сообщение · #21

> Всё давно изобретено виртуальная машина с snapshots

Снап vm сохраняет одно состояние операционной системы, а ТС хочет из одного состояния сделать back\up trace, то есть по сути из одного сохраненного состояния воспроизвести множественные снапы vm.)

Ранг: 42.5 (посетитель)
Статус: Участник

Создано: 9 марта 2018 12:19 New!
Цитата · Личное сообщение · #22

Чисто гипотетически (c) - сервер падает раз в сутки раз в неделю. Как отлаживать?
Воспроизведение лога ВМ с учетом записанного трафика могло бы сильно помочь


Ранг: 312.4 (мудрец)
Статус: Участник

Создано: 12 марта 2018 20:27 New!
Цитата · Личное сообщение · #23

spinz пишет:
Чисто гипотетически (c) - сервер падает раз в сутки раз в неделю. Как отлаживать?

Добавить эксепшен-хэндлер с сохранением на диск ошибки перед вылетом?

Добавлено спустя 1 минуту
Ну а лучше по эксепшен гоу ту дебаггер

Ранг: 42.5 (посетитель)
Статус: Участник

Создано: 16 марта 2018 04:59 New!
Цитата · Личное сообщение · #24

ну и чем поможет дебаггер? Вот летят тебе тысячи однотипных пакетов - и бах, внезапно все встает колом. Не из-за последнего пакета, а из-за совокупности. И что ты будешь отлаживать?

А эта ситуация повторится в следующий раз через три недели.

Как будешь ловить ошибку?


А есл записать лог ВМ i/o от снапшота до ошибки, то ошибку всегда можно будет воспроизвести


Ранг: 106.9 (ветеран)
Статус: Участник

Создано: 25 апреля 2018 15:51 New!
Цитата · Личное сообщение · #25

Похоже это то что тебе нужно:
https://www.mail-archive.com/qemu-devel@nongnu.org/msg529435.html
 eXeL@B —› Оффтоп —› Лог работы ВМ

У вас должно быть 20 пунктов ранга, чтобы оставлять сообщения в этом подфоруме, но у вас только 0


Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS