Réécriture dynamique de binaire pour le support à long terme des processeurs RISC-V

Type de contrat : CDD

Niveau de diplôme exigé : Bac + 5 ou équivalent

Fonction : Ingénieur scientifique contractuel

Niveau d'expérience souhaité : Jeune diplômé

Mission confiée

Dans le cadre d'un défi Inria, les équipes de projet PACAP et MADMax unissent leurs forces pour développer un démonstrateur de réécriture binaire dynamique afin d'explorer le support à long terme des processeurs RISC-V.

RISC-V offre la possibilité de mettre à jour le jeu d'instructions et le format d'exécutable afin d'exiger que toute instruction lue par le processeur et qui n'est pas prise en charge déclenche une erreur. Cela inclut les codages non implémentés, mais aussi les codages implémentés dans le cadre d'une extension différente (par exemple, le processeur supporte l'extension A avec le codage E, et le binaire contient une instruction de l'extension B avec le codage E). Cette facilité permettrait de fournir des couches de compatibilité dans le cadre d'un service du système d'exploitation, grâce auquel tout binaire compilé ciblant - presque - n'importe quelle extension pourrait être exécuté sur du matériel ne disposant pas de ces extensions, les extensions manquantes étant émulées dans le logiciel. Les logiciels seraient ainsi moins contraints de cibler un ensemble commun d'extensions, ce qui limiterait les performances si le matériel dispose d'extensions susceptibles d'accélérer le code, ou de cibler des extensions spécifiques, ce qui rendrait les binaires encore moins portables.

L'objectif consiste à développer un démonstrateur d'un tel dispositif basé sur la réécriture dynamique de binaires. Le mécanisme pourrait être mis en œuvre soit dans le noyau du système d'exploitation, soit dans le domaine utilisateur. Le noyau offre l'avantage de partager la portabilité entre tous les processus. Le domaine utilisateur, quant à lui, ne nécessite aucun privilège et permet à différents utilisateurs de gérer différentes instructions. Dans un premier temps, nous émulerons la sémantique d'une instruction non supportée lorsqu'elle lève une exception. Nous redonnerons ensuite le contrôle au programme utilisateur. Cependant, ce mécanisme entraînera des surcoûts importants, car le coût d'entrée dans le noyau se chiffre en centaines de cycles, sans même tenir compte du coût de l'émulation elle-même. Par conséquent, un second mécanisme, plus optimisé, tentera de patcher dynamiquement le programme binaire de l'utilisateur avec des sauts réguliers vers des fonctions de bibliothèque émulant les instructions non prises en charge. D'autres optimisations, telles que l'enchaînement de ces appels si le code de l'utilisateur comporte plusieurs instructions contiguës non prises en charge et même l'optimisation de ces appels enchaînés à la volée, pourraient être envisagées dans le cadre de travaux futurs. Néanmoins, on peut considérer qu'il s'agit d'un mécanisme de traduction binaire dynamique à la fois efficace et transparent, le RISC-V étant à la fois l'hôte et la cible.

Des déplacements entre Rennes et Grenoble sont prévus, typiquement trois ou quatre jours tous les six mois. Les frais de déplacement seront remboursés dans les limites de la réglementation en vigueur.

 

Principales activités

Le candidat devra

  • mettre en place une plate-forme RISC-V basée sur qemu
  • spécifier un mécanisme d'émulation basé sur le signal SIGILL
  • spécifier les extensions RISC-V qui peuvent être émulées et celles qui ne le peuvent pas
  • mettre en œuvre un premier démonstrateur de réécriture dynamique de binaire
  • analyser le langage SAIL pour générer automatiquement le code d'émulation.

En outre, le candidat devra

  • rédiger la documentation
  • respecter les bonnes pratiques de développement, notamment la gestion de version, l'intégration continue
  • évaluer les performances de l'outil
  • contribuer à la stratégie open-source du logiciel

Compétences

Compétences techniques et niveau requis :

  • Bon niveau de C/C++
  • Bon niveau de programmation Linux
  • Bases de l'assembleur RISC-V (éventuellement x86)
  • Bonnes compétences en génie logiciel : organisation des sources, tests, gestion de version, intégration continue

Langues : français et anglais lus et écrits, parlé un plus

Compétences relationnelles : travail en équipe nécessaire, notamment gestion de projet en équipe

Avantages

  • Restauration subventionnée
  • Transports publics remboursés partiellement
  • Congés: 7 semaines de congés annuels + 10 jours de RTT (base temps plein) + possibilité d'autorisations d'absence exceptionnelle (ex : enfants malades, déménagement)
  • Possibilité de télétravail (après 6 mois d'ancienneté) et aménagement du temps de travail
  • Équipements professionnels à disposition (visioconférence, prêts de matériels informatiques, etc.)
  • Prestations sociales, culturelles et sportives (Association de gestion des œuvres sociales d'Inria)
  • Accès à la formation professionnelle
  • Sécurité sociale