Javaprogramm unter Linux auf bestimmten Kern starten/laufen lassen ?

Toralfus

Mitglied
Halli Hallo,

ich bin Toralfus und hätte gleich eine kurze Frage, kann man Java-Programmen beim Starten unter Linux einen bestimmten Kern zuweisen ? Wenn man das fertig compilierte Programm mit java.main ausführt ?

So das es möglich wäre unterschiedliche Java-Programme auf unterschiedlichen Kernen laufen zu lassen ?

Gruß und Dank

Toralfus
 
Das ist Aufgabe des Schedulers des Betriebssystems und der wird nach Möglichkeit auch versuchen alle Resourcen gleichmäßig auszulasten.
 
job CPU´s...

Nach meinen Informationen ist es möglich einzelnen Benutzern, verschiedene (begrenzte) Systemresourcen zur Verfügung zu stellen. Bei uns in der FH laufen auf 3/4 Kernen Prozesse und mit dem 4. dürfen sich die Studenten begnügen. Ich dachte nun das könnte man auch für einzelne Prozesse (Programme) hin bekommen.
 
hat man denn per java kontrolle über den scheduler des os? man kann threads doch für den start vorsehen, aber wann dieser tatsächlich startet / auf welchem kern regelt das os doch eigenmächtig! wann halt zeit dafür ist. zumindest unter win, oder?
 
hat man denn per java kontrolle über den scheduler des os? man kann threads doch für den start vorsehen, aber wann dieser tatsächlich startet / auf welchem kern regelt das os doch eigenmächtig!
Prinzipiell stimmt das, aber kann zumindest unter Linux auch manuell geregelt werden (Stichwort CPUSets): CPUSETS for Linux 2.6

Über /proc (oder /sys?) kann dann eingstellt werden, welcher Prozess wo laufen soll. Das funktioniert, die nötigen Rechte vorausgesetzt, dann auch über Java.
 
😳Kurze Zwischenfrage: Auch wenn es vieleicht nicht viel Sinn macht könnte man dann also auf einen Kern nen Server laufen lassen, während man auf den verbleibenen Kernen Clients laufen lässt. Welche über verschiedene Ports mit den Server komunizieren ?
 
sollte gehen, wenn das auch auf einem kern mit nem server aufm lokalhost geht, warum dann nicht auch mit mehreren kernen? 🙂 aber verschiedene ports wohl nur, wenn der server mehrere sockets hat.
danke @ madboy, wußte ich nich! 🙂 nette sache
 
Die Synchronisierung ist deine Aufgabe.

Aber das Aufteilen auf Kerne ist immernoch unsinnig. Dein Betriebssystem sorgt schon dafür, dass alles parallel wunderbar ausgeführt wird und keine CPU tausendmal effektiver ausnutzen, als wenn du das bestimmst.
 
aber verschiedene ports wohl nur, wenn der server mehrere sockets hat.
???:L
Ich glaube, da verwechselst du was. Ein Socket ist im Allgemeinen die Kombination aus IP-Adresse und Portnummer. Wenn also eine IP am Server, dann ist ein Port einem Socket äquivalent.

kommt es dann aber nicht zum Daten crash wenn 2 gleichzeitig auf einen Port senden wollen ? Oder Synchronisiert Java das ?
Du kannst einen Socket (siehe oben) nicht zwei Mal verwenden. Java bzw. das Betriebssystem wirft dir dann eine Fehlermeldung.
 
Zuletzt bearbeitet:
Die Synchronisierung ist deine Aufgabe.

Aber das Aufteilen auf Kerne ist immernoch unsinnig. Dein Betriebssystem sorgt schon dafür, dass alles parallel wunderbar ausgeführt wird und keine CPU tausendmal effektiver ausnutzen, als wenn du das bestimmst.

Kommt drauf an, was man will. Will man die CPUs optimal ausnutzen, dann hast du natürlich recht. Will man aber eine möglichst gute Antwortzeit von einem Prozess, kann es durchaus sinnvoll sein, den Prozess allein auf eine CPU zu packen.
 
Kommt drauf an, was man will. Will man die CPUs optimal ausnutzen, dann hast du natürlich recht. Will man aber eine möglichst gute Antwortzeit von einem Prozess, kann es durchaus sinnvoll sein, den Prozess allein auf eine CPU zu packen.
Im Gegenteil 😉
Da dein Betriebsystem auch noch viele weitere Prozesse auf die Cores zuteilt, muss dein fest eingestellter Core zwischen den Prozessen geteilt werden und du hast auch wieder ein Scheduling 😉
Was du ansprichst entspricht viel eher dem Nice-Wert eines Prozess in Linux, du kannst sagen, dass der Prozess eine sehr hohe Priorität und wird deshalb vom Betriebssystem immer vorrangig ausgeführt, DAS kann zu besseren Antwortzeiten führen.
Wobei ich mal behaupten würde, dass die Antwortzeiten auch erst nachlassen, wenn alle Kerne voll ausgelastet sind.
 
Das geht jetzt zwar am Thema vorbei, aber sagt dir der Begriff "Prozesswechsel-Latenz" bzw. Process switching latency - Wikipedia, the free encyclopedia was? Wenn nur ein Prozess auf einem Prozessor ausgeführt wird, müssen diverse Dinge nicht gemacht werden (Contextwechsel, also Kopieren der Prozessinformationen aus den CPU-Registern in einen Cache etc.), was wiederum die Antwortzeit dieses Prozesses erhöht.

EDIT: natürlich erhöht sich die Antwortzeit nicht, sondern sie verringert sich 😳
 
ne, ice-breaker hat recht.

Nur weil du einem Prozess einen festen Kern(/Prozessor) zuweist, heisst das nicht, das dieser Prozess den Kern(/Prozessor) exklusiv bekommt. Das OS wird auch weiterhin Contextwechsel machen, um andere Prozesse auch zum Zuge kommen zu lassen.
 
ne, ice-breaker hat recht.

Nur weil du einem Prozess einen festen Kern(/Prozessor) zuweist, heisst das nicht, das dieser Prozess den Kern(/Prozessor) exklusiv bekommt. Das OS wird auch weiterhin Contextwechsel machen, um andere Prozesse auch zum Zuge kommen zu lassen.

Das kommt darauf an, was man mit den anderen Prozessen macht 😀
Ich ging davon aus, dass man die anderen Prozesse über CPUSets auf die anderen CPUs verteilt und nur der gewünschte Prozess exklusiv eine physikalische CPU bekommt.

Wer Java programmiert wird aber wahrscheinlich sowieso kein Problem mit Kontextwechselzeiten und Ähnlichem haben ;-)
 

Zurück
Oben