¿Qué se necesitaría para construir una máquina virtual que registre continuamente el estado del sistema, desde la CPU hasta la E / S y el almacenamiento?

Núcleo único: ya está hecho (por ejemplo, Vmware 7). Ver, por ejemplo, la segunda publicación aquí:

http://www.replaydebugging.com/

Núcleo múltiple: mucho más difícil.

¿Por qué la diferencia?

Simple de verdad. Al iniciar sesión, solo necesita registrar resultados no deterministas. Bajo un solo núcleo, la mayoría de las instrucciones son deterministas. Por ejemplo, no tiene sentido registrar el resultado de una instrucción add: producirá el mismo resultado. Es necesario registrar cosas como interrupciones y E / S, por supuesto, ya que no son deterministas.

Sin embargo, el multinúcleo hace que la mayoría de las instrucciones de carga sean potencialmente no deterministas, ya que otro núcleo puede cambiar la ubicación de la memoria en particular. Registro de todas las cargas, no factible, desde el punto de vista del rendimiento. Hay formas de mitigar eso, pero aún así, iniciar sesión para reproducir un programa multiproceso que se ejecuta en una máquina de varios núcleos es muy costoso sin soporte de hardware (que, hasta donde sé, actualmente no existe).