Bonjour,
j'ai un problème lors de l'exécution de l'appel système execve: le processus appelant se bloque dans l'état disk sleep (il ne retourne donc jamais -> pas de message d'erreur).
Quelqu'un saurait-il me dire dans quel cas cela peut se produire?
Voilà pour le problème.
Contexte:
je développe un framework de réplication passive générique.
C'est quoi me direz vous?
En gros, je prends n'importe quelle application, je la lance sur une machine (primary), je la trace (avec ptrace), et je catch toutes les modifications de son état (mémoire, syscall affectant le noyau, registres). A chaque checkpoint, j'envoie ses modifs (updates) à d'autres machines jouant le rôle de réplica, sur lesquelles des instances de la même application sont lancées, mais stoppées (d'ou le terme "passive"). Je mets à jour leur état avec les updates. Comme je bosse au user level, je ne peux pas modifier la mémoire du noyau, je réapplique donc les appels système afin d'avoir le même état noyau sur le primary et les réplicas.
Le but? Si un le primary crash, je peux reprendre l'exécution de l'application sur un des réplica depuis le dernier checkpoint --> système "fault tolerant".
Mon framework fonctionne très bien avec des programmes simples (je supporte les threads et forks sans problème) -> le mécanisme de réapplication des syscalls fonctionne donc correctement. Je suis juste bloqué lors de la "réapplication" de l'appel système execve...notez que pour réappliquer un appel système, je dois injecter du code dans l'application, et l'exécuter (peut-être un mécanisme de protection (éviter les exploits) à ce niveau là empêcherait l'exécution de execve)...
Merci pour vos réponses :-)
Partager