Сейчас на форуме: Kybyx (+3 невидимых) |
eXeL@B —› Оффтоп —› Лог работы ВМ |
Посл.ответ | Сообщение |
|
Создано: 06 марта 2018 13:02 · Личное сообщение · #1 |
|
Создано: 06 марта 2018 16:08 · Личное сообщение · #2 |
|
Создано: 06 марта 2018 17:34 · Личное сообщение · #3 |
|
Создано: 06 марта 2018 18:08 · Поправил: difexacaw · Личное сообщение · #4 spinz ОС выполняет огромное количество инструкций, причём параллельно и на железе. На секундный лог не хватит никакой дисковой памяти, это безумная, невозможная и глупая задача. Дамп какой то локальной вм возможен и думаю актуален. Даже гпв нт работает на конкретных событиях, а не на трассировке инструкций. Так что для начала вам нужно как всегда сформулировать задачу/цель. Так как это далее определит решение. Такое пилится всегда исходя из главного - эффективности работы(минимальный тайминг). Именно это значительно усложняет задачу, так как придётся выбирать самый эффективный алгоритм в каждой части задачи и как то их совместить. Это всегда так сложно ддя реалтайм вм ----- vx |
|
Создано: 06 марта 2018 18:40 · Личное сообщение · #5 difexacaw Если взять одноядерную гостевую ВМ, то параллельности не будет. И инструкций за одну секунду не так уж и много, если конечно проц не нагружен на 100%, что бывает редко. Ну пусть даже по максимуму будет 3-4млрд инструкций в секунду (что крайне завышенная цифра), по 4 байта на инструкцию (что тоже завышено) - даже без свертки кода на терабайтный диск уже влезет минута работы ВМ. Да, цели никакой нет, чисто умозрительная задача пришла в голову. P.S. Что такое гпв нт? P.P.S. Думаю, подобная тулза была бы в отдельных случаях востребована. |
|
Создано: 06 марта 2018 19:10 · Поправил: difexacaw · Личное сообщение · #6 spinz Понятие загрузки проца лишь условно, то что вы видите в диспетчере задач статистику - оно не отображает реальную работу проца. Он никогда не останавливается. На младших версиях процов был реализован холодильник" - остановка выполнения через halt. Это уже давно не актуально, учитывая загрузку системы. > по 4 байта на инструкцию (что тоже завышено) - даже без свертки кода на терабайтный диск уже влезет минута работы ВМ. Чего 4 байта ? А как же механизм трансляции, это намного больше займёт памяти. Есчо n*4 на трансляцию. И только для линейного сохранения адресов каждой инструкции. Без выборок данных. На запуск блокнота не хватит никакого диска. Впрочем не важно. > Да, цели никакой нет, чисто умозрительная задача пришла в голову. P.S. Что такое гпв нт? Виндовый гипервизор, во все ключевые события нт встроен обмен данными с визором. Задача как алгоритмическая весьма интересна, но это уже не конкретно тз, а чисто алгоритмическая и абстрактая задача по свёртке кода. Именно к этому сводится исходная задача и так она должна быть сформулирована. ----- vx |
|
Создано: 06 марта 2018 19:40 · Поправил: spinz · Личное сообщение · #7 difexacaw пишет: Чего 4 байта ? А как же механизм трансляции, это намного больше займёт памяти. Есчо n*4 на трансляцию. И только для линейного сохранения адресов каждой инструкции. Без выборок данных. На запуск блокнота не хватит никакого диска. Впрочем не важно. Ну я для простоты предположил, что каждая инструкция занимает в среднем 4 байта (конечно меньше). Адреса инструкций в общем случае хранить не нужно, т.к. стартуя с определенной точки (снапшота ВМ) и "выполняя" последовательно инструкции из лога, ВМ естественным образом повторит всю работу проца, в т.ч. и вычисление текущего IP. По аналогии с восстановлением из бэкапа базы SQL-сервера - имея исходный бэкап (снапшот) и зная все последующие тразакции, сервер может восстановить конечное состояние БД на момент последней записанной в журнал транзакции. Нужно только отслеживать смену IP из-за интерраптов, которые конечно тоже придется сохранять в лог. difexacaw пишет: Он никогда не останавливается. Ну выборка и выполнение инструкций останавливается же после hlt и mwait, хотя tsc, конечно, продолжает увеличиваться. Впрочем, можно проц и в S1 отправить, тогда и tsc будет стоять |
|
Создано: 06 марта 2018 20:47 · Поправил: difexacaw · Личное сообщение · #8 |
|
Создано: 06 марта 2018 23:26 · Личное сообщение · #9 |
|
Создано: 07 марта 2018 13:16 · Поправил: hors · Личное сообщение · #10 spinz пишет: Да ладно тебе, индий, и работу железа, и архитектуру я знаю гораздо лучше тебя. Не знаешь. А если бы знал, то не городил бы тут чушь про базы SQL сервера. ----- http://ntinfo.biz | Сообщение посчитали полезным: difexacaw |
|
Создано: 07 марта 2018 14:25 · Личное сообщение · #11 |
|
Создано: 07 марта 2018 17:23 · Поправил: shellstorm · Личное сообщение · #12 spinz пишет: даже без свертки кода на терабайтный диск уже влезет минута работы ВМ Хорошая шутка. В реальной жизни хорошо если минута работы блокнота со связанными данными влезет в терабайт spinz пишет: Вот еще один не умеет в аналогии Аналогия звучит примерно так: "Земля она круглая, начертим круг и как видим он очень простой, можно всю землю перенести на лист бумаги, главное больше слонов с китами добавить".. |
|
Создано: 07 марта 2018 17:31 · Поправил: difexacaw · Личное сообщение · #13 hors Согласен, после #7 понял что это за тема и что за человек, какой у него масштаб знаний. А изначально вопрос довольно интересный. Это чисто алгоритмическая задача по выделению кода и подобному. Я тут поднимал частную задачу по выделению циклов Задача тс куда сложнее, это полноценное выделение повторно исполняемых блоков. Это просто решается без использования бд и какого либо связывания, те как алгоритм. Но реально нужны довольно гибкие связанные структуры, со сложной организацией, которую нужно продумать. Думаю именно в этом проблема. ----- vx |
|
Создано: 07 марта 2018 18:09 · Личное сообщение · #14 > Но реально нужны довольно гибкие связанные структуры, со сложной организацией, которую нужно продумать. Смысл хранить пустую трассу без данных и ко всему прочему без свертки циклов? С таким же успехом можно запустить софт заново, эффект будет такой же. Для реализации time travel необходимо сохранять внушительные куски памяти, а в случае с операционной системой, это придется делать часто и сохранять много. Иначе эта трасса будет просто мусором, такую самому можно генерировать рандомом, используя таблицу частот инструкций, пользы от нее будет столько же. Сохранение трассы состояний операционной системы это конечно же шиза, а для софта вполне практичная задача, можно делать снапы на входе в функцию и откатываться назад во время отладки, только всё украдено задолго до нас. Этой идеи лет больше чем мне и были реализации, windbg частично умеет. | Сообщение посчитали полезным: difexacaw |
|
Создано: 07 марта 2018 18:22 · Личное сообщение · #15 shellstorm пишет: Смысл хранить пустую трассу без данных и ко всему прочему без свертки циклов? С таким же успехом можно запустить софт заново, эффект будет такой же. Не шаришь. Имея исходное состояние(снапшот) + лог инструкций + I/O и интерраптов, можно в точности восстановить на любой момент времени весь контекст работы ВМ (регистры/память/диск) |
|
Создано: 07 марта 2018 21:12 · Поправил: difexacaw · Личное сообщение · #16 spinz Да по вашему все не шарят, он всё верно выше сказал, вы просто не поняли. Смотрите, к примеру некий системный код в области быстрой и не прерывной обработки(шедулер) сохраняется в лог. В памяти одна и та же инструкция за секунду выполняется миллионы раз. Если отсутствует структурное связывание(не известна предыдущая инструкция или в общем caller"), то инфа про инструкцию есть просто статистическая(таймер-счётчик). Эта инфа соотвественно бесполезна. Утеря хоть одной инструкции из их огромного потока приведёт к отсутствию связывания и бессмысленности всей затеи. Думаю следует исключить из данной задачи ос-вм, задача не имеет смысла. В случае софт вм пример свёртки вы можите глянуть, тут где то был мой пример. Код выделялся из исполнения и d-fetch овер гб-цикла итераций(vmp). Без такой свёртки лог будет расти бесконечно и крайне быстро. Думаю вы это поняли, задача сформулирована. Вам нужно теперь подумать над реализацией свёртки кода - как выделить повторно используемые блоки, причём с учётом вложенности/рекурсивно и с предельно эффективным по размеру использованием памяти на хранение структур, связующих блоки. ----- vx |
|
Создано: 07 марта 2018 21:53 · Личное сообщение · #17 |
|
Создано: 07 марта 2018 22:08 · Поправил: difexacaw · Личное сообщение · #18 |
|
Создано: 08 марта 2018 05:19 · Личное сообщение · #19 spinz пишет: Можно ли (теоретически) создать тулзу для записи полного лога (небольшой части) работы ВМ - все выполненные инструкции+I/O+memory R/W, с возможностью "воспроизведения" работы ВМ из этого лога? Всё давно изобретено виртуальная машина с snapshots ----- Чтобы правильно задать вопрос, нужно знать большую часть ответа. Р.Шекли. |
|
Создано: 08 марта 2018 09:22 · Личное сообщение · #20 |
|
Создано: 08 марта 2018 12:33 · Личное сообщение · #21 |
|
Создано: 09 марта 2018 12:19 · Личное сообщение · #22 |
|
Создано: 12 марта 2018 20:27 · Личное сообщение · #23 |
|
Создано: 16 марта 2018 04:59 · Личное сообщение · #24 ну и чем поможет дебаггер? Вот летят тебе тысячи однотипных пакетов - и бах, внезапно все встает колом. Не из-за последнего пакета, а из-за совокупности. И что ты будешь отлаживать? А эта ситуация повторится в следующий раз через три недели. Как будешь ловить ошибку? А есл записать лог ВМ i/o от снапшота до ошибки, то ошибку всегда можно будет воспроизвести |
|
Создано: 25 апреля 2018 15:51 · Личное сообщение · #25 |
eXeL@B —› Оффтоп —› Лог работы ВМ |