Βελτίωση της απόδοσης του πυρήνα Linux με την εντολή sysctl

dimitris | Σάβ, 01/15/2011 - 02:10 | 3' | 1

Οι περισσότερες ρυθμίσεις του Linux γίνονται στα αρχεία που υπάρχουν στπ φάκελο /etc, αλλά υπάρχουν μερικές που δέχονται και πιο άμεση επέμβαση. Αυτές οι ρυθμίσεις έχουν συχνά περίεργα ονόματα, αλλά είναι πολύ χρήσιμες για την βελτίωση της απόδοσης του Linux. Μπορούμε να τις αλλάζουμε on-the-fly με το εργαλείο sysctl.

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

/sbin/sysctl -a | less

Υπάρχουν εκατοντάδες παράμετροι με περίεργα ονόματα, αλλά μπορείτε να καταλάβετε τι κάνουν οι περισσότερες (για παράδειγμα, οι ρυθμίσεις δικτύου έχουν ένα πρόθεμα net).

Μια πολύ χρήσιμη επιλογή είναι η vm.swappiness, που καθορίζει πόση εικονική μνήμη χρησιμοποιείται. Κανονικά, όταν ένα πρόγραμμα χρειάζεται περισσότερη μνήμη και η τελευταία είναι ήδη γεμάτη, ο πυρήνας έχει δύο επιλογές:

α) να μειώσει την cache του σκληρού με την οποία φορτώνονται κάποια αρχεία του στην μνήμη για γρήγορη πρόσβαση ή

β) να μετακινήσει κάποια τρέχοντα προγράμματα στον δίσκο (swap) για προσωρινή αποθήκευση.

Η vm.swappiness, με τιμές μεταξύ 0 και 100, λέει στον πυρήνα ποια μέθοδο να ευνοήσει. Με 0, ο πυρήνας θα αδειάζει την cache του σκληρού όταν η μνήμη είναι λίγη, ενώ με 100 θα στέλνει τα προγράμματα στην swap πιο γρήγορα.

Μπορούμε να πειραματιστούμε αλλά για καλύτερη απόκριση προτείνεται μια τιμή μεταξύ 20 και 30:

 sysctl -w vm.swappiness=25 

Οι ρυθμίσεις με την sysctl χάνονται αν κάνουμε επανακκίνηση ή κλείσουμε τον υπολογιστή, οπότε μόλις βρούμε την κατάλληλη τιμή μιας επιλογής, την αποθηκεύουμε στο αρχείο /etc/sysctl.conf για να διατηρείται και μετά από επανεκκίνηση.

Φόρουμ
Δώσε αστέρια!

MO: (ψήφοι: 0)

Σχόλια

O Lennart Poettering developer της Red Hat (και δημιουργός του pulse audio;)  ισχυρίζεται πως μπορούμε να δούμε βελτίωση στην ταχύτητα και την αποκρισιμότητα του υπολογιστή μας με τον εξής τρόπο:

Κάνουμε edit το αρχείο rc.local  με sudo nano/etc/rc.local και προσθέτουμε τις εξής γραμμές πάνω απο το σημείο που γράφει "exit 0":
mkdir -p /dev/cgroup/cpu
mount -t cgroup cgroup /dev/cgroup/cpu -o cpu
mkdir -m 0777 /dev/cgroup/cpu/user
echo "/usr/local/sbin/cgroup_clean" > /dev/cgroup/cpu/release_agent
Σώζουμε τα παραπάνω και κάνουμε το /etc/rc.local εκτελέσιμο:
sudo chmod +x /etc/rc.local

Στη συνέχεια τροποποιούμε το (κρυφό) αρχείο .bashrc στο  home directory με nano ~/.bashrc) και στο τέλος του αρχείου προσθέτουμε τα εξής:
if [ "$PS1" ] ; then
mkdir -m 0700 /dev/cgroup/cpu/user/$$
echo $$ > /dev/cgroup/cpu/user/$$/tasks
echo "1" > /dev/cgroup/cpu/user/$$/notify_on_release
fi

Για να είμαστε σίγουροι πως τα cgroups σβήνονται κάθε φορά που η τελευταία εργασία τελειώνει κάνουμε τα εξής:

sudo nano /usr/local/sbin/cgroup_clean

Και κάνουμε copy-paste το εξής:

#!/bin/sh
rmdir /dev/cgroup/cpu/$*

Σώζουμε το αρχείο και το κάνουμε εκτελέσιμο:

sudo chmod +x /usr/local/sbin/cgroup_clean

Επανεκκινούμε τον υπολογιστή μας.

Δεν ξέρω τώρα αν θα δούμε στην κυριολεξία διαφορά σε επιδόσεις αφού δεν έτρεξα κάποιο μετροπρόγραμμα. Το σύστημα πάντως δείχνει πιο αποκρίσιμο και τα μενού εμφανίζονται ταχύτερα.

*Τα παραπάνω ισχύουν για Ubuntu.
Επιπλεόν πληροφορίες εδώ και συζήτηση για το θέμα εδώ.