PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Gameserver Prozesse auf Cores Verteilen



timelez
22.07.09, 15:52
Hallöchen,

bin neu hier, hab die Suche benutzt aber nichts passendes gefunden.

Befasse mich seit kurzem gezwungenermaßen mit Linux und bin schnell auf ein Problem gestoßen an dem ich zu knabbern habe.

Ich habe einen Rootsrever bestellt auf dem Debian läuft. Ist ein Xeon Quadcore Prozessor auf dem 8 Gameserver laufen.

Nun will ich die Server so aufteilen das jeweils 2 Server auf einem Kern laufen. Die schwierigkeit dabei ist, das alle Server den gleichen Dateinamen haben und alle Paar stunden der Prozess neu gestartet wird, was ihm eine Variabla PID gibt.

Somit habe ich mir gedacht das über ein Script zu lösen das beim Start des Prozesses überprüft ob auf den einzelnen Kernen einer dabei ist wo der Prozess nur 1x läuft und ihn danach auf diesen Core legt. So das automatisch immer nur MAX 2 Serverprozesse pro Core laufen. Leider habe ich keine ahnung wie man so ein Script schreibt und wo man das hinpackt...


Hoffe das war verständlich und es findet sich jemand der mir helfen kann :)

Danke im vorraus!

asi_dkn
22.07.09, 16:05
Lass doch die Verteilung einfach den Kernel machen. Zudem, und da will ich mich jetzt nicht verbindlich äussern, glaube ich nicht das es möglich ist einem Prozess eine CPU zuzuweisen. Mir wäre das auf jeden Fall neu. Ich denke mal der Scheduler weiss schon was er macht und wie er es machen muss.

DrunkenFreak
22.07.09, 18:00
Das Skript benutzt du einfach zum Ausführen der einzelnen Gameserver, sprich du legst für jeden Server ein Skript an und änderst nur die Parameter für den Server.

Wie du ein Skript schreibst erfährst du am bestern hier (http://tldp.org/LDP/abs/html/). Das dürfte die ultimative Anleitung sein.

so long

Aqualung
22.07.09, 18:37
http://ocaoimh.ie/run-a-program-on-one-cpu-core-in-linux/

zyrusthc
22.07.09, 22:15
Nicht mal Grundlagen beherschen aber nen Rootserver mieten tzzzzzz....
schedutils wurde ja bereits genannt.
Ungetestet:

#!/bin/sh
NAME=yuhu
BASEDIR=/gameserver/irgentwas
COMMAND="binäry viele viele viele Params"
LOGFILE=/tmp/watweissich.log
PIDFILE=/tmp/watweisich.pid
CORE="01"


case "$1" in
start)
echo "Starte : $NAME"
cd $DIR
if test -f $LOGFILE; then
mv $LOGFILE $LOGFILE.old
fi

$BASEDIR/$COMMAND 2> $LOGFILE &
echo $! > $PIDFILE
taskset -p $CORE $(cat $PIDFILE)
;;


stop)
PID="`cat $PIDFILE`"
kill $PID
;;

restart)
PID="`cat $PIDFILE`"
echo " ... Server gestoppt ... Kommando Start wird jetzt ausgeührt"
kill $PID
echo "Starte : $NAME"
cd $DIR
if test -f $LOGFILE; then
mv $LOGFILE $LOGFILE.old
fi

$BASEDIR/$COMMAND 2> $LOGFILE &
echo $! > $PIDFILE
;;


*)
echo "Usage: $0 Parameter eingeben {start|stop|restart}"
exit 1
;;
esac


Greeez Oli