COMPTOIR
  
register

JCC Erratum : un nouveau bug hardware chez Intel

Les bugs hardwares, voilà un terme que nombre d’entreprises redoutent. En effet, si une rustine peut aisément corriger un souci logiciel, les problèmes matériels sont souvent plus coûteux, qu’il s’agisse de performances suite aux correctifs ou de rappels matériels en vue de correctifs. Et, pas de chance, c’est sur Intel que le bâton a, encore une fois frappé, avec un souci matériel embarrassant, nommé JCC Erratum.

 

Cette fois-ci, le bug touche aux fondamentaux d’un CPU : ses instructions. En effet, ce JCC Erratum signifie Jump Conditionnal Code Erratum : un comportement indéfini (comprenez des crashs potentiels, corruption de données, voire pire) peut avoir lieu sous des conditions spécifiques. Plus précisément, dans un processeur x86, les instructions CISC sont découpées en micro-instructions RISC avant d’être envoyées aux ports les exécutant. Sauf que, dans une optique de performances (toujours !), un buffer a été intégré, de manière à pouvoir retrouver immédiatement les micro-instructions déjà vues sans repasser par la case décodage si ces dernières ont été exécutées suffisamment récemment. Et, comme tous les caches, ce buffer est séparé en lignes de cache, chacune pouvant être vidée indépendamment des autres, et doit être chargée à chaque fois dans son intégralité. Et dans ce Decoded ICache, la taille des lignes est de 32 octets, sauf qu’un bug peut se produire lorsqu’un saut (jump), éventuellement fusionné avec une autre opération de comparaison précédente, est placé à la frontière entre deux lignes. Les détails précis ne sont pas connus, mais, en gros, mieux vaut ne pas être là quand ça arrive !

 

intel 32 bytes boundaries

Un placement spécifique des instructions, mais pas si extraordinaire que ça...

 

Pour une fois, ce bug n’est pas porteur d’insécurités. Par contre, toutes les applications utilisant des jumps sont touchées... et les branchements conditionnels représentent selon Intel près de 15 % du total des instructions : autant dire que la probabilité de tomber sur un jump potentiellement défectueux au cours de n’importe quel programme est assez élevée. Comprenez donc que tout programme peut potentiellement passer dans une zone corrigé par la rustine, et donc être ralenti. Si Intel communique sur une perte de performance de 4 % en moyenne, des cas pathologiques peuvent se produire dans lesquels l’application sera bien plus lente encore. Notre confrère Phoronix a réalisé un travail de titan pour déterminer dans quelle mesure les temps d’exécutions et nombre d’images par seconde s’en trouvaient dégradés au moyen de deux dossiers — tous deux réalisés sous Linux — disponibles en bas de page. Sans trop spoiler, les résultats dépendent des applications, allant du rien du tout à un bon 10 % en applicatif. Côté gaming, les joueurs sont mieux lotis, car les pertes se situent principalement dans le domaine de l’imperceptible, dépassant difficilement des 2 % d’écart.

 

Notez que ce correctif correspond à un patch annulant les cas problématiques à l’exécution, mais des moyens sans pertes de performances sont attendus dans les compilateurs (il suffit de rajouter des instructions ou des préfixes qui ne font rien pour modifier la place des instructions dans le programme et éviter ces fameuses frontières). Il faudra par contre repasser par leur moulinette si vous souhaitez utiliser une application rustinée : pas forcément possible pour tous ! Pour ce qui est des CPU impactés, comptez tout le monde depuis Skylake — soit 4 ans de processeurs. De quoi faire encore regretter les Sandy Bridge ? Cela finira par devenir de l’acharnement nostalgique ; par contre il est clair que le concurrent AMD bénéficie indirectement d’une bonne presse, étant complètement non concerné par ce bug. Gageons que la situation s’améliore avec la prochaine révision architecturale (oui, Ice Lake, c’est bien toi que l’on attend !).

 

Pour les effets en bench, c’est par ici pour l’applicatif, et par là en jeu !
 
intel leap ahead cdh
Une gen en avant, trois bugs en arrière...
Un poil avant ?

Et revoilà Ampere, cette fois avec des "dates" ?

Un peu plus tard ...

Intel et la sécurité : une faille type Meltdown sur les extensions TSX découverte, TAA

Les 14 ragots
Les ragots sont actuellement
ouverts à tous, c'est open bar !
par Xorg, le Jeudi 14 Novembre 2019 à 23h13  
par Un ragoteur Gaulois du Grand Est le Mercredi 13 Novembre 2019 à 16h59
de 2% à 10% de perte de performance, à celà s'ajoute les 15% des précédents bugs, décidément, rien ne va plus chez intel
Chez Intel, ils innovent comme ils peuvent : tous les ans, ils n'annoncent plus des gains de performance, mais des diminutions.
En vrai, on dirait que la boîte de Pandore a été ouverte. On voit que certains gains en performance ont été fait au détriment de la sécurité, et maintenant que les bugs et les problèmes de sécurité sont dévoilés, Intel doit faire machine arrière. C'est un sacré coup dur pour Intel, entre le 10nm qui peine à arriver et ça, je trouve que ça a entaché leur image.
par Un ragoteur qui draille du Grand Est, le Jeudi 14 Novembre 2019 à 10h15  
Je suis encore sous Sandy Bridge, ouf!!: Je peux souffler
par Nicolas D., le Mercredi 13 Novembre 2019 à 20h20  
par Un ragoteur sans nom de Bretagne le Mercredi 13 Novembre 2019 à 15h48
Je suis etonné que vous ne parliez pas de TAA qui à été rendu public hier (1).
D'habitude vous aimez bien trashtalk Intel, et là avec TAA il y a de quoi faire

https://mdsattacks.com/#ridl-ng
À une news près tu étais bon !
par Un programmeur en Île-de-France le Mercredi 13 Novembre 2019 à 14h47
A noter que les compilateurs alignent déjà les routines accédées via un "jump" sur 16 voire 32 octets: il n'y a alors aucun risque de plantage (car l'instruction de saut elle même fait moins de 16 octets).
Les adresses destinations des jumps oui, mais pas les adresses correspondant aux positions des jumps eux-même, il me semble. Or c'est de celles-là dont il est question pour ce bug . Ou alors j'ai mal compris ton ragot ? Car les instruction x86 ne sont pas de tailles constantes, donc même en alignant le d2but de la routine, rien ne garantie que la fin le soit également. Par contre, je pense que ce bug se produit sous des conditions extrêmement précises, ce qui fait qu'il est passé inaperçu jusqu'alors
par Tux (le vrai) en Bourgogne-Franche-Comté, le Mercredi 13 Novembre 2019 à 18h41  
Y en a qui achètent encore de l'Intel en ce moment ?
par Un hardeur des Pays de la Loire, le Mercredi 13 Novembre 2019 à 18h02  
Si on doit cumuler tout les correctifs qui bouvent chacun 5/10% de perf le cpu va finir par mouliner rien que pour faire tourner ses patch
Sérieusement Ils mériteraient de se manger des poursuites judiciaire monstrueuse pour leurs cpu passoir
AMD s'est mangé une classe action pour 100fois moins pire, avec une histoire interprétation sur le nombre de core réel
par Un ragoteur Gaulois du Grand Est, le Mercredi 13 Novembre 2019 à 16h59  
de 2% à 10% de perte de performance, à celà s'ajoute les 15% des précédents bugs, décidément, rien ne va plus chez intel
par Deus, le Mercredi 13 Novembre 2019 à 16h19  
par Un ragoteur sans nom de Bretagne le Mercredi 13 Novembre 2019 à 16h14
Non ce n'est pas si incroyable, le bug est un comportement indefini, cela veut dire que quand il arrive on peut ne même pas se rendre compte qu'il y a eu un bug.
De plus c'est pas juste tout les jumps qui ont un problème, c'est un jump dans un état micro-architectural très spécifique.

Donc finalement c'est un bug de très rare, et très peu visible, avec très peu d'impacte. Il y en a surement encore dans le processeur, et il y a probablement des bugs aussi rare/peu visible/avec peu d'impacte chez AMD et ARM.
Ah ok je pensais que c'etait tout les appels a Jump qui etaient suceptibles d'etre affectes !! c'est moins alarmant deja.
par Un ragoteur sans nom de Bretagne, le Mercredi 13 Novembre 2019 à 16h14  
par Deus le Mercredi 13 Novembre 2019 à 15h37
J'ose immaginer que ca doit pas etre simple a trouver comme bug, mais bon sang 4 ans pour s'appercevoir de ca... le Jump c'est quand meme une instruction super utilisee !!!
Non ce n'est pas si incroyable, le bug est un comportement indefini, cela veut dire que quand il arrive on peut ne même pas se rendre compte qu'il y a eu un bug.
De plus c'est pas juste tout les jumps qui ont un problème, c'est un jump dans un état micro-architectural très spécifique.

Donc finalement c'est un bug de très rare, et très peu visible, avec très peu d'impacte. Il y en a surement encore dans le processeur, et il y a probablement des bugs aussi rare/peu visible/avec peu d'impacte chez AMD et ARM.
par Un ragoteur sans nom de Bretagne, le Mercredi 13 Novembre 2019 à 15h48  
Je suis etonné que vous ne parliez pas de TAA qui à été rendu public hier (1).
D'habitude vous aimez bien trashtalk Intel, et là avec TAA il y a de quoi faire

https://mdsattacks.com/#ridl-ng
par Deus, le Mercredi 13 Novembre 2019 à 15h37  
J'ose immaginer que ca doit pas etre simple a trouver comme bug, mais bon sang 4 ans pour s'appercevoir de ca... le Jump c'est quand meme une instruction super utilisee !!!
par Un ragoteur de transit des Pays de la Loire, le Mercredi 13 Novembre 2019 à 15h11  
Tu bluffes Martoni, un service QA chez Intel ?!
par Un programmeur en Île-de-France, le Mercredi 13 Novembre 2019 à 14h47  
A noter que les compilateurs alignent déjà les routines accédées via un "jump" sur 16 voire 32 octets: il n'y a alors aucun risque de plantage (car l'instruction de saut elle même fait moins de 16 octets).

Avec gcc, c'est -falign-jumps=16 (ou 32) qui détermine cela, et -falign-jumps=16 est aussi activée automatiquement dés le niveau d'optimisation -O2 (utilisé par toutes les distributions Linux) car cet alignement est aussi favorable à la vitesse d'exécution du code (récupération plus rapide des instructions en mémoire lorsque l'accès mémoire est aligné sur 16 octets ou un multiple de 16).

Du coup, je n'ai personnellement jamais constaté de problème (plantage ou autre) avec des CPU Skylake et plus... C'est aussi sans doute la raison pour laquelle Intel n'a pas remarqué ce bogue (tout de même fort embarrassant pour leur service QA).