ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝBrain Fųck SchedulerΟ Brain Fųck Scheduler (BFS) είναι ένας χρονοδρομολογητής διεργασιών. Ο χρονοδρομολογητής διεργασιών(task scheduler) είναι εκείνος που επιλέγει ποιες από τις διεργασίες που έχουν υποβάλει οι χρήστες στο σύστημα, θα περάσουν στην ουρά αναμονής προς εκτέλεση από την ΚΜΕ(CPU). Ονομάζεται και μακροχρόνιος χρονοδρομολογητής.
Ο BFS ο οποίος σχεδιάστηκε για τον πυρήνα Linux τον Αύγουστο του 2009 είναι ένας εναλλακτικός χρονοδρομολογητής αντί του Completely Fair Scheduler (CFS). O BFS σχεδιάστηκε από έναν βετεράνο του πυρήνα Linux ονόματι Con Kolivas.
Ο σκοπός του BFS, σε σύγκριση με άλλους χρονοδρομολογητές, είναι να παρέχει μια χρονοδρομολόγηση διεργασιών βασισμένη σε έναν απλό αλγόριθμο που δεν απαιτεί προσαρμογή των ευρετικών(heuristics) ή κάποια ρύθμιση παραμέτρων για να προσαρμόζει την απόδοσή του σε έναν συγκεκριμένο τύπο φόρτου εργασίας. Ο δημιουργός του BFS υποστήριξε ότι οι ρυθμιστικές παράμετροι ήταν δύσκολες για τον μέσο χρήστη να τις αντιληφθεί, ιδίως σε ότι αφορά τις αλληλεπιδράσεις αυτών με άλλες, καθώς υποστήριξε επίσης ότι η χρήση τέτοιων παραμέτρων ρύθμισης θα μπορούσε να οδηγήσει στην βελτίωση των επιδόσεων σε ένα συγκεκριμένο τύπο υπολογισμών, με κόστος όμως την χειρότερη απόδοση σε γενικού τύπου χρήση.
Έχει αναφερθεί πως ο BFS βελτιώνει την ανταπόκριση συστημάτων, σε ειδικού τύπου κινητές συσκευές (light-NUMA) με Linux, καθώς και σε υπολογιστικά συστήματα τα οποία διαθέτουν λιγότερους από 16 πυρήνες.
Λίγο μετά την παρουσίαση του, και όπως πιθανών ήταν αναμενόμενο, ο νέος χρονοδρομολογητής έγινε αντικείμενο συζήτησης στην κοινότητα Linux. Όχι μόνο αντικείμενο συζήτησης, αλλά όπως ήταν φυσικό ξεκίνησαν αμέσως και οι συγκριτικές αξιολογήσεις (benchmarks). Παρά το γεγονός ότι υπήρξαν ποικίλες θετικές αναφορές και αξιολογήσεις για την αύξηση των επιδόσεων αλλά και της ανταπόκρισης του συστήματος ο Con Kolivas δεν προτίθεται να ενσωματώσει τον χρονοδρομολογητή στον κύριο(mainline) πυρήνα Linux.
ΥιοθέτησηΟ BFS έχει υιοθετηθεί από κάποιες διανομές Linux και χρησιμοποιείται ως ο βασικός χρονοδρομολογητής διεργασιών.
Μερικές από αυτές είναι:
- Sabayon Linux
- PCLinuxOS
- Manjaro Linux
Ενώ σε άλλες διανομές υπάρχει ως εναλλακτική λύση. Στην διανομή Arch Linux για παράδειγμα, υπάρχει αποθετήριο ονόματι repo-ck που παρέχει τον mainline πυρήνα(ο οποίος είναι και ο πυρήνας που χρησιμοποιεί το Arch Linux) με ενσωματωμένο τον BFS.
Budget Fair QueueingΈνας χρονοδρομολογητής I/O (Input/Output) είναι εκείνος ο οποίος αποφασίζει με ποια σειρά θα σταλούν οι διεργασίες στους τόμους αποθήκευσης. Συχνά αποκαλείται και “χρονοδρομολογητής δίσκου”.
Μερικές από τις εργασίες για τις οποίες είναι υπεύθυνος:
- Ελαχιστοποιεί την σπατάλη χρόνου σε έναν σκληρό δίσκο κατά τη διάρκεια της αναζήτησης(seek).
- Καθορίζει την προτεραιότητα των αιτημάτων ορισμένων διεργασιών.
- Καθορίζει το μερίδιο κάθε διεργασίας που εκτελείται στο εύρος ζώνης του δίσκου.
- Διασφαλίζει ότι ορισμένες αιτήσεις (διεργασιών) θα εκτελεστούν πριν από μια ορισμένη προθεσμία. Δηλαδή, θέτει αυτό που ονομάζουμε deadline.
O BFQ λοιπόν είναι ένας τέτοιος χρονοδρομολογητής ο οποίος, όπως αναφέρει ο δημιουργός του, υποστηρίζει και ιεραρχική χρονοδρομολόγηση καθώς και την κατανομή αναλογικού μεριδίου στις διεργασίες. Έχει δημιουργηθεί από τον Ιταλό Paolo Valente και εν αντιθέσει με τον Con Kolivas, είναι μέσα στα σχέδια του δημιουργού να συμπεριληφθεί στον κυρίως(mainline) πυρήνα Linux.
Συγκριτικές δοκιμές που έχουν γίνει από την ομάδα του BFQ δείχνουν μια σημαντική διαφορά στην απόδοση του συστήματος, όταν αυτό εκτελεί πολλές διεργασίες παράλληλα και βρίσκεται κάτω από βαρύ φόρτο εργασίας. Μια από αυτές τις δοκιμές έχει δημοσιευτεί ως βίντεο στο youtube και μπορείτε να την παρακολουθήσετε στην παρακάτω διεύθυνση:
https://www.youtube.com/watch?v=KhZl9LjCKuUΥιοθέτησηΟ BFQ έχει υιοθετηθεί από μερικές διανομές Linux ως ο βασικός χρονοδρομολογητής. Μερικές από αυτές είναι:
- Manjaro Linux
- OpenMadriva
- Sabayon Linux
Ενώ σε άλλες διανομές υπάρχει ως εναλλακτικός χρονοδρομολογητής: Arch Linux, PCLinuxOS, Gentoo.
ΑποθετήριαΕδώ και κάμποσο καιρό, διατηρώ δυο Online αποθετήρια στο Launchpad και ο σκοπός τους είναι να φιλοξενούν τους επίσημους πυρήνες του Linux (όχι του Ubuntu) με ενσωματωμένους όμως τους δυο χρονοδρομολογητές. Τα αποθετήρια υποστηρίζουν την έκδοση του Ubuntu 14.04 LTS με κωδική ονομασία Trusty Tahr.
Τη διαφορά του Ubuntu πυρήνα με εκείνον που ονομάζουμε upstream Linux μπορείτε να τη διαβάσετε παρακάτω.
Το ένα αποθετήριο φιλοξενεί τον εκάστοτε stable (και όχι mainline) πυρήνα Linux με ενσωματωμένο μόνο τον BFQ Scheduler, ενώ το άλλο τον εκάστοτε LTS πυρήνα (τον νεότερο από τους LTS πυρήνες) με ενσωματωμένα τα BFQ και BFS patches.
Upstream πυρήνας και Ubuntu πυρήναςΘα πρέπει να αναφέρουμε ότι το Ubuntu διαθέτει μια δική του ομάδα από προγραμματιστές του πυρήνα Linux. Γι' αυτό και γίνεται αυτός ο διαχωρισμός. Η λογική είναι απλή:
Παίρνουμε τον κυρίως πυρήνα και αφού γνωρίζουμε πως, του ενσωματώνουμε κάποιον κώδικα (patches) έτσι ώστε να λειτουργεί καλύτερα με την διανομή που θέλουμε (στην παρούσα περίπτωση το Ubuntu).
Οπότε, αυτόν τον πυρήνα (με τον ενσωματωμένο από το Ubuntu κώδικα) μπορούμε να τον ονομάζουμε Ubuntu Kernel.
Ο πυρήνας του Linux φιλοξενείται και αναπτύσσεται στο Git του Linux.
Ο πυρήνας του Ubuntu φιλοξενείται και αναπτύσσεται στο Git του Ubuntu.
Λήψη , Ενσωμάτωση, Ανέβασμα, Χτίσιμο και ΔιάθεσηΜέσω Linux Git λοιπόν γίνεται και η λήψη αλλά και η ενσωμάτωση των χρονοδρομολογητών BFQ και BFS. Κατόπιν, ανεβαίνει ο πηγαίος κώδικας στο Launchpad και οι εικονικές μηχανές κατασκευής πακέτων του Launchpad (Launchpad Builders) αναλαμβάνουν να χτίσουν τα .deb πακέτα εγκατάστασης. Μόλις ολοκληρωθεί με επιτυχία η δημιουργία των πακέτων, αυτά γίνονται διαθέσιμα μέσω των αποθετηρίων.
Ονοματολογία πυρήνωνΗ ονοματολογία των πυρήνων είναι διαφορετική επί σκοπόν. Ο σκοπός είναι να μην αντικαταστήσει ο πυρήνας του αποθετηρίου εκείνον της διανομής, αλλά να προστεθεί ως ένα έξτρα πακέτο. Η ονοματολογία ακολουθεί τη φιλοσοφία του Ubuntu και έτσι έχουμε για παράδειγμα:
→linux-image-4.5.0-50-bfq . Βασισμένος στον 4.4.5 upstream
→inux-image-4.4.0-110-bb . Βασισμένος στον 4.4.11 LTS upstream
Αρκεί να αφαιρέσετε τα τελευταία ψηφία από το ABI και Version Number, ώστε να ανακαλύψετε σε ποιον είναι βασισμένος.
ChangelogΟι αλλαγές που κάνω στους συγκεκριμένους πυρήνες είναι σχεδόν μηδενικής αναφορικής αξίας, αλλά καθότι αλλαγές οφείλω να τις επισημάνω. Φυσικά αναφέρονται σε κάθε changelog, αλλά τις αναφέρω κι εδώ:
- Κώδικας: Επιλογή όλων
* Timer Frequency: 300Hz
* Preemption Model: Low-Latency Desktop
Στοχεύω σε Low Latency για καλύτερο Responsiveness, ενώ ανεβάζω κατά 50Hz το timer frequency (από 250 που έχει το Ubuntu). Το Arch πάντως με 300 έρχεται από default.
Αν και δεν χρειάζεται να το αναφέρω ξανά, ωστόσο μιας και αποτελεί και αυτό changelog, οι δυο έξτρα schedulers είναι προεπιλογή. Προσέξτε ότι γράφω έξτρα, πράγμα που σημαίνει ότι δεν αντικαθιστούν κάποιον άλλο scheduler.
Εγκατάσταση και δοκιμήΓια να εγκαταστήσετε και να δοκιμάσετε στο σύστημά σας κάποιον από τους πυρήνες, θα πρέπει να προσθέσετε το αποθετήριο που σας ενδιαφέρει και να εγκαταστήσετε το meta package που σας ενδιαφέρει. Αυτό, θα τραβήξει όλες τις απαιτούμενες εξαρτήσεις ώστε να έχετε και το image αλλά και τους headers του πυρήνα και ότι άλλο χρειάζεται.
Για το PPA trusty4 (μόνο με BFQ)- Κώδικας: Επιλογή όλων
sudo add-apt-repository ppa:nick-athens30/trusty4
sudo apt-get update
sudo apt-get install linux-bfq-git
Για το PPA trusty4-ck (με BFQ και BFS)- Κώδικας: Επιλογή όλων
sudo add-apt-repository ppa:nick-athens30/trusty4-ck
sudo apt-get update
sudo apt-get install linux-bb
Για άλλες εκδόσειςΑν χρησιμοποιείτε κάποια άλλη έκδοση εκτός του trusty, (πχ 15.10, 16.04), ακόμη και άλλη διανομή βασισμένη στο Ubuntu, μπορείτε να δοκιμάσετε με τις παρακάτω εντολές
Για το PPA trusty4 (μόνο με BFQ)
- Κώδικας: Επιλογή όλων
echo "deb http://ppa.launchpad.net/nick-athens30/trusty4/ubuntu trusty main" | sudo tee /etc/apt/sources.list.d/nick-athens30-trusty4.list
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F56AC5FABE7E0CA1
sudo apt-get update
sudo apt-get install linux-bfq-git
Για το PPA trusty4-ck (με BFQ και BFS)
- Κώδικας: Επιλογή όλων
echo "deb http://ppa.launchpad.net/nick-athens30/trusty4-ck/ubuntu trusty main" | sudo tee /etc/apt/sources.list.d/nick-athens30-trusty4-ck.list
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys F56AC5FABE7E0CA1
sudo apt-get update
sudo apt-get install linux-bb
Για να σιγουρευτείτε πως οι δυο χρονοδρομολογητές είναι οι προεπιλεγμένοι και λειτουργούν σωστά, πληκτρολογήστε σε ένα τερματικό την παρακάτω εντολή:
- Κώδικας: Επιλογή όλων
dmesg | grep -i scheduler
Το αποτέλεσμα θα πρέπει να είναι περίπου όπως το παρακάτω
έγραψε:
[ 2.106924] io scheduler noop registered
[ 2.106928] io scheduler deadline registered
[ 2.106963] io scheduler cfq registered
[ 2.106991] io scheduler bfq registered (default)
[ 2.106992] BFQ I/O-scheduler: v7r11
[ 2.106996] BFS CPU scheduler v0.467 by Con Kolivas
Αποποίηση ΕυθυνώνΘα πρέπει να αναφέρουμε ότι αν και ο συγκεκριμένος πυρήνας γίνεται λήψη από το επίσημο αποθετήριο του Linux μέσω του Git, ο κώδικας που προστίθεται σε αυτόν (για την ενσωμάτωση των δυο χρονοδρομολογητών) είναι αρκετός ώστε να τον μετατρέψει σε έναν ανεπίσημο πυρήνα.
Ως αποτέλεσμα αυτού, δεν μπορείτε να αναφέρετε σφάλματα γι' αυτόν τον πυρήνα με τον συνήθη τρόπο(μέσω Launchpad), ενώ πάντα υπάρχει το ενδεχόμενο δυσλειτουργίας(ακόμη και στον κυρίως και επίσημο πυρήνα του Linux υπάρχει τέτοιο ενδεχόμενο).
Ο πυρήνας εξάλλου είναι ένα από τα σημαντικότερα κομμάτια, αν όχι το σημαντικότερο, του λειτουργικού συστήματος και είναι υπεύθυνος για την εύρυθμη λειτουργία του. Επίσης, είναι εκείνο το κομμάτι λογισμικού που επικοινωνεί άμεσα με το υλικό και διαχειρίζεται τις συσκευές του συστήματος.
Άδεια ΧρήσηςΤο παρόν διατίθεται υπό την άδεια:
Creative Commons BY-SA 4.0 Διεθνής
ΠηγέςΠαρακάτω δημοσιεύονται οι πηγές από τις οποίες αντλήθηκαν οι πληροφορίες για την συγγραφή του παρόντος:
- http://en.wikipedia.org/wiki/Brain_Fuck_Scheduler
- http://en.wikipedia.org/wiki/I/O_scheduling
- http://algo.ing.unimo.it/people/paolo/disk_sched
- https://launchpad.net/~nick-athens30/+archive/ubuntu/trusty-ck
- http://ck.kolivas.org/patches/bfs/bfs-faq.txt
- https://lkml.org/lkml/2014/5/27/314
- http://wp.me/p3HF9I-ya