DragonflyBSD fast syscall support and x86 improvements
dillon at apollo.backplane.com
Fri Jun 23 17:31:22 PDT 2006
:> I think some degree of registerization might be beneficial, but with
:> the provisio that all we are doing here is passing the system call
:> arguments themselves in registers, not attempting to reimplement
:> the libc functions as registerized calls.
:Why not? The point is to not touch the uspace stack here from the
:program side and to not touch the kspace stack to kernel side. Even if
:we reasonably can assume L1 stacks for successive hits...(so the
:improvement is not so important here...).
For better or for worse, the IA32 ABI is stack-based. Believe me,
being an old Amiga guy I would *LOVE* to see the registerized call
standard be the default rather then a special GCC '__blah' qualifier.
We're stuck with it and I really do not want to go through the
months of pain that would be caused if we triedto change the default.
If I understand correctly, the IA64 standard is registerized by default
(but I could be wrong).
Also, as far as IA32 goes, the limited number of registers makes it
questionable whether trying to pass more then a few arguments actually
More concretely, GCC generally no longer uses pushl but instead uses
movl <qty>,offset(%esp), and generally tries to maintain some stack
reserve for storing call arguments. Such operations are far easier for
the cpu to pipeline then pushl. The pipeline will pick the data right
out of the write buffer much of the time. The only real performance
issue is with the cpu's write buffer itself (though in newer AMD
architectures where caches can master dirty data, even that becomes
a non-issue as well because the data winds up hardly ever being flushed
to dynamic ram).
<dillon at xxxxxxxxxxxxx>
More information about the Kernel