Programm verbraucht unter Linux mehr als bei Windows

Übersicht BlitzMax, BlitzMax NG Allgemein

Neue Antwort erstellen

klin

Betreff: Programm verbraucht unter Linux mehr als bei Windows

BeitragFr, Feb 12, 2010 10:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo leute,
ich habe mir mal nen Spiele Server programmiert. Ich habe es bei mir die ganze Zeit unter Windows programmiert und lief 1A mit 0% CPU. Jedoch als ich es dann auf der Linux kiste starten wollte, erhöhte sich die CPU schalgartig auf 30% sobald ich mich bewege! Dabei schreibe ich nichts auf die Festplatte oder sonst was. Ich habe echt alle versucht... Doch trotzdem verbraucht der Server unter Linux wie bescheuert! Aber unter Windows... kaum was :/
Was mir auch noch aufgefallen ist, dass es fast nur passiert wenn der Server empfängt (Bnetex).
Hatte jemand schonmal solch ein Problem? Muss ich in Zukunft auf i-was achten bei der Linux Programmierung (weil es ja bei Windows 1A läuft)? Weil ich habe ehrlich gesagt 0 bock 10€ mehr zu bezahlen nur weil auf meinem Server Windoof drauf ist Neutral

THX
MFG
Klin

Thunder

BeitragSa, Feb 13, 2010 10:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Welchen Grafiktreiber verwendest du unter Linux?

Es könnte an OpenGL liegen, da es auch unter Windows mehr CPU-Leistung verbraucht als DirectX.


mfg Thunder
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

klin

BeitragSa, Feb 13, 2010 19:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Leider ist es eine reine Konsolenanwendung. Außerdem habe ich nun gefunden wodran es liegt.. kann es aber nicht beheben. sobald ich eine While schleife OHNE Delay mache, zieht es autom. CPU :/ Und in der Recive schleife kann ich kein Delay reinhauen, da er sonst nurnoch stehen bleibt.
Vill. ists ja nur ein Bmax fehler... Naja.. ich bin schon dabei mir einen Windows Server zu besorgen :'(
Achja.. ich habe sehr viele versuche gestartet.
Latenz: 00% bei Windows; Flooden: 03% bei Windows;nix machen: 00% bei Windows;EMPFANGEN:00%
Latenz: ka% bei Linux;FLooden: 50% bei Linux; nix machen: 01% bei Linux;EMPFANGEN:16%

Das empfangen ist natürlich in der While schleife drinnen, damit alle Packete ausgelesen werden.

Ich weiß leider nicht mehr weiter und kaufe mir lieber nen Windows Server anstatt mich nun so drüber aufzuregen.

MFG
Klin
 

FWeinb

ehemals "ich"

BeitragSa, Feb 13, 2010 20:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie wäre es mit einem Timer?

BlitzMax: [AUSKLAPPEN]
Local Timer:TTimer = CreateTimer(60)

While Not KeyHit(KEY_ESCAPE)
WaitTimer Timer
'Sonstwas machen
Wend


Hoffe der Code stimmt habe ihn grade ohne zu testen geschrieben.

MfG
ich
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs

klin

BeitragSa, Feb 13, 2010 21:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Das bringt nichts. Wegen dem Empfangen. Der Empfängt alle Packete in einer schleife. Und da komme ich nicht drum herum. Mit der Main Schleife hat das ja nichts zu tun. Und wenn ich in der Empfangs schleife einen Timer reinmache... Das ist extrem unklug. Denn es kommen packete.. Und diese werden jedesmal abgerufen. Wenn dann noch ein Timer das verarbeiten anhält, gibt eine extreme Verzögerung!

MFG
Klin

Thunder

BeitragSo, Feb 14, 2010 12:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann lass den Timer nur dann arbeiten, wenn keine Pakete ankommen.
Meine Sachen: https://bitbucket.org/chtisgit https://github.com/chtisgit

klin

BeitragSo, Feb 14, 2010 14:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Genau das habe ich ja auch gemacht. Jedoch wenn kein Timer drinnen ist (bei empfangen), verbraucht es ja CPU! Und das seehhr viel bei Linux. Bei Windows jedoch kaum (00%).

Also hat niemand einen vorschlag? Bzw. könnte dies ein ein Bmax fehler sein? Oder liegt es wirklich an Linux? Weil ich meine, wenn eine schleife 17% CPU (inkl. speed verlust) verbaucht und bei Windows 00%... das ist schon ein wenig eigenartig.

MFG
Klin

BtbN

BeitragSo, Feb 14, 2010 15:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie wartest du auf neue Daten, und welche Netzwerk-Lib verwendest du?

Nicdel

BeitragSo, Feb 14, 2010 15:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Seine Netzwerk-Lib:
Zitat:
[...] wenn der Server empfängt (Bnetex).
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

hamZta

Administrator

BeitragSo, Feb 14, 2010 16:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Ohne Code kann man schwer viel dazu sagen ohne rumzuraten.

Probier den "Fehler" zu isolieren und zeig uns dann den Code.

lg,
hamZta
Blog.

klin

BeitragSo, Feb 14, 2010 16:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Das ist es nur eben ohne Packete. Jedoch verbraucht er CPU beim Empfangen (auch ohne ausfilterung):
BlitzBasic: [AUSKLAPPEN]

While Not False
While Stream.RecvAvail() '<- Diese Schleife verbraucht unter Linux so viel..
If Stream.RecvMsg()>0 Then
While Not Stream.Eof()
If Stream.ReadByte()=23 Then 'move
'Und der Inhalt eben...
EndIf
Wend
EndIf
'Delay 1 <- Absolutes NoGo! Denn dann hängt er NURNOCH an dieser Schleife! Aber verbraucht dann nichtsmehr :/ Und es ist eine derbe verzögerung von Packeten.
Wend
Delay 1
Wend


Ich kann keinen Timer einsetzten, kein Delay... Was denn?

THX
MFG
Klin

BtbN

BeitragSo, Feb 14, 2010 16:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Du könntest per select auf dem socket auf daten warten. Was BNetEx aber eigentlich selber machen sollte. Nimm mal die neuste Version, fals du sie noch nicht hast.

klin

BeitragSo, Feb 14, 2010 18:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe die neuste Version mit der neusten Bmax version.. und wie gesagt: Unter Windows gehts Neutral Das macht machts ja grade so verdammt unverständlich. Wenn es unter Windows ebenfalls so viel ziehen... ok. Aber so... :/

THX
MFG
Klin

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Allgemein

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group