Linux με αναβολικά: Preemtive BFS και BFQ Linux kernel

Έχουμε γράψει εκτενέστατα άρθρα για το πως μπορείτε να βελτιστοποιήσετε τον Linux πυρήνα σας. Στον σημερινό οδηγό θα δούμε πως μπορούμε να «ντοπάρουμε» ακόμα περισσότερο τον Linux πυρήνα… νόμιμα…

Το Σύστημα…

Δεν θα επεκταθώ αρκετά σε κάθε βήμα απλά θα σημειώσω εκείνα τα οποία είναι ελαφρώς διαφορετικά σε συνδυασμό όμως με τα βήματα που γράφω στο προηγούμενο άρθρο. Οπότε καλό θα είναι να έχετε στον browser σας αυτό το άρθρο ανοιχτό μαζί με το «10 Απλά βήματα για να μεταγλωττίσετε τον δικό σας πυρήνα» σε δεύτερη καρτέλα.
Το σύστημα στο οποίο δούλεψα είναι Ubuntu 11.10 64bit και η περιγραφή της διαδικασίας θα γίνει σε αυτό μιας και το προηγούμενο άρθρο βασιζόταν πάλι σε Ubuntu, οπότε μπορείτε να το παρακολουθήσετε άνετα. Προφανώς και η διαδικασία γίνεται και σε άλλες διανομές με παρόμοιο τρόπο απλά διαφέρει λίγο στον τρόπο «πακεταρίσματος».

Αυτή την φορά δεν θα χρησιμοποιήσουμε τον πυρήνα που μας παρέχει το Ubuntu αλλά θα κατεβάσουμε ένα ήδη ντοπαρισμένο πυρήνα για να κάνουμε πιο εύκολη την δουλειά μας. Επίσης πέρα από τα πακέτα που εγκαθιστούμε στο Δεύτερο βήμα πρέπει να εγκαταστήσουμε και το πρόγραμμα GiT. Υπάρχει σε όλες τις διανομές οπότε εγκαταστήστε την απο το Κέντρο Λογισμικού της διανομής σας.

Ο πυρήνας που θα χρησιμοποιήσουμε έχει «ντοπαριστεί» και μας έρχεται απο την κοινότητα ZEN-Kernel. Στην αρχική σελίδα μπορεί να φαίνονται «νεκροί» όμως στην πραγματικότητα έχουν μεταφέρει όλη την δουλειά τους σε αποθετήριο Git και απλά έχουν κόψει το πολύ μπλά-μπλά…

Παράλληλα όμως επειδή δεν το χορταίνουμε θα κάνουμε και δικές μας τροποποιήσεις στον πυρήνα για να έχουμε όσο το δυνατόν καλύτερα αποτελέσματα χωρίς όμως να θέτουμε σε κίνδυνο την σταθερότητα του συστήματός μας.

Σηκώνουμε τα μανίκια (μη λερώσουμε και μας κυνηγάει η γυναίκα ) και πάμε να κάνουμε αλχημείες !

Βήμα 1

Ελέγχουμε το το μοντέλο του επεξεργαστή μας….. (γιατί δεν έχετε ανοιχτή αυτή τη σελίδα : «10 Απλά βήματα για να μεταγλωττίσετε τον δικό σας πυρήνα» σε άλλη καρτέλα ? δεν θα το ξαναπώ….😛 )

Βήμα 2

Ανοίγουμε ένα τερματικό και κάνουμε εγκατάσταση τα προαπαιτούμενα εργαλεία.

sudo apt-get install fakeroot kernel-wedge build-essential makedumpfile kernel-package libncurses5 libncurses5-dev libqt3-mt-dev git

Βήμα 3

Κάνουμε εγκατάσταση τις εξαρτήσεις του πυρήνα μας, άσχετα αν θα βάλουμε πυρήνα από άλλη πηγή.

sudo apt-get build-dep --no-install-recommends linux-image-$(uname -r)

Βήμα 4

Δημιουργούμε τον φάκελο source στον οποίο και θα δουλέψουμε.

mkdir ~/source
cd ~/source

Βήμα 5

Εδώ λοιπόν είναι το σημείο που κατεβάζουμε τον πυρήνα ZEN. Ελπίζω να έχετε καλή σύνδεση γιατί μπορεί να πάρει αρκετή ώρα.

git clone --depth 1 git://zen-kernel.org/kernel/zen-stable.git

Αφού κατέβει, αντιγράφουμε το αρχείο ρυθμίσεων απο τον πυρήνα που ήδη τρέχουμε αυτή τη στιγμή και τον μεταφέρουμε στον ZEN.

cd zen*
cp -vi /boot/config-`uname -r` .config

BONUS : ΜΗΝ τρέξετε την παρακάτω εντολή αν δεν διαβάσετε το Kernel Optimization: Αυτόματη δημιουργία βελτιστοποιημένου πυρήνα !!! Δεν είναι υποχρεωτικό αλλά «τονώνει» ακόμα περισσότερο τον πυρήνα μας!

make localmodconfig

Βήμα 6

Έτοιμοι λοιπόν να πειράξουμε ακόμα περισσότερο τον πυρήνα μας

make xconfig

ΠΡΟΣΟΧΗ τι πειράζουμε εδώ.
Επιλογές που μπορούμε να πειράξουμε (δείτε και το βίντεο στο τέλος):

  • General Setup –> CPU Scheduler –> BFS και Optimise for Size
  • Enable the block layer –> IO Scheduler –> BFQ (αφαιρέστε τον CFQ )
  • Processor Type and features –> Processor Family –> (Εδώ επιλέγετε με βάση το μοντέλο του επεξεργαστή σας)
  • Processor Type and features –> Preemtion Model –> Preemtible Kernel (Low latency kernel)
  • Processor Type and features –> Timer Frequancy –> 1000 Hz
  • Power managment and ACPI options –> CPU Freq scaling –> Default CPU Governor –> Διαλέξτε ανάλογα (Desktop : Performance ενώ για Laptop και Netbook: Conservative)

Αφού τελειώσουμε πατάμε save και κλείνουμε το παράθυρο. Θα δώσουμε κάποιες προαιρετικές παραμέτρους στον πυρήνα μας τις οποίες τις γράφω μόνο για τους «τρελούς» ανάμεσά μας που θέλουν να βελτιστοποιήσουν ακόμα και την μεταγλώττιση!… (έλεος! που πάμε σαν κοινωνία!)

export CONCURRENCY_LEVEL=9
export CFLAGS="-march=native -Os -pipe"
export CXXFLAGS="${CFLAGS}"

Βήμα 7

Σε λίγο τελειώνουμε… μένει μόνο το πακετάρισμα του πυρήνα.

make-kpkg clean
fakeroot make-kpkg --initrd --append-to-version=-turbo kernel-image kernel-headers

Βήμα 8

Ωραία… έχει τελειώσει η μεταγλώττιση και μένει μόνο η εγκατάσταση.

cd ~/source
sudo dpkg -i linux-image("TAB").deb
linux-headers("TAB").deb

Βήμα 9

Ενημερώνουμε και τον GRUB για τις αλλαγές.

sudo update-initramfs -c -k 3.1.4-zen-turbo+
sudo update-grub

Βήμα 10

Έτοιμοι ! Κάνουμε επανεκκίνηση και έπειτα ξανακάνουμε ότι λέει στο πρώτο βήμα για να επιβεβαιώσουμε οτι όλα είναι σωστά. Αν δεν μας αρέσει το αποτέλεσμα μην αντιστοιχείται όπως είπα ο πυρήνας τις διανομής σας δεν έχει χαθεί, είναι εκεί για να τον επιλέξετε και έπειτα να απεγκαταστήσετε αυτόν που «ντοπάρατε»…

Αν προτιμάτε όλα αυτά να τα δείτε στην πράξη τότε απολαύστε το βίντεο εδώ πέρα :

40 thoughts on “Linux με αναβολικά: Preemtive BFS και BFQ Linux kernel

  1. Έχω πάνω από 5 χρόνια να κάνω compile πυρήνα… Είχα την εντύπωση ότι με τις νέες -it just works- διανομές το χόμπυ είχε γενικότερα ψιλοεγκαταληφθεί… Είναι καλό που κάποιοι συνεχίζουν… Μπορεί να κινδυνεύουν να καταλήξουν με κανένα unbootable kernel, αλλά πειραματίζονται και μαθαίνουν.🙂 Αυτό που θα ήθελα να επισημάνω είναι ότι οι περισσότερες διανομές (αν όχι όλες) δεν δέχονται bug reports και δεν παρέχουν support σε περίπτωση που τρέχεις custom compiled πυρήνα… Οπότε όσοι παίζετε να ξέρετε ότι όσο τρέχετε τον δικό σας πυρήνα είστε μόνοι σας και ελάχιστοι έως κανένας δεν θα ασχοληθεί να ψάξει γιατί κρασσάρει το X πρόγραμμα, πετάει kernel panic ή δεν λειτουργεί Y συσκευή ή δεν μπουτάρει το σύστημά σας. Και καλό είναι όποιος παίζει με τον πυρήνα να διαβάσει και λίγο καλύτερα τόσο το πως ρυθμίζεται, ελέγχεται από την κονσόλα του και γίνεται rescue ο grub, όσο και που και πως διαβάζει τα logs του πυρήνα για να μπορεί να διαγνώσει πιθανά προβλήματα. Καλές περιπέτειες!🙂

    • Σε εμένα μετά από δύο προσπάθειες έχω ίδιο αποτέλεσμα (σε 10.10 και11.10) σταματά η μεταγλώττιση 
      make[1]: Leaving directory `/home/sotiris/source/zen-stable’make: *** [debian/stamp/build/kernel] Error 2
      Δεν δημιουργεί κανένα πακέτο deb
      Επίσης στην παρακολούθηση συστήματος εκεί που δείχνει την μνήμη λείπουν 130ΜΒ  

      • Πρέπει να ψάξεις λίγο πιο ψηλά στα μηνύματα της μεταγλώττισης για βρεις που ακριβώς και ποιό ακριβώς είναι το σφάλμα. Κάτι σαν Error Could not find xxxxx ή CC Error XXX is not declared που θα αναφέρει τι ακριβώς ξίνισε τον compiler ή τον linker, σε ποιο αρχείο και ποια γραμμή.

        •  Χρειάζομαι λίγο βοήθεια  για να δω τα μηνύματα, δηλαδή τι ακριβώς πρέπει να πατήσω, με history βλέπω μόνο τι έδωσα εγώ.

        • Ξεκίνησα πάλι από την αρχή και σου παραθέτω τι γράφει το τερματικό όταν σταματά την μεταγλώττιση
          kernel/debug/debug_core.c:729:2: προειδοποίηση: initialization from incompatible pointer type [enabled by default]kernel/debug/debug_core.c:729:2: προειδοποίηση: (near initialization for ‘kgdbcons.write’) [enabled by default]  CC      kernel/debug/gdbstub.o  CC      kernel/debug/kdb/kdb_io.okernel/debug/kdb/kdb_io.c: In function ‘vkdb_printf’:kernel/debug/kdb/kdb_io.c:701:4: σφάλμα: too few arguments to function ‘c->write’kernel/debug/kdb/kdb_io.c:755:4: σφάλμα: too few arguments to function ‘c->write’make[4]: *** [kernel/debug/kdb/kdb_io.o] Error 1make[3]: *** [kernel/debug/kdb] Error 2make[2]: *** [kernel/debug] Error 2make[1]: *** [kernel] Error 2make[1]: Leaving directory `/home/sotiris/source/zen-stable’make: *** [debian/stamp/build/kernel] Error 2sotiris@sotiris-HP-G62-Notebook-PC:~/source/zen-stable$ 

    • Σε ένα σύγχρονο (>2007) μηχάνημα η μεταγλώττιση λογισμικού πόσο μάλλον όλου του πυρήνα δεν έχει νόημα για το 99.9% των ανθρώπων αφού δεν πρόκειται να δουν καμία διάφορα στις επιδόσεις.
      Όμως η αίσθηση οτι και ο αγώνας που δίνεις για να έχεις ενα πυρήνα κομμένο και ραμμένο για τον υπολογιστή σου χωρίς τα περιττά «βάρη» είναι διαφορετική απο αυτήν που σου δίνει ο πυρήνας που τον έχουν φτιάξει αυτοί που σου παρέχουν την διανομή.

      Όσο για το support…. φακ ιτ !!!
      Φυσικά και δεν πρέπει να κάνουμε μεταγλωττίσεις οποιασδήποτε μορφής στο μηχάνημα που δουλεύουμε !!!!!!!!
      Όλα αυτά τα κάνουμε μόνο στον προσωπικό υπολογιστή….  

  2. Καλησπέρα παιδιά και έμενα έχει πρόβλημα στην μεταγλώτηση  με το  ακόλουθο error
    make[1]: Leaving directory `/home/redpower1989/source/zen-stable’
    make: *** [debian/stamp/build/kernel] Error 2

  3. και εγω εχω το error 2. εχω ομως και μια αλλη απορια εαν βαλω παλαιοτερο kernel συγκεκριμενα τον 2.6.35 θα μου δημιουργησει προβλημα ?

  4. Για όσους έχουν erro 2….
    Θεωρώ εξαρχής ότι έχετε ακολουθήσει βήμα βήμα και δεν έχετε παραλείψει κάποιο πακέτο και οτι έχετε διαβάσει και δει όλα τα link που δίνω στο άρθρο.
    Κύριοι…. η μεταγλώττιση πυρήνα είναι παιχνιδάκι αρκεί να μην κάνετε τίποτα του κεφαλιού σας και ΝΑ ΜΗΝ ΦΟΒΑΣΤΕ ΤΟ ΔΙΑΒΆΣΜΑ !!!🙂

    Έστω οτι έχετε πράγματι κάνει οτι έχω πει….
    Μπείτε στο φάκελο zen-stable και δώστε στο τερματικό

    make clean

    αυτο θα καθαρίσει το περιβάλλον στο οποίο θα δουλέψουμε

    έπειτα ακολουθήστε το Βήμα 2 και 3. μετά πάτε στο Βήμα 7 και εκτελείτε τις εντολές. Αν σταματήσει και δεν συνεχίζει όπως θα είδατε και στο βίντεο τότε κάνετε αντιγραφή επικόλληση το αποτέλεσμα εδώ paste.ubuntu.com και δώστε το λινκ για να δούμε τι παίζει.

  5. Καλησπέρα ! Τα δοκήμασα όλα ! Δία βασα και τις οδησίες στο σχόλιο  του salih και εξακολουθώ να έχω το πρόβλημα που έχει και ο sotos !
    kernel/debug/debug_core.c:729:2: προειδοποίηση: initialization from incompatible pointer type [enabled by default]
    kernel/debug/debug_core.c:729:2: προειδοποίηση: (near initialization for ‘kgdbcons.write’) [enabled by default]
      CC      kernel/debug/gdbstub.o
      CC      kernel/debug/kdb/kdb_io.o
    kernel/debug/kdb/kdb_io.c: In function ‘vkdb_printf’:
    kernel/debug/kdb/kdb_io.c:701:4: σφάλμα: too few arguments to function ‘c->write’
    kernel/debug/kdb/kdb_io.c:755:4: σφάλμα: too few arguments to function ‘c->write’
    make[4]: *** [kernel/debug/kdb/kdb_io.o] Error 1
    make[3]: *** [kernel/debug/kdb] Error 2
    make[2]: *** [kernel/debug] Error 2
    make[1]: *** [kernel] Error 2
    make[1]: Leaving directory `/home/redpower1989/source/zen-stable’
    make: *** [debian/stamp/build/kernel] Error 2
     Μήπως γνωερίζεται έαν οφείλετε σε λάθος ριθμύσεις μας και εάν τελικά υπάρχει τρόπος να λυθεί?

  6. Σε ένα laptop με επεξεργαστή intel(R) pentium(R) Dual T2310 τι επιλογή να βάλω στο processor family?

  7. Έχω και εγώ να κάνω μία εξαιρετικής σημασίας ερώτηση..:
    Ποια είναι αυτή η απίστευτη μουσική που χρησιμοποιείς στο video?

    • Να μπεις στο κανάλι κάπου το έχω γράψει σε κάποιο παλιότερο βίντεο αν δεις τα description γιατί αυτό είναι και το σήμα κατατεθέν των βίντεο μου. Πάντως είναι Common Creatives η άδεια του και μπορείς να την κατεβάσεις

  8. Καλησπέρα, έχω μερικές ερωτήσεις να κάνω
    1)Οι ρυθμίσεις στο βήμα 6 μπορούμε και να τις κάνουμε εδώ https://cerebrux.net/2011/02/27/10-vimata-gia-kernel-compilling/ ?
    2)Μπορούμε στον ίδιο φάκελο source να έχουμε και τον πυρήνα zen και τον άλλον του θέματος στην ερώτηση μου νούμερο ένα?
    3) Εαν δεν μαρέσει ο καινούργιος πυρήνας τον βγάζω με το να κάνω απεγκατάσταση τα πακέτα που δημιούργησα μετά το compile και κάνοντας επανεκκίνηση?

  9. make[1]: Leaving directory `/home/sotiris/source/zen-stable’make: *** [debian/stamp/build/kernel] Error 2
    Και εγώ το ίδιο (το έπαθα σε ubuntu 11.10 και mint 12). Σε arch linux δουλεύει κανονικά
    Τι μπορεί να φταίει? bug στο make-kpkg?

  10. Ναι ,όντως είναι bug..και γω το έχω αυτό το «ζωϋφιο» . Δεν γίνεται με τίποτα το compile με τον Zen.

    • Φαντάζομαι οτι έχεις το ίδιο σύστημα με το δικό μου σωστά ?
      Απο ότι βλέπω έπεσες σε ενα bug το οποίο δεν έχει λυθεί http://zen-kernel.org/issues/54
      Μην πτοείσαι αν θες optimised kernel έχουμε γράψει και άλλους οδηγούς όπου χρησιμοποιούμε και αυτούς που μας παρέχει η διανομή μας. Δες την προτεινόμενη αρθρογραφία για μελέτη.

  11. [γλιψιμο mode]Καταρχας κανετε φανταστικη δουλεια[/γλιψιμο mode]

    Και στο θεμα μας…Ολο αυτο εχει καποια διαφορα στις επιδοσεις ενος οικιακου υπολογιστη και κατα ποσο ειμαστε σιγουροι οτι ο τυπας αυτος που το εφτιαξε εχει δικιο?Γιατι το scheduling χωραει παρα πολυ συζητηση και αν καποιος ειχε βρει αυτη την μαγικη συνταγη γιατι να μην την ακολουθουσαν ολα τα unix-like

    • Γιατί ??? Γιατί όπως θέτεις εσύ τα ερωτήματα έτσι θέτουν και όλοι οι υπόλοιποι ! Αρα υπάρχουν διαφωνίες και από τις δύο πλευρές για το ποια είναι η καλύτερη λύση. Απλά επειδή κάνει κουμάντο ο Linus Torvalds, σε αυτό το θέμα είναι κάθετος και χρησιμοποιεί CFQ ως scheduler.

      • Βασικά κουμάντο κάνεις εσύ! Ήρθε η στιγμή να μας πεις πώς ο Linus έκλεψε το Linux (τότε ονομαζόταν Salihux (Super Artificial Legendary Important Human User Xperience)) από σένα.

        Χαχαχα!

        • Aπλα ρωταω γιατι πραγματικα δεν ξερω τι παιζει κ αν οντως υπαρχουν καποια στοιχεια που να το τεκμιριωνουν ή εστω να λενε οτι πχ για την ταδε χρηση αυτο ή το αλλο ή καποιο αλλο ειναι καλυτερο…ή εστω αν υπαρχουν χρηστες που οντως βλεπουν διαφορα….

          υγ:καλα μην τον κανουμε τον καημενο τον Linus να φαινεται σαν τον Gates

        • Aπλα ρωταω γιατι πραγματικα δεν ξερω τι παιζει κ αν οντως υπαρχουν καποια στοιχεια που να το τεκμιριωνουν ή εστω να λενε οτι πχ για την ταδε χρηση αυτο ή το αλλο ή καποιο αλλο ειναι καλυτερο…ή εστω αν υπαρχουν χρηστες που οντως βλεπουν διαφορα….

          υγ:καλα μην τον κανουμε τον καημενο τον Linus να φαινεται σαν τον Gates

  12. Ακολούθησα τον οδηγό σου… μου έβγαλε error: «make[1]: Leaving directory `/home/giannis/source/zen-stable’
    make: * [debian/stamp/build/kernel] Error 2»

    Αλλα φτιάχνεται έτσι: στο φάκελο που έχεις αρχίσει το build δλδ στο /home/mitsos/source/zen-stable. κάπου εκεί θα βρεις έναν φάκελο kernel. εκεί άνοιξε τερματικό και εκτέλεσε sudo gedit ./debug/kdb/kdb_io.c στον gedit τώρα ψάχνουμε (ctrl+f) τη γραμμή c->write(c, kdb_buffer, retlen);
    και την κάνουμε c->write(c, kdb_buffer, retlen, 0);
    και τη γραμμή c->write(c, moreprompt, strlen(moreprompt));
    την κάνουμε
    c->write(c, moreprompt, strlen(moreprompt),0);
    το σώζουμε και ύστερα κάνουμε κανονικά compile.

    • Να είσαι καλά Donald για το Hack που προτείνεις. Ελπίζω όποιος το συναντήσει να το λύσει όπως το περιγράφεις.
      Προσωπικά δεν το συνάντησα διότι αφαιρώ το KDB απο τον kernel πριν κάνω το compile😛

  13. Καλησπερα salih . Εαν εχω κανει dual boot και πειραξω τον πυρηνα στα ubuntu θα έχω μετα πρόβλημα στα windows ; Σε ευχαριστω πολυ .

    • Όχι, είναι δυο διαφορετικά πράγματα. Στο ubuntu τι θες ακριβώς να πειράξεις ?
      Να εγκαταστήσεις κάποιον άλλον πυρήνα ?

      • Οχι απλως να ταιριαξω τον ηδη υπαρχοντα στους πορους του δικου pc. Ειναι η πρωτη φορα που θα το κανω . Το ubuntu ειναι 16.10 και το mint 18.

        • Salih σε ευχαριστώ πολύ για τις γνώσεις που μου παρείχες μέσω του άρθρου. Μου άνοιξες νέους ορίζοντες στην γνώση του linux. Απλά στο τέλος της μεταγλώττισης μου έβγαλε το παρακάτω μήνυμα:

          make[1]: Leaving directory ‘/home/george/source/linux-4.4.0’
          debian/ruleset/targets/common.mk:295: recipe for target ‘debian/stamp/build/kernel’ failed
          make: *** [debian/stamp/build/kernel] Error 2

          Αν μπορείς θα ήθελα μια μικρή βοήθεια.
          Σε ευχαριστώ πολύ.
          (Η μεταγλώττιση έγινε στο mint 18).

        • Κάπου πιο πάνω πρεπει να είναι το σφάλμα. Αυτό που μου δείχνεις δεν εμφανίζει γιατί σταμάτησε αλλά μονο το οτι σταμάτησε.
          Για κάνε scroll πιο πάνω το σφάλμα και googlαρε το να δεις τι θα σου βγάλει.

          Γενικά να ξέρεις η μεταγλώττιση θέλει αρκετό ψάξιμο και μιας και μπήκες σε αυτά τα μονοπάτια… ετοιμάσου για αρκετό διάβασμα !😛

Απορίες, παρατηρήσεις, ιδέες... Ελεύθερα ! Πες την άποψή σου... έστω και Ανώνυμα:

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

Λογότυπο WordPress.com

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

Φωτογραφία Twitter

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

Φωτογραφία Facebook

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

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

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

Σύνδεση με %s