Archiv verlassen und diese Seite im Standarddesign anzeigen : SMP Verhalten von Linux
Berufspenner
14.04.03, 21:40
Hi@all
Ich wollte mal wissen, ob man unter Linux Software extra für SMP Maschienen coden muss oder ob der Kernel da über ein inetligentes Management verfügt? Unter W2k z.B. benötigt man ja extra Software die den SMP Betrieb unterstützt.
Cu
André
Hi!
Unter Linux ist es genauso (Q3A ist da ein gutes Beispiel - das unterstüzt SMP, aber nicht in allen Versionen... gab zwischenzeitlich Probleme, außerdem muß es der SMP-Support beim Start eingeschaltet werden).
Es gibt da eigentlich nur weniges zu beachten:
- du brauchst mehrere Threads - Linux kann nicht ein einzelnes Programm auf mehreren CPUs laufen lassen, andere Systeme übrigens auch nicht (obwohl ich mir da z.B. bei der IBM zSeries nicht so sicher wäre... keine Ahnung wie das Programm das sieht wenn dynamisch zusätzliche CPUs zugewiesen werden)
- du mußt für die Threads per Mutex/Semaphoren/Locks etc. den Zugriff auf die gemeinsamen Daten/Speicherbereiche managen - damit immer nur einer drauf zugreift (egal ob lesend oder schreibend - wenn einer grad schreibt und ein anderer gleichzeitig liest hast du eine "race condition" fabriziert, und diese sind richtig eklig da nur schwer reproduzierbar)
Den Rest machen Kernel und glibc für dich.
Google wird dir bestimmt mit weitergehenden Infos helfen.
ciao
Michael
HirschHeisseIch
14.04.03, 22:06
Der/Die CPU´s werder vom Kernel angesprochen. Wenn der SMP aktiviert hat, dann rennen beide ;) Ob die Software extra gecodet werden muss weiss ich nicht, kanns mir aber nicht vorstellen.
@HirschHeisseIch:
Ja, die Software muß (wie angesprochen) extra programmiert werden. Beispiele dafür sind der hlds und Q3A - während Q3A mit aktiviertem SMP-Support (glaube dank Threads) auf beiden CPUs läuft so ist der hlds (leider) auf eine CPU "festgenagelt". Mußte ich leider feststellen als ich vor Jahren mal testweise ein Dual-Board unter Linux laufen hatte (das legendäre Abit BP-6 mit 2 Celerons :D ).
ciao
Michael
derRichard
14.04.03, 22:22
hallo!
sagen wir mal ich schreibe in c ein programm mit einer endlosschleife und kompiliere das dann auf meiner smp-maschine.
nutzt mein c-programm dann nur eine cpu oder alle?
//richard
Berufspenner
14.04.03, 22:32
Hi@all
Danke für die Infos. Wie sieht es da denn mit der meisten Serversoftware wie Apache und die gängigen FTP-Server bzw. Datenbankserver aus? Sind die auf die SMP Architektur ausgerichtet? Kennt wer evtl. gute, am besten deutschsprachige seiten von SMP und 64Bit Systeme in Verbindung mit C++ angesprochen oder behandelt werden?
Cu
André
Original geschrieben von derRichard
hallo!
sagen wir mal ich schreibe in c ein programm mit einer endlosschleife und kompiliere das dann auf meiner smp-maschine.
nutzt mein c-programm dann nur eine cpu oder alle?
ein prozess == eine cpu. giklt auch für threads, weil threads vereinfachte prozesse sind.
-j
und wenn man zwei Programme startet, die nicht extra an SMP angepasst wurden ? Macht der SMP-Linux-Kernel beide Programme auf die erste CPU, oder belegt jedes Programm eine andere CPU ?
Original geschrieben von marcdevil
und wenn man zwei Programme startet, die nicht extra an SMP angepasst wurden ? Macht der SMP-Linux-Kernel beide Programme auf die erste CPU, oder belegt jedes Programm eine andere CPU ?
per default gibt es keine feste zuordnung von prozess -> cpu, sogenannte cpu-affinität.
kann aber per patch nachgerüstet werden.
d.h. der scheduler verteilt die timeslices, nicht die prozesse auf die cpus, so dass jede cpu die gleiche anzahl an arbeit erhält.
-j
Berufspenner
15.04.03, 11:00
Hi@all
Also soweit ich das richtig verstehe, arbeitet mein Server trotz SMP-Kernel nur wirklich mit einer CPU und die andere ist eigentlich mehr stanby, oder?
Cu
André
Hi,
das siehst du in /proc/interrups, da müssten beide CPUs etwa die gleiche Anzahl anzeigen:
# cat /proc/interrupts
CPU0 CPU1
0: 1373008408 1372138293 IO-APIC-edge timer
1: 3775 3859 IO-APIC-edge keyboard
2: 0 0 XT-PIC cascade
8: 3 2 IO-APIC-edge rtc
10: 473626179 473565101 IO-APIC-level eth0
12: 25061332 25036577 IO-APIC-level Mylex AcceleRAID 170
14: 1345 1195 IO-APIC-edge ide0
NMI: 0 0
LOC: 2745278091 2745278090
ERR: 0
MIS: 605
EDIT:
daran siehst du zumindest ob der Kernel beide CPUs verwendet,.. genaueres kann ich nicht sagen.
Ahja, die Maschine läuft schonr echt lang daher die grossen Zahlen.
# uptime
12:29:14 up 317 days, 17:26, 2 users, load average: 0.06, 0.13, 0.19
Ciao, Bernie
Original geschrieben von Berufspenner
Also soweit ich das richtig verstehe, arbeitet mein Server trotz SMP-Kernel nur wirklich mit einer CPU und die andere ist eigentlich mehr stanby, oder?
nein, wie kommst du denn darauf?
wie ich bereits schrieb, verteilt der scheduler die timeslices auf die vorhandenen prozessoren.
hast du smp, werden (rein theoretisch) doppelt soviele slices abgehandelt, bsp:
komprimiere auf einer UP-maschine zwei files mit bzip2 => %cpu = 50% für jedes bzip2
das gleiche auf einer smp-maschine => 100% pro bzip2
in dem beispiel stehen 2 bzip2 in der runqueue (alle anderen prozesse werden der einfachheit vernachlässigt) und warten auf abarbeitung. bei einem prozessor muss das jeweils andere bzip2 warten, bis die zeitscheibe des vorhergehenden vorbei ist. bei smp dagegen werden die zeitscheiben der beiden prozesse parallel abgearbeitet.
-j
Berufspenner
15.04.03, 11:58
Hi@all
dualserver:~# cat /proc/interrupts
CPU0 CPU1
0: 469300 476961 IO-APIC-edge timer
1: 2 0 IO-APIC-edge keyboard
2: 0 0 XT-PIC cascade
10: 572464 573929 IO-APIC-level eth0
11: 5515 5458 IO-APIC-level aic7xxx
14: 38 14 IO-APIC-edge ide0
NMI: 0 0
LOC: 946294 946292
ERR: 0
MIS: 0
Sieht also so aus, als ob beide CPU's relativ gleichmässig beansprucht werden.
Cu
André
Original geschrieben von Berufspenner
Sieht also so aus, als ob beide CPU's relativ gleichmässig beansprucht werden.
solange man nur die hardware-ints betrachtet, stimmt die aussage. /proc/interrupts sagt aber nichts über den tatsächlichen load aus. wenn du es genau wissen willst, installier dir 'sar', da wird für jede CPU detailliert protokolliert:
# sar -U ALL
12:50:00 PM CPU %user %nice %system %idle
01:00:00 PM 0 18.42 0.00 5.98 75.60
01:00:00 PM 1 18.22 0.00 5.75 76.03
01:00:00 PM 2 20.54 0.00 6.77 72.69
01:00:00 PM 3 19.64 0.00 6.14 74.22
01:00:00 PM 4 21.20 0.00 6.72 72.09
01:00:00 PM 5 40.34 0.00 6.42 53.23
01:00:00 PM 6 19.46 0.00 6.40 74.14
01:00:00 PM 7 20.65 0.00 6.75 72.60
Average: 0 18.42 0.00 5.98 75.60
Average: 1 18.22 0.00 5.75 76.03
Average: 2 20.54 0.00 6.77 72.69
Average: 3 19.64 0.00 6.14 74.22
Average: 4 21.20 0.00 6.72 72.09
Average: 5 40.34 0.00 6.42 53.23
Average: 6 19.46 0.00 6.40 74.14
Average: 7 20.65 0.00 6.75 72.60
-j
Hi,
wo ist sar dabei? Wenn ich apt-get install sar eintippe bekomme ich, searchandrescue, ein Spiel.
Ciao, Bernie
Original geschrieben von bernie
wo ist sar dabei? Wenn ich apt-get install sar eintippe bekomme ich, searchandrescue, ein Spiel.
bei redhat ist es paket sysstat, wo es bei debian ist, keine ahnung. auf der debian-site konnte man glaube ich pakete nach binaries durchsuchen.
-j
Berufspenner
15.04.03, 12:31
Hi@all
Unter Debian ist es auch das Packet 'sysstat'. Mein Ergebnis
dualserver:~# sar -P ALL
Linux 2.4.20 (dualserver) 04/15/03
13:24:44 CPU %user %nice %system %iowait %idle
13:25:01 all 1.23 0.00 0.76 0.00 98.01
13:25:01 0 0.06 0.00 0.62 0.00 99.33
13:25:01 1 2.40 0.00 0.89 0.00 96.70
Average: all 1.23 0.00 0.76 0.00 98.01
Average: 0 0.06 0.00 0.62 0.00 99.33
Average: 1 2.40 0.00 0.89 0.00 96.70
Cu
André
netzmeister
15.04.03, 12:54
Hallo,
normalerweise macht das SMP der Kernel. Hier z.B. die Ausgabe des Linuxforen Servers:
web2:~# cat /proc/interrupts
CPU0 CPU1
0: 748226907 747584558 IO-APIC-edge timer
1: 13915 14064 IO-APIC-edge keyboard
2: 0 0 XT-PIC cascade
8: 84 92 IO-APIC-edge rtc
15: 10782 10174 IO-APIC-edge ide1
17: 67261128 67263807 IO-APIC-level 3ware Storage Controller
18: 237387280 237348571 IO-APIC-level eth0
NMI: 0 0
LOC: 1495829284 1495829283
ERR: 0
MIS: 242
web2:~#
Oder mein Adserver:
www1:~ # cat /proc/interrupts
CPU0 CPU1
0: 35809825 36066144 IO-APIC-edge timer
1: 6 4 IO-APIC-edge keyboard
2: 0 0 XT-PIC cascade
5: 4745517 4744399 IO-APIC-level gdth
8: 0 2 IO-APIC-edge rtc
9: 30 30 IO-APIC-level sym53c8xx, sym53c8xx
10: 17668988 17669114 IO-APIC-level eth0
12: 5 2 IO-APIC-edge PS/2 Mouse
15: 114 117 IO-APIC-edge ide1
NMI: 0 0
LOC: 71885862 71885765
ERR: 0
MIS: 0
www1:~ #
Du passt den Kernel an, danach geht das vollautomatisch.
Viele Grüße
Eicke
derRichard
15.04.03, 13:06
hallo!
jetzt muss ich auch mitmachen :D
richard@server2 richard $ cat /proc/interrupts
CPU0 CPU1
0: 320964621 324840749 IO-APIC-edge timer
1: 1 1 IO-APIC-edge keyboard
2: 0 0 XT-PIC cascade
13: 1 0 XT-PIC fpu
14: 18 17 IO-APIC-edge ide0
15: 7390903 7349238 IO-APIC-edge ide1
16: 8642524 8645291 IO-APIC-level eth0
19: 1581823 1594786 IO-APIC-level aic7xxx
NMI: 0
ERR: 0
richard@server2 richard $ uptime
2:05pm up 74 days, 17:54, 2 users, load average: 0.03, 0.01, 0.00
//richard
in "top" kann man eigentlich auch die auslastung der beiden cpus sehen (zumindest bei mir so)
greetz
cya
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.