summaryrefslogtreecommitdiff
path: root/open_issues/system_call_mechanism.mdwn
diff options
context:
space:
mode:
authorThomas Schwinge <tschwinge@gnu.org>2012-05-13 06:06:11 +0200
committerThomas Schwinge <tschwinge@gnu.org>2012-05-13 06:06:11 +0200
commit6f9c0342f33f52a2bda98d3709fbefd678bd46d9 (patch)
treeb46200f4ffae908ea2d07224d0ac51132c66d48a /open_issues/system_call_mechanism.mdwn
parent35b719f54c96778f571984065579625bc9f15bf5 (diff)
IRC.
Diffstat (limited to 'open_issues/system_call_mechanism.mdwn')
-rw-r--r--open_issues/system_call_mechanism.mdwn43
1 files changed, 41 insertions, 2 deletions
diff --git a/open_issues/system_call_mechanism.mdwn b/open_issues/system_call_mechanism.mdwn
index 5598148c..68418097 100644
--- a/open_issues/system_call_mechanism.mdwn
+++ b/open_issues/system_call_mechanism.mdwn
@@ -1,4 +1,4 @@
-[[!meta copyright="Copyright © 2011 Free Software Foundation, Inc."]]
+[[!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
@@ -10,8 +10,47 @@ License|/fdl]]."]]"""]]
[[!tag open_issue_gnumach]]
-IRC, freenode, #hurd, 2011-05-07
+[[!toc]]
+
+
+# IRC, freenode, #hurd, 2011-05-07
<braunr> very simple examples: system calls use old call gates, which are
the slowest path to kernel space
<braunr> modern processors have dedicated instructions now
+
+
+# IRC, freenode, #hurd, 2012-04-22
+
+ <braunr> rah: basically, system calls are slower on mach because they use
+ call gates instead of newer sysenter/sysexit
+ <youpi> braunr: sysenter/exit is a x86_64 thing
+ <braunr> 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
+ <youpi> braunr: on a x86_64 port we'd probably use sysenter/exit
+ <braunr> 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 :)
+ <youpi> braunr: ah, the other part
+ <youpi> is linux-x86 using them?
+ <braunr> youpi: yes, glibc uses them
+ <youpi> and does it really change much nowadays?
+ <youpi> what is the actual difference between int 80 and sysenter?
+ <braunr> less checking
+ <youpi> checking what?
+ <youpi> the idt?
+ <braunr> ring levels for example
+ <youpi> well, checking a ring is fast :)
+ <braunr> depending on the original and requested levels, there are lookups
+ in tables
+ <braunr> sysenter always assume 3 to 0 and 0 to 3 for sysexit
+ <youpi> ah, also it assumes things about segments
+ <youpi> so that indeed makes context things simpler
+ <braunr> right
+ <braunr> but mach doesn't uses int 0x80
+ <braunr> it uses an lcall
+ <braunr> which is a bit slower from what I could read some time ago
+ <braunr> (not sure if it's still relevant)
+ <youpi> actually in 64bit mode I had to catch lcall from the invalid
+ instruction trap
+ <youpi> perhaps it got dropped in 64bit mode