Aloha 2.6 !

Μόνιμος σύνδεσμος: /writings/kernel26/.


Εισαγωγή

Υποθέτω πως για τους ενασχολούντες, η είδηση της βάφτισης του linux kernel tree σε 2.6 στις 17 του Δεκέμβρη 2003 είναι ήδη γνωστή. Πιθανώς ακόμη, οι περισσότεροι να ξεπέρασαν την κλασική (και ορθότατη) στάση του "δουλεύει, άστο όπως είναι" και να τον δοκίμασαν, σε μη-workstation μηχανηματάκια - όπως π.χ. σε απλά, καλοστημένα ADSL NAT/firewall PCs τα οποία συνήθως πειράζεις μόνο για κανένα OpenSSH patch.

Οι διαφορές του νέου πυρήνα από τον 2.4 είναι τόσο σημαντικές, που συζητήθηκε η ονομασία του σε 3.0 αντί 2.6. Ακολουθεί μια προσπάθεια για μια περιεκτική αλλά όσο γίνεται πιο σύντομη ανακεφαλαίωση του τι υπάρχει στη νέα αυτή έκδοση του linux kernel. Έτσι κι αλλιώς, για τέτοιου είδους τεχνικά κείμενα, η καταγραφή σε σχέση με την ανάγνωση και κατανόηση είναι οικονομική - κάτι σε στυλ O(n).

Λίγη ιστορία

Η προηγούμενη σταθερή έκδοση του πυρήνα ήταν η 2.4.0, η οποία ανακοινώθηκε στις 4/1/01, δυο χρόνια πριν. Για αυτούς που αναρωτιούνται γιατί το 2.4++ κάνει 2.6, να πω πως παραδοσιακά στον linux kernel, οι minor εκδόσεις που έχουν ζυγό αριθμό είναι οι σταθερές (2.4, 2.6, ...), ενώ αυτές που έχουν μονό αριθμό είναι οι development (2.5, 2.7, ...). Όταν ο πυρήνας είναι αρκετά σταθερός, παίρνει ζυγό αριθμό έκδοσης (X.Y - το Y ζυγό), ενώ αμέσως ξεκινά το επόμενο μονής έκδοσης developing tree (τώρα π.χ., το 2.7). Φυσικά, για σκοπούς συντήρησης και bugfixes, η σταθερή έκδοση συνεχίζει να αναπτύσσεται παράλληλα με την development (2.4.1 ... 2.4.22), χωρίς όμως να ενσωματώνει συνήθως πολύ μεγάλες αλλαγές - μια και οι μεγάλες αλλαγές απαιτούν και μεγάλες περιόδους testing/bugfixing.

Η νέα έκδοση

Μερικές αρχικές και σημαντικές σημειώσεις για τη μεταγλώττιση του 2.6:

Αρχιτεκτονικές

Ο νέος πυρήνας ενσωματώνει υποστήριξη για NUMA αρχιτεκτονικές, ένα βήμα πιο πάνω από το SMP, όπου η προσπέλαση στη μνήμη δεν είναι ισότιμη μεταξύ των CPU. Επίσης, υποστηρίζεται το Intel PAE για 64 GB paged RAM, αριθμός χρηστών και groups μέχρι και 4 εκατομμύρια (4M), αριθμός process μέχρι 1Μ, filesystems μέχρι 16 ΤΒ σε 32-bit αρχιτεκτονικές και 8 ΕΒ σε 64-bit, ενώ ο αριθμός των major και minor αριθμών που μπορεί να έχει μια συσκευή μεγαλώνει από 255/255 σε 4096/1Μ αντίστοιχα.

Προστέθηκε υποστήριξη για την x86-64 αρχιτεκτονική (AMD Hammer), την ppc64 και την ψευδο-αρχιτεκτονική του User mode Linux (UML aka penguin-in-the-penguin - kernel virtual machine η οποία επιτρέπει την εξομοίωση ενός linux συστήματος μέσα από το ίδιο το linux). Πλέον αναγνωρίζονται οι virtual επεξεργαστές στα Intel Hyperthreaded CPUs, δίνοντας καλύτερες αποδόσεις στο scheduling και ενσωματώθηκε το uClinux project στον ίδιο τον πυρήνα, προσθέτονας υποστήριξη για επεξεργαστές χωρίς MMU όπως οι Hitachi Η8/3000, NEC v850, Motorola m86k.

Ταχύτητα/απόκριση

Πλησιάζοντας πιο κοντά σε ένα Real-Time OS (RTOS), ο νέος πυρήνας ανταποκρίνεται πιο γρήγορα στις αιτήσεις που το χρειάζονται (για παράδειγμα στο I/Ο). Με την 2.6 έκδοση, ο ίδιος ο kernel είναι preemptible, επιτρέποντας έτσι σε εφαρμογές να διακόψουν τον ίδιο τον kernel όταν αυτός κάνει κάτι που πριν θεωρούνταν ως μη-ικανό διακοπής.

Επίσης, ενσωματώθηκε στον πυρήνα ο O(1) scheduling αλγόριθμος του Ingo Molnar, ο οποίος αποφεύγει την αναζήτηση της συνδεδεμένης λίστας των διεργασιών κάθε φορά που τρέχει ο scheduler για να επιλέξει ποια διεργασία θα εκτελεστεί, και συνεπώς μειώνει το χρόνο που μένει το σύστημα στο kernelspace, και συνεπώς μειώνει και το latency του συστήματος. Ο αλγόριθμος αυτός παρουσιάζει μεγάλη διαφορά σε μεγάλο αριθμό από processes (όπως για παράδειγμα σε μεγάλα SMP συστήματα).

Η εσωτερική αρχιτεκτονική της διαχείρησης νημάτων στον πυρήνα ξαναγράφτηκε υποστηρίζοντας την NPTL να τρέχει από πάνω του. Αυτό συνεπάγεται αισθητή διαφορά στην ταχύτητα, την υποστήριξη για thread groups, τοπική μνήμη για ξεχωριστά threads, POSIX-style signals κλπ.

Τα I/O τυγχαίνουν καλύτερης διαχείρησης, ενώ τώρα υποστηρίζονται τα futexes (Fast User-Space Mutexes) τα οποία παρακάμπτουν τα bottlenecks των συνηθισμένων mutexes και επίσης χρησιμοποιούνται από την NPTL. Επίσης, η συμπεριφορά των sched_yield() και yield() άλλαξε, δίνοντας μεγαλύτερους χρόνους sleep στις διεργασίες που την καλούν.

Όλα τα παραπάνω θα επηρεάσουν την γενική αίσθηση του desktop ενός χρήστη, αλλά και εφαρμογές που χρειάζονται χρονική ακρίβεια για να πετύχουν κάποιο αποτέλεσμα.

Input/Output

Το human interface layer έχει αλλάξει ώστε να είναι πιο modular, κάτι το οποίο οφελεί πολύ τα embedded συστήματα. Πλέον υποστηρίζονται touchscreens, μη-συνηθισμένα ποντίκια (με πολλά κουμπιά, scroll-wheels κλπ), πολλά νέα joysticks (και του X-Box) και braille devices για πρόσβαση στο linux από τυφλούς. Το framebuffer/console layer έχει υποστεί αρκετές αλλαγές, ενώ πλέον υπάρχει βασική υποστήριξη για AGP 3.0.

Στον τομέα των multimedia, το ALSA αντικατέστησε το OSS. Αυτό στο linux σημαίνει μια νεότερη, thread και SMP-safe αρχιτεκτονική, η οποία έχει καλύτερη υποστήριξη για πολλούς επεξεργαστές και κάρτες ήχου, webcams, συσκευές ραδιοφώνου/τηλεόρασης και digital video recorders ενώ μπορεί να εξομοιώσει και το OSS. Ίσως χρειαστεί να αναβαθμίσετε τα userspace tools σας.

Η πιο εμφανής αλλαγή στον τομέα των συσκευών είναι η εγγενής υποστήριξη του USB 2.0, το οποίο έχει ονομαστική μέγιστη μεταφορά δεδομένων 480 Mbits/s (το παραδοσιακό USB έχει 12 Mbits/s), ενώ πλέον οι USB συσκευές αριθμούνται σαν ξεχωριστά devices. Επιπρόσθετα, υπάρχει το USB-gadget, ώστε ένα σύστημα με linux να μπορεί να συμπεριφερθεί ως USB client αντί σαν host - χρήσιμο για διασύνδεση ενός linux-powred συστήματος (πχ PDA) σε ένα PC. Επίσης, όλες οι wireless τεχνολογίες που είναι στη μόδα υποστηρίζονται εγγενώς τώρα (Bluetooth, IrDA, ...).

Η έκδοση 2.6 του πυρήνα έχει αρκετές αλλαγές (πάντα προς το καλύτερο) σχετικά με τις συσκευές και τα modules του πυρήνα. Ξεκινώντας από μικρές αλλαγές, όπως η μετονομασία των driver modules από .ο σε .ko (kernel object), μέχρι σε επανεξέταση ολόκληρου του unified device model (ίσως χρειαστεί αναβάθμιση το mkinitrd σας). Μεγάλη προσπάθεια δόθηκε στην τυποποίηση των ανακοινώσεων των modules για το τι hardware υποστηρίζουν και της μείωσης της διαφοράς μεταξύ των hotplug συσκευών (από PCMCIA, USB, Fireware μέχρι και PCI κάρτες) και των κανονικών, παραδοσιακών συσκευών, ενώ υποστηρίζεται και ένας fake driver για hotplug PCI κάρτες.

Block Devices

Το IDE/ATA υποσύστημα έχει ξαναγραφτεί από την αρχή, με έμφαση στο scalability. Τώρα υποστηρίζονται Serial Ata devices με ρυθμούς διαμεταγωγής μέχρι 150 ΜΒ/s. Tα IDE CD-RW υποστηρίζονται μέσω του IDE driver (δε χρειάζεται SCSI-emulation πλέον) και έτσι έχουν ενεργοποιημένο το DMA, το οποίο επιτρέπει στις συσκευές να αιτούνται και να εκπληρώνουν αιτήσεις για μπλοκ δεδομένων κατευθείαν μέσω preallocated memory χωρίς να απασχολούν το CPU, αντίθετα με το PIO mode. Αυτό προφανώς έχει ως αποτέλεσμα την αύξηση της ταχύτητας εγγραφής CD με μείωση των buffer underruns και σαφή βελτίωση της ταχύτητας του CD ripping.

Ενσωματώθηκε υποστήριξη για IDE-TCQ (Tagged Command Queueing), ώστε να στέλνονται αιτήσεις σε συσκευές χωρίς να περιμένουν τις προηγούμενες να ολοκληρωθούν. Οι συσκευές που υποστηρίζουν ορισμένες λειτουργίες (π.χ. head positioning) μπορούν ελέγχοντας την ουρά να εξυπηρετούν τις αιτήσεις με διαφορετική σειρά ώστε να πετυγχαίνουν καλύτερη απόδοση.

Το udev αντικαθιστά το devfs και τo usbfs αντικαθιστά το usbdevfs (το τελευταίο θα αφαιρεθεί τελείως στον 2.7), ενώ οι host controller drivers μετονομάστηκαν σε uhci-hcd, ohci-hcd και ehci-hcd για τους αντίστοιχους controllers.

Filesystems

Τα ext2/ext3 filesystems πλέον υποστηρίζουν την εισαγωγή επιπλέον γνωρισμάτων (ή μεταδεδομένων) σε κάθε αρχείο, ώστε να υποστηρίζονται τα POSIX access control lists για πιο λεπτό έλεγχο προσβάσεων στα αρχεία. Υποστηρίζονται νέες πολιτικές τοποθεσίας αρχείων, ώστε οι υποκατάλογοι να βρίσκονται κοντά μεταξύ τους.

Τα directories μπορούν να σημαδευτούν ως "indexed" για ταχύτερες αναζητήσεις σε αυτά και "synchronous" (chattr +S) ώστε όλες οι πράξεις που τα αφορούν να είναι ατομικές (ίσως χρειαστούν αναβάθμιση τα e2fsprogs). Ατομικά επίσης μπορούν να μεταφερθούν υποδέντρα σε άλλες τοποθεσίες, με τη mount --move olddir newdir. Στη νέα έκδοση του πυρήνα υποστήριζονται και τα XFS και JFS filesystems των SGI και IBM αντίστοιχα, του Logical Disk Manager των Windows και του read/write support για NTFS volumes, το οποίο είναι πλέον reentrant safe, υποστηρίζει sparse files και clusters μεγαλύτερα από 4 kB.

Τα swap files πρέπει τώρα να είναι τόσο γρήγορα όσο και τα swap partitions, ενώ ο αριθμός τους μειώθηκε από 64 σε 32. Η προτίμηση του kernel για page cache αντί της mapped μνήμης μπορεί να οριστεί μέσω του /proc/sys/vm/swappiness (rtfm πριν το πειράξετε).

Στον τομέα των virtual filesytems, με τον καιρό θα υιοθετηθεί το /sys filesystem, το οποίο θα αναπαριστά το device tree (από την σκοπιά του kernel), με παρόμοιο τρόπο που ήδη λειτουργεί το /proc (mount -t sysfs none /sys). Η μορφή του /proc/stat έχει αλλάξει, ενώ μέσω του /proc/sys/kernel/core_pattern μπορεί κανείς να δώσει στυλ στα core dumping του - να ορίσει τον τρόπο που θα ονοματολογούνται τα core αρχεία.

Networking

Στον τομέα του Networking, υποστηρίζεται πλέον το IPsec για κρυπτογράφηση δεδομένων στο δίκτυο, το IP Virtual Server project και το multicast networking έχει αναβαθμιστεί με νέα χαρακτηριστικά όπως τα MLDv2 και IGMPv3. Πειραματικά κανείς μπορεί να χρησιμοποιήσει την ανανεωμένη, πιο ασφαλή, scaleable, ολοκληρωμένη και "έξυπνη" v4 του NFS, τόσο ως client όσο και ως server. Επίσης, υποστηρίζεται εγγενώς το CIFS υπερσύνολο του SMB πρωτοκόλλου. Αυτό συνεπάγεται υποστήριξη για UNICODE, βελτιωμένο locking αρχείων, hard linking κλπ στα SMB mounts. Τα AFS και InterMezzo έχουν προστεθεί στον κατάλογο των filesystems που μπορεί να χειριστεί εγγενώς ο πυρήνας (αν και έχουν ακόμη δουλειά).

Άλλα χαρακτηριστικά

Enterprise

Η Red Hat ανακοίνωσε πως θα ενσωματώσει τον 2.6 στο Red Hat Enterprise Linux 4 στο 2005, ενώ η SuSE προγραμματίζει την χρήση του 2.6 στο SuSE Enterprise Server 9, από το καλοκαίρι του 2004.

Υπάρχουν αρκετά χαρακτηριστικά που ωθούν τις εταιρίες να αντικαταστήσουν γρήγορα τον σαφώς δοκιμασμένο και χρησιμοποιημένο 2.4 με τον 2.6. Η καλύτερη υποστήριξη για πολύ βαριές I/O εργασίες, ο αναβαθμισμένος volume manager, η ικανότητα να χρησιμοποιούνται περισσότερα από 256 συστήματα αποθήκευσης στο δίκτυο και η υποστήριξη μεγεθών αρχείων μεγαλύτερων των 2 TB (γενικώς το scalability).

Από την άλλη, ο τρόπος που διαχειρίζεται τη μνήμη ο 2.6 προς το παρών είναι κάπως λιγότερο αποδοτικός, με αποτέλεσμα το πρακτικό πάνω όριο μνήμης να είναι τα 24 GB (αντί των 32 GB του 2.4), η παρακολούθηση νέων συμβάτων κάθε 1ms αντί κάθε 10ms κάνει το σύστημα πιο αργό κατά ~1% και χρειάζεται περισσότερη μνήμη για να τρέξει, γεγονός το οποίο φαίνεται έντονα όταν χρησιμοποιούνται σκληροί δίσκοι σαν επιπλέον μνήμη (Andrew Morton).


Παραπομπές


 
π
 
Last update: Wed May 2 22:57:54 2007