Linux Tutorials

Debian Kernel für Gameserver optimieren

Als ich noch Gameserver-Sponsor war, wurde mir sehr oft die Frage gestellt, was am Kernel optimiert werden muss damit z. B. ein 128-Tick Counter-Strike: Global Offensive Server problemlos läuft. Diese Frage konnte ich aber jeweils immer nur zum Teil beantworten oder für „Laien“ zu unverständlich.

Deshalb schreibe ich dieses Tutorial, welches die grundlegende Optimierung des Kernels beinhaltet. Jegliches Feintuning müsst ihr selbst für euer System, auf dem der Gameserver laufen soll, selbst erproben.

Das genutzte OS ist in diesem Fall Debian 8.7 (Jessie).

1. Die Vorbereitungen

Bevor wir überhaupt damit anfangen können den Kernel zu modifizieren, updaten wir unsere Paketlisten und das System mit:

$ apt-get update && apt-get upgrade

Nachdem wir dies getan haben, installieren wir die zum kompilieren benötigten Pakete:

$ apt-get install kernel-package libncurses-dev bzip2 make build-essential

Je nach Rechenleistung eures Servers, kann dies eine Weile dauern. Denn die Pakete, die wir installieren, haben viele Abhängigkeiten, welche mit installiert werden.

Als nächstes laden wir uns die Sourcefiles des zu diesem Zeitpunkt aktuellen Stable-Kernels von https://www.kernel.org/ herunter und entpacken diesen gleich.

An dieser Stelle möchte ich noch sagen, dass ihr diesen Punkt bitte nicht einfach nur kopiert. Nehmt den aktuellen Stable- oder Mainline-Kernel von der oben genannten Seite.

Aber nun zum eigentlichen Download:

$ wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.9.6.tar.xz

$ tar -xvf linux-4.9.6.tar.xz

Jetzt wechseln wir in das Verzeichnis mit den gerade entpackten Dateien:

$ cd linux-4.9.6

2. Das Modifizieren des Kernels

Ab diesem Punkt gibt es zwei Möglichkeiten mit dem Modifizieren zu beginnen. Die erste wäre mit dem Befehl $ make localmodconfig. Dieser erstellt eine Konfiguration basierend auf der eures aktuellen Systems und der dort geladenen Module.

Variante 2 ist der Befehl $ make localyesconfig. Hier wird ebenfalls eine Konfiguration basierend auf eurem System erstellt, nur hier werden die geladenen Module direkt in den Kernel eingebunden.

Für dieses Tutorial nutze ich den Befehl:

$ make localmodconfig

Beim Ausführen dieses Befehls werden eine ganze Menge Fragen angezeigt, die man alle mit der „Enter“-Taste bestätigen kann.

Wenn der Grundaufbau steht, können wir nun die grafische Konfiguration des Kernels aufrufen.

$ make menuconfig

Hier seht ihr ein recht einfach gehaltenes Menü, durch welches ihr mit den Pfeiltasten navigiert.

Als erstes nehmen wir uns das Timer subsystem vor. Dazu begebt ihr euch auf General setup ---> Timers subsystem --->

Hier angekommen ändern wir das Timer tick handling auf Full dynticks system (tickless).

Setzt mit Hilfe der Leertaste überall ein Sternchen um die Funktionen zu aktivieren. So sollte es nun bei euch aussehen:

Über die Option Number of CPUs above which large-system approach is used braucht ihr euch keine Gedanken machen.

Wir gehen dann wieder zurück in das Hauptmenü und widmen uns den IO Schedulers.

In das Untermenü gelangt ihr so: [*] Enable the block layer ---> IO Schedulers --->

Dort angekommen ändert ihr den Default I/O scheduler auf Deadline.

Und wir begeben uns wieder einmal in das Hauptmenü und definieren jetzt den Prozessor Typ sowie die Tickrate des Kernels.

Dazu gehen wir in den Menüpunkt Processor type and features --->

Hier bewegen wir uns schrittweise in der Liste nach unten bis wir folgenden Punkt gefunden haben:

Wenn ihr diesen Punkt gefunden habt, ändert ihn entsprechend eurer CPU (Generic-x86-64 für AMD und Core 2/newer Xeon für Intel).

Und weiter geht es in der Liste. Wir setzen nun das Preemption Model auf Preemptible Kernel (Low-Latency Desktop).

Wir wollen ja schließlich einen schnellen und genauen Kernel haben. Was uns dazu noch fehlt ist die Timer frequency. Diese findet ihr weiter unten im selben Menü.

Wenn ihr den Punkt gefunden habt, setzt ihn auf 1000 Hz.

Zum vorletzten mal (versprochen) begeben wir uns in das Hauptmenü und suchen nun den Menüpunkt CPU Frequency scaling auf.

Finden tut ihr ihn hier: Power management and ACPI options ---> CPU Frequency scaling --->

In diesem Menü angekommen deaktiviert ihr das Modul mit der Leertaste und könnt direkt wieder zurück ins Hauptmenü.

Und zu guter Letzt wollen wir ein paar Netzwerk-Optionen ändern.

Also begeben wir uns folgendermaßen dorthin: [*] Networking support ---> Networking options --->

Angekommen bewegt ihr euch nach unten bis zum Punkt Network packet filtering framework (Netfilter) und aktiviert es. Sollte es schon aktiviert sein, dann müsst ihr nichts daran ändern.

Als letzte Veränderung aktivieren wir noch das QoS and/or fair queueing. Wie eben kann dieser Punkt bereits aktiv sein. Sollte es nicht der Fall sein, muss er aktiviert werden.

Nachdem wir all diese Einstellungen vorgenommen haben, können wir das grafische Menü mit „Exit“ verlassen und uns dem Kompilieren widmen.

Wenn das Menü verlassen wird, fragt man euch, ob ihr die aktuelle Konfiguration speichern wollt. Beantwortet diese definitiv mit „Yes“, ansonsten könnt ihr alle Einstellungen erneut vornehmen.

3. Das Kompilieren und Installieren des Kernels

Ab hier ist es nicht mehr weit bis zu eurem eigenen Kernel.

Den Prozess starten wir mithilfe von:

$ makekpkg clean && makekpkg initrd kernel_image kernel_headers

Das Kompilieren des Kernels kann je nach Rechenleistung eine „Weile“ dauern. Also könnt ihr ruhig Kaffee und Kuchen zu euch nehmen.

Sobald wir fertig sind, verlassen wir den Ordner mit den Sourcefiles und sehen dort auch schon unsere .deb Dateien die zum Installieren benötigt werden.

Diese beiden müssen wir nun nur noch mit dpkg an unser System binden:

$ dpkg -i linux-headers-4.9.6_4.9.6-10.00.Custom_amd64.deb

$ dpkg -i linux-image-4.9.6_4.9.6-10.00.Custom_amd64.deb

Nach der Installation starten wir das System neu:

$ reboot

Und kontrollieren ob der Kernel auch wirklich installiert und aktiviert wurde:

$ uname -a

Eure Ausgabe sollte dann ähnlich dieser hier sein:

Entnehmen könnt ihr dem ganzen die Kernel-Version, das Datum und die Uhrzeit wann der Kernel kompiliert wurde und welche Preemtion gewählt ist.

Zum Abschluss des Ganzen könnt ihr nun die Sourcefiles und die .deb Dateien einfach löschen.

Am schnellsten geht es mit dem Befehl:

$ rm -r linux*

Bedenkt jedoch bitte, dass dieser alles in dem Verzeichnis, in dem ihr euch befindet, löscht, was mit „linux-“ beginnt. Also schaut lieber noch einmal nach, denn ungewollter Datenverlust ist immer ärgerlich.

 

Ich hoffe dieses Tutorial ist einigen von euch hilfreich und falls ihr Fragen habt oder Fehler auftreten, stellt diese in den Kommentaren.

Tags

Martin Krzeminski

Moin,mein Name ist Martin, bin 22 Jahre alt und komme aus der schönen deutschen Hauptstadt Berlin. Selbst bin Ich gelernter Elektroniker für Betriebstechnik und hobbymäßiger Linux System-Administrator.In meiner Freizeit setze Ich mich viel mit Linux-Systemen auseinander und begegne dementsprechend auch vielen Problemen und versuche jene zu lösen. Ansonsten bin Ich ein einfacher Zocker der alles anspielt was er in die Finger bekommt (okay...fast alles :D). Wenn Ich mal vom PC wegkomme treffe Ich mich mit Freunden oder gehe zum Sport.

Das könnte Dich auch interessieren

5 Kommentare

  1. Guten Tag

    Vielen Dank für die Anleitung.

    Ein kleines Problem habe ich noch:

    Power management and ACPI options –> CPU Frequency scaling –> -*- CPU Frequency scaling

    -*- CPU Frequency scaling kann icht nicht deaktivieren! Zusammenhang mit welchen Konfiguration?

    Vielen Dank

    Dave

    1. Da Ich nicht weiß welche Kernel-Version du genutzt hast, nehme Ich mal an das es der zur Zeit aktuelle 4.11.1 ist.
      Habe mal nachgeschaut und es lässt sich wirklich nicht deaktivieren.
      Stattdessen kannst du im selben Menü den „Default CPUFreq governor“ auf „performance“ stellen.
      Dieser lässt die CPU permanent auf der höchsten erlaubten Frequenz arbeiten.

      Ich hoffe das dir das weiterhelfen konnte!

      Gruß

      Martin

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Close