Différence entre INT 0x80 et SYSCALL


1

Le SYSCALL instruction est dit la version 64 bits de INT 0x80, mais il est encore possible d'utiliser ce dernier dans le code 64 bits (bien que strace décodent mal à cause de l'ABI 64 bits je suppose) qui passe généralement par un "legacy entry". Mais il y a quelque chose que je ne comprends pas très bien. Pourquoi l'instruction SYSCALL est-elle plus rapide?

1

La réponse courte est que syscall a moins de surcharge que int 0x80.

Pour plus de détails sur pourquoi cela est le cas, voir la réponse acceptée à Intel x86 vs x64 system call, où une question presque identique a demandé:

On me dit que syscall est plus léger et plus rapide que la génération d'une interruption logicielle . Pourquoi est-il plus rapide sur x64 que x86, et puis-je faire un appel système sur x64 en utilisant int 80h?

Voir aussi:

  • Intel P6 vs P7 system call performance
    • ce fil de discussion aborde le ralentissement observé sur certains processeurs Intel causées par la surcharge associée à int 0x80
  • Sysenter Based System Call Mechanism in Linux 2.6

    Il a été découvert que cette méthode d'interruption logicielle [int 0x80] était beaucoup plus lente sur les processeurs Pentium IV. Pour résoudre ce problème, Linus a implémenté un autre mécanisme d'appel système pour tirer parti des instructions SYSENTER/SYSEXIT fournies par tous les processeurs Pentium II +.

  • The Linux kernel, 4.6 Sysenter and the vsyscall page (2003)

    Il a été observé que 2 GHz Pentium 4 était beaucoup plus lent que 850 MHz Pentium III sur certaines tâches, et que cette lenteur est causée par la surcharge très importante de la int 0x80 interruption traditionnelle sur un Pentium 4. Certains modèles de la famille i386 ont des moyens plus rapides d'entrer dans le noyau. Sur Pentium II, il y a l'instruction sysenter. AMD a également une instruction syscall.