[[!meta copyright="Copyright © 2011, 2012 Free Software Foundation, Inc."]] [[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable id="license" text="Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled [[GNU Free Documentation License|/fdl]]."]]"""]] [[!tag open_issue_gnumach]] [[!toc]] # IRC, freenode, #hurd, 2011-05-07 very simple examples: system calls use old call gates, which are the slowest path to kernel space modern processors have dedicated instructions now # IRC, freenode, #hurd, 2012-04-22 rah: basically, system calls are slower on mach because they use call gates instead of newer sysenter/sysexit braunr: sysenter/exit is a x86_64 thing rah: apart from that, the code can't get much simpler, and *I* know, for i have studied it, and wrote a compatible version in a clone attempt braunr: on a x86_64 port we'd probably use sysenter/exit youpi: no there are 32-bits instructions, i don't remember if they're called sysenter, it's in my thesis though so i'm sure of it :) braunr: ah, the other part is linux-x86 using them? youpi: yes, glibc uses them and does it really change much nowadays? what is the actual difference between int 80 and sysenter? less checking checking what? the idt? ring levels for example well, checking a ring is fast :) depending on the original and requested levels, there are lookups in tables sysenter always assume 3 to 0 and 0 to 3 for sysexit ah, also it assumes things about segments so that indeed makes context things simpler right but mach doesn't uses int 0x80 it uses an lcall which is a bit slower from what I could read some time ago (not sure if it's still relevant) actually in 64bit mode I had to catch lcall from the invalid instruction trap perhaps it got dropped in 64bit mode