Stephan: Hyperthreading und CPU Last unter Linux

Hallo zusammen,

ich teste gerade ein bisschen mit dem neuen xxl root-server von 1und1.

1und1 schreibt in der Beschreibung:
Root-Server XXL
Maximale Power für höchste Ansprüche

  • Intel Pentium 4 3.036 MHz-Prozessor
  • 2.048 MB Marken-DDR-RAM
  • 120 GB-IDE Festplatte
  • Hyper-Threading (2 virtuelle Prozessoren)

Wenn ich die Prozessorlast im top beobachte dann mache ich folgende beobachtung:

3 root      18  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd_CPU0
    4 root      18  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd_CPU1

Das würde zu den 2 virtuellen Prozessoren passen was ja von mir aus okay ist, wenn ich auch nicht ganz kapier was das bringen soll.

Leider muss ich nun beobachten dass ich die Prozessorlast nicht unter 50% bringe. Sprich wenn ich nen Datenbankjob starte der nen  Rootserver L den Server voll in die Knie zwingt geht der XXL nur auf 50% Last. Somit ist der Job zwar noch schneller wie auf dem L aber nur unwesentlich. Jetzt vermute ich dass der Job nur einem der beiden virtuellen Prozessoren läuft. Kann das sein?
Und wie bekomme ich Ihn dazu dass der den Job mit voller Power rechnet?

Viele Grüße

Stephan

  1. Moin!

    Leider muss ich nun beobachten dass ich die Prozessorlast nicht unter 50% bringe. Sprich wenn ich nen Datenbankjob starte der nen  Rootserver L den Server voll in die Knie zwingt geht der XXL nur auf 50% Last. Somit ist der Job zwar noch schneller wie auf dem L aber nur unwesentlich. Jetzt vermute ich dass der Job nur einem der beiden virtuellen Prozessoren läuft. Kann das sein?
    Und wie bekomme ich Ihn dazu dass der den Job mit voller Power rechnet?

    Es gibt gewisse Dinge, die lassen sich nun mal nur auf einer einzelnen CPU rechnen. Ob eine Datenbankabfrage dazugehört, vermag ich hier nicht sagen, aber ausschließen würde ich es nicht.

    Was dir eine "virtuelle" 2. CPU (Intel-Hyperthreading) dann bringt? Parallel kann der Apache-Prozess, für den die DB-Abfrage gemacht wird, weiterlaufen - bzw. die anderen Apache-Prozesse, die gerade nicht auf die Datenbank warten, sondern statische Seiten ausliefern. Ist doch auch toll, oder?

    - Sven Rautenberg

  2. Hallo Stephan,

    Das würde zu den 2 virtuellen Prozessoren passen was ja
    von mir aus okay ist, wenn ich auch nicht ganz kapier was
    das bringen soll.

    Das bringt eine bessere Lastverteilung. Bei hoher
    Auslastung kann so besser reagiert werden. Das Linux
    Scheduling ist gerade bei hoher Last nicht immer unbedingt
    so sonderlich gut, da ist die Verteilung auf zwei virtuelle
    Prozessoren ein Trick, um die Last besser bewältigen zu
    können.

    Leider muss ich nun beobachten dass ich die Prozessorlast
    nicht unter 50% bringe. Sprich wenn ich nen Datenbankjob
    starte der nen  Rootserver L den Server voll in die Knie
    zwingt geht der XXL nur auf 50% Last. Somit ist der Job
    zwar noch schneller wie auf dem L aber nur unwesentlich.
    Jetzt vermute ich dass der Job nur einem der beiden
    virtuellen Prozessoren läuft. Kann das sein?

    Das ist sogar sehr wahrscheinlich.

    Und wie bekomme ich Ihn dazu dass der den Job mit voller
    Power rechnet?

    Ohne die Software anzupassen? Gar nicht. Von mehreren CPUs
    kann ein Prozess allein nur dann profitieren, wenn er
    multithreaded ist. Ansonsten kann ein Prozess nur von einer
    CPU berarbeitet werden. Ist technisch ohne einen sehr
    grossen Overhead nicht anders möglich.

    Grüße,
     CK

    --
    <zentrum> wie war noch mal die option in make.conf fuer das benutzen von pipes um das compile zu beschluenigen?
    <CK1> CFLAGS="-pipe"
    <torsten> Oder man frage einen Gentooer seiner Wahl, wie man 2 km Compilerswitches fuer seine CPU hinbekommt ;)