BFQ Scheduler back in action

ΑΥΤΗ Η ΔΗΜΟΣΙΕΥΣΗ ΕΧΕΙ ΓΙΝΕΙ ΠΑΝΩ ΑΠΟ ΕΝΑ ΧΡΟΝΟ ΠΡΙΝ!

Η καρδιά του λειτουργικού συστήματος είναι ο πυρήνας, όπως οι περισσότεροι γνωρίζουμε. Από εκεί ξεκινάνε και τελειώνουν όλα.

Εκείνος διαχειρίζεται συσκευές, μνήμη, επεξεργαστή..κλπ. Δίνει προτεραιότητα σε διάφορες υπηρεσίες και διεργασίες και βάζει τα πράγματα σε μια τάξη, για να δουλεύει το σύστημα σωστά. Τι είναι όμως ένας Ι/Ο Scheduler και που εξυπηρετεί;

Με απλά λόγια και όχι τεχνικούς όρους, ένας I/O Scheduler είναι ένας πολύ στενός συνεργάτης του πυρήνα. Κομμάτι του στην ουσία.

Σε τι εξυπηρετεί ο I/O Scheduler;

  1. Βοηθά στην μείωση του χρόνου καθυστέρησης που απαιτείται για αναζήτηση στον σκληρό δίσκο.
  2. Καθορίζει την προτεραιότητα των αιτημάτων που στέλνουν διάφορες διεργασίες
  3. Κατανέμει (όσο πιο σωστά γίνεται) την συχνότητα μεταφοράς δεδομένων διάφορων διεργασιών στον σκληρό δίσκο
  4. Προσπαθεί να εξασφαλίσει πως συγκεκριμένες διεργασίες θα εκτελεστούν μέσα σε έναν ορισμένο χρόνο

Όπως καταλαβαίνουμε από τα παραπάνω, ένας Ι/Ο Scheduler έχει άμεση σχέση με τον σκληρό δίσκο, με τις διεργασίες που τρέχουν σε αυτόν, με τον επεξεργαστή… και αν κάνει την δουλειά του σωστά, θα έχουμε ένα καλύτερα ανταποκρινόμενο λειτουργικό σύστημα, ακόμη και αν τρέχουν αρκετές διεργασίες παράλληλα.

Linux Kernel I/O Schedulers

Αυτή τη στιγμή, οι επίσημοι schedulers που περιλαμβάνονται στον πυρήνα είναι τρεις. Ο noop ο deadline και ο cfq, με τον τελευταίο να είναι συνήθως ο default σε αρκετές διανομές.
Δεν θα αναλύσω εδώ τι κάνει ο κάθε ένας από αυτούς, μπορείτε να βρείτε αρκετές (επίσημες ή μη) πηγές και άρθρα σύγκρισης(benchmark), ψάχνοντας στο Internet.

CFQ vs BFQ

Πρόσφατα, ο developer του BFQ δημοσίευσε ένα βίντεο στο youtube, όπου δείχνει τις διαφορές μεταξύ CFQ και BFQ. Κάνει κάποιες live συγκρίσεις (σε SSD δίσκο) και τα αποτελέσματα είναι ενδιαφέροντα.
Δείτε το

Και πως θα τον εγκαταστήσω;
Χμ, εδώ τα πράγματα είναι κάπως περίπλοκα. Ο BFQ, καθώς δεν συμπεριλαμβάνεται επίσημα στον πυρήνα, υπάρχει μόνον ως εξωτερικό patch. Θα πρέπει λοιπόν να κάνετε ένα compile-build τον official πυρήνα της διανομής που έχετε, αφού έχετε προσθέσει (έχετε patchαρει τον πυρήνα με) τον BFQ. Δεν θα αναλύσω/δείξω αυτή την διαδικασία εδώ, αλλά για όσους/ες την γνωρίζουν, κατεβάζετε τον BFQ από εδώ.
Μερικές διανομές (όπως π.χ το Arch απ’ ότι ξέρω, στο AUR) έχουν έτοιμα πακέτα, από χρήστες που έχουν ασχοληθεί με «το άθλημα». Διαβάστε στο Arch Wiki για τον Linux-ck, ενώ άλλες ίσως να τον χρησιμοποιούν από default (π.χ. Sabayon). Για ρίξτε μια ματιά στην δική σας διανομή.

cat /sys/block/sda/queue/scheduler

Αυτός που θα βρίσκεται μέσα σε αγκύλες, είναι εκείνος που χρησιμοποιείται.

Πως μπορώ να χρησιμοποιήσω κάποιον άλλο (από τους ήδη υπάρχοντες) ;
Η αλλαγή του scheduler μπορεί να γίνει «on the fly» που λέμε. Για να αλλάξετε π.χ. σε deadline, δώσετε την εντολή

echo deadline | sudo tee /sys/block/sda/queue/scheduler

Αν θέλετε να μείνετε μόνιμα με τον deadline, καθώς η παραπάνω αλλαγή θα χαθεί μετά από ένα reboot, επεξεργαστείτε το αρχείο /etc/default/grub και προσθέστε την παράμετρο elevator=deadline. Αποθηκεύστε το αρχείο και ενημερώσετε τον grub.

Πιο παλιά είχα ξεκινήσει ένα..project να το πω;…όπου έφτιαχνα τέτοιους πυρήνες για Ubuntu/Debian και τους ανέβαζα στο Launchpad. Δείτε το σχετικό άρθρο (γράφω και λίγα περί BFQ κι εκεί). Εκτός όμως την έλλειψη χρόνου, είναι και κάπως «ψυχοφθόρο» να κάθεσαι να κάνεις compile πυρήνες και όταν δεν διαθέτεις και κάποιο hardware ειδικά (ή μόνο) γι’ αυτή την δουλειά. Έτσι και σταμάτησα να ασχολούμαι με το συγκεκριμένο αποθετήριο εδώ και κάμποσο καιρό. Ίσως στο μέλλον να το ξεκινήσω πάλι..θα δείξει.

Αν πάντως θέλετε να δοκιμάσετε έναν πυρήνα που μεταγλώττισα σήμερα, έχω ανεβάσει τα πακέτα στο Dropbox ως ξερά .deb. Τι σημαίνει αυτό;
Αυτό σημαίνει ότι δεν θα έχετε διαθέσιμο τον πηγαίο κώδικα (source) και μπορεί να αντιμετωπίσετε διάφορα προβλήματα, όπως..
Δεν λειτουργεί το Virtualbox ή ο VMware player.
Δεν λειτουργούν οι κλειστοί οδηγοί(drivers) της κάρτας γραφικών μου…
…κλπ. Φυσικά και θα (πρέπει) να συνεχίσουν να λειτουργούν με τον πυρήνα που διαθέτετε ήδη.

Απλά για δοκιμή ,και με δική σας και μόνον ευθύνη, μπορείτε να κατεβάσετε, να εγκαταστήσετε και να τρέξετε τον συγκεκριμένο πυρήνα. Είναι μόνον για Debian/Ubuntu (και -based) διανομές και φυσικά δεν θα αντικατασταθεί ο πυρήνας που ήδη έχετε. Απλά θα προστεθεί στο μενού του Grub (πιθανών πρώτος, αναλόγως ποια έκδοση τρέχετε τώρα – η έκδοση με τον bfq που μεταγλώττισα είναι η 3.16).

Τρέξτε τις παρακάτω εντολές μια-μια
wget «https://www.dropbox.com/s/rjnncybqgmigpc3/linux-headers-3.16.2-bfq_3.16.2-bfq-10.00.Custom_amd64.deb?dl=0» -O linux-headers-3.16.2-bfq.deb
wget «https://www.dropbox.com/s/r02pvgeulhgjc0x/linux-image-3.16.2-bfq_3.16.2-bfq-10.00.Custom_amd64.deb?dl=0» -O linux-image-3.16.2-bfq.deb
Έπειτα
sudo dpkg -i linux-image-3.16.2-bfq.deb linux-headers-3.16.2-bfq.deb

EDIT:
Τα πακέτα τα αφαίρεσα από το Dropbox, μιας και υπάρχει μια (σίγουρα) καλύτερη λύση.
Μόλις τελειώσει η εγκατάσταση, κάντε μια επανεκκίνηση και πιθανότατα θα μπείτε από αυτόν τον πυρήνα. Για πιο σίγουρα, επιλέξτε το advanced options στο μενού του Grub και επιλέξετε χειροκίνητα τον πυρήνα από εκεί.
Για να δείτε ποιον πυρήνα τρέχετε δώστε

uname -r

Συμβάλετε κι εσείς με ένα σχόλιο

Εισάγετε τα παρακάτω στοιχεία ή επιλέξτε ένα εικονίδιο για να συνδεθείτε:

Λογότυπο WordPress.com

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό WordPress.com. Αποσύνδεση / Αλλαγή )

Φωτογραφία Twitter

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Twitter. Αποσύνδεση / Αλλαγή )

Φωτογραφία Facebook

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Facebook. Αποσύνδεση / Αλλαγή )

Φωτογραφία Google+

Σχολιάζετε χρησιμοποιώντας τον λογαριασμό Google+. Αποσύνδεση / Αλλαγή )

Σύνδεση με %s