Historical sidenotes?

Άγγελος Οικονομόπουλος lydwigvernon at yahoo.co.uk
Mon Jan 28 01:57:01 EET 2002


Όλοι την έχετε αυτή την αίσθηση. Γιά κάποιο λόγο που δεν μπορείτε να 
περιγράψετε, το linux είναι αργό. Κανείς δεν μπορεί να πεί αν αυτό έγινε μετά 
από κάποια συγκεκριμένη αλλαγή στον πηρύνα και ακόμα και οι παλιότεροι 
θυμούνται αυτή την κατάσταση σαν δεδομένη. Μόνο κάποιες εικασίες είχαν γίνει 
ότι το πρόβλημα είναι x86-specific. Σήμερα, 10+ χρόνια μετά την 0.0.1, μετά 
από εντατική μελέτη ενός από τα ελάχιστα μέρη του πηρύνα που έχουν απομείνει 
από τότε, ο Ingo Molnar βρήκε την πηγή του προβλήματος <b>και απέδειξε τη 
διαχρονικότητά του</b> (he's sick. I like him).


the idle thread (on SMP, all idle threads) should clear the %fs and %gs
register, we forgot to clear these registers after the boot process. This
is especially important in kernels with the previous %fs/%gs patch
applied. (The patch below is against 2.5.3-pre3.)

i've checked and it apperas that the 0.01 Linux kernel source code has the
same problem, in boot/head.s the idle task loads the 0x10 selector, and
INIT_TASK's init TSS uses the 0x17 selector for %gs and never clears it.
:-)

while it's not an issue from the correctness point of view in the 0.01
kernel either, the TSS switching microcode probably exeutes slightly
faster if %gs is 0 for both tasks.

so it appears that this lowlevel x86 performance bug(?) is more than 11
years old! :-)

	Ingo

--- linux/arch/i386/kernel/setup.c.orig	Sun Jan 27 15:14:43 2002
+++ linux/arch/i386/kernel/setup.c	Sun Jan 27 16:01:34 2002
@@ -2803,9 +2803,10 @@
 	load_TR(nr);
 	load_LDT(&init_mm);

-	/*
-	 * Clear all 6 debug registers:
-	 */
+	/* Clear %fs and %gs. */
+	asm volatile ("xorl %eax, %eax; movl %eax, %fs; movl %eax, %gs");
+
+	/* Clear all 6 debug registers: */

 #define CD(register) __asm__("movl %0,%%db" #register ::"r"(0) );


_________________________________________________________
Do You Yahoo!?
Get your free @yahoo.com address at http://mail.yahoo.com




More information about the Linux-greek-users mailing list