[gull] Above Meltdown & Spectre

Daniel Cordey dc at pxcluster.com
Mon Jan 15 11:55:29 CET 2018


Hy guys,

On 13. 01. 18 09:43, Dominik Madon wrote:
> Globalement, pour éliminer Spectre et Metdown (un cas particulier de Spectre), il faudrait que les fabricants de processeurs invalident toute entrée en cache chargée sur une prédiction de branchement erronée. On parle de changer la valeur d’un bit en cache. Cela dit, ce comportement était souhaité par les architectes (raison pour laquelle on le trouve sur des processeurs de fabricants différents) dans la mesure où le chargement en cache erroné conduit quand même à une augmentation des performances du CPU, les données (ou instructions) étant parfois utilisées ensuite.

Ou, je vois... mais il il faut donc combiner Spectre et Meltdown pour 
faire vraiment des dégats. J'utilise Spectre pour exécuter du code qui 
va me permettre de modifier le bit de protection d'éxécution privilégié 
qui va ensuite me permettre de lire n'importe quelle adresse. Est-ce 
bien ça ? Néanmoins, il n'est pas facile d'assurer que mon code sera 
exécuté dans ce mode "spéculatif" puisque ce type d'exécution est 
non-déterminé... non ? Il dépend entre autre de l'état de la cache à un 
instant T...

Le problème est sans doute amplifié par les processeurs avec une valeur 
de pipeline importante; comme l'architecture Kaby-Lake qui a un pipeline 
compris entre 14 et 18.

> Une bonne idée pour aller plus vite est détournée.

Quel est le vrai impact de cette "bonne idée" ? Le jeu d'instruction 
IA-32 n'est de loin pas un modèle d'efficacité mais plutôt une 
gigantesque marmite où l'on trouve les dernières technologies à côté 
d'instructions archaïques que l'on doit conserver pour des raisons de 
compatibilité. Ce n'est pas un jeu d'instructions conçu à partir de la 
mesure de performances. Gageons que jamais personne n'a fait de mesure à 
ce sujet mais que l'on ne sait pas donné la peine d'invalider ces 
instructions dans la cache par simple flemme (travail supplémentaire), 
en se disant que ça pourrait servir dans certains cas (à priori pas 
faux)... Quel impact de cette "bonne idée" sur le CPI réel d'une 
application ? Les "misprediction" coûtent très cher en exécution et il y 
a bien des cas où cela "pourrait" être utile de conserver une ligne 
d'instruction dans la cache, mais on ne peut simplement spéculer sur un 
tel impact lorsque l'on connait la complexité du problème entre 
pipeline-icache-RAM. En l'absence de mesure et d'analyse solide on ne 
peut conclure de manière sûre que cela aura un effet positif, et 
mesurable, sur le CPI (Cycle Per Instruction) sur les application et 
surtout sur l'ensemble du système lui-même.

Il faut rajouter à cette problématique le fait d'avoir plusieurs "cores" 
avec "N" canaux pour accéder à la RAM. Ce qui fait que le fonctionnement 
de l'exécution spéculative dépendra du type de processeur et des autres 
processus exécutés en même temps, avec le doux mélange de la complexité 
du contenu des caches L1, L2 et L3 de chaque core, ainsi que de 
l'occupation du bus mémoire à l'instant T. :-)

Ce qui me fait penser que le succès de l'exécution de Spectre est 
peut-être plus aléatoire qu'on ne le pense (sans enlever sa dangerosité 
potentielle !). Mais peut-être suis-je complètement à côté de la 
plaque... :-)

dc


	



More information about the gull mailing list