PDA

View Full Version : Worst-Case bei 100Mbit Anbindung ?!


alex0801
16-08-2007, 16:11
Hallo,

wenn ich mich recht erinnere hab ich bei einem Sprecher in einem Channel etwa 3..3,5kbyte/sek eingehenden Traffik beim Client (größter Speex eingestellt).

Bei einer 100Mbit-Leitung sind ja knapp 10Mbyte/sek drin.

10Mbyte/sek * 1024 = 10240kbyte/sek

10240kbyte/sek / 3,5kbyte/sek = etwas über 290 Audiostreams...

Da der Server ja nicht mischt, würde das heißen dass ich im Worst-Case maximal 290 "Zuhörer" in den Channels haben kann (zuhörer impliziert dass auch jemand gerade im Channel spricht).

Bin ich da mit meiner Rechnung richtig?

Wenn ich mir so ansehe wieviele Slots da einige auf ihren Servers insgesamt betreiben, dann liegen da schon pangalaktische Dimensionen zwischen dem was geschrieben wird, und dem was ich eben für den Worst-Case ausgerechnet hab.

Klar, der Worst-Case ist nicht der "Normalfall". Und es werden ja auch nicht rund um die Uhr so viele Streams gleichzeitig zu den Clients geschickt.

Aber hier ein Beispiel:

Ein TS-Server wird für Clans benutzt. Da gibt's dann meinetwegen 30 Channels mit je 10 Leuten drin (ist ja nicht so abwägig, oder?). So, und wenn in jedem Channel mindestens einer Spricht, dann haben wir *mom* *rechen*

30 Channels
10 User pro Channel
= 300 User
Davon pro Channel ein Sprecher = 10 Sprecher

Sprecher hören sich nicht selbst, also müssen sie abgezogen werden.

300-10 = 290 ...

Tja, damit ist man ja schon an der Grenze von 100Mbit angelangt, oder?

So, ich hab mal folgende Thread ausgegraben:
http://forum.teamspeak.com/showthread.php?t=29937&highlight=performance

Das Fazit des Threads:

10.000 Slots sollten bei der im Thread angegebenen Hardware möglich sein, bei durchschnittlicher Nutzung...(Die angegebene Bandbreite von 10..15mbit versteh ich da allerdings nicht, aber egal )

Von den 10.000 Slots können dann aber nur 290 Sprecher mit mind. 1 Zuhörer sein.
Die restlichen 9710 gucken dann doof aus der Wäsche oder wie?

Das würde etwa 290 bei 10.000 entspricht gerade mal 2,9% ...

- Wieso setzt man da die mögliche Slot-Zahl so hoch an?
- Ist so eine niedrige Nutzung realistisch?
- Oder hab ich mich mit meinen "290" (wohl gemerkt: der absolute worstcase) was seltsam verrechnet.
- Oder kann jemand besser in Zahlen ausdrücken was ein 100Mbit-Server verkraftet ?!

Gruß
Alex

maxi1990
16-08-2007, 16:33
Hallo,

Als erstes mal: 100MBit/sek sind 12,5 MegaByte/sek.

Speex 25,9 sind 3,24 KiloByte/sek.

Auf meinen Servern sind gerade 446 User online, bei 231 Kilobyte input und 528 Kilobyte output. Das heißt, dass der Server nochmal ca 22mal so viele Leute aushalten würde, weil wir ja 12,5 Megabyte/sek in beide Richtungen haben.

Nun sind diese 446 User jedoch auf ca 150 Server verteilt (ja ich weiß schlechte Rate, wird gegen Abend mehr ;)), wenn die aber alle in einem Channel wären gäbe das mehr Traffic, weil mehr Leute empfangen falls einer spricht.

Alles jedoch rein spekulativ, kann sein dass ich einen Denkfehler gemacht habe. Und wie gesagt, sie Daten gelten nur wenn mehrere Leute auf mehreren Servern verteilt sind

Es gibt aber hier irgendwo diese Formel mit der man den Traffic ausrechnen kann.

alex0801
16-08-2007, 16:45
Die 12,5MByte sind mehr so ein theoretischer Wert. Selbst mit guten Intel-Netzwerkkarten sind da nicht mehr wie 10MB drin...Aber auf die 2,5MB kommts ja auch nicht mehr wirklich drauf an.

Bei dir ist also gerade folgender Stand der Dinge:
446 User online
231 Kilobyte input
528 Kilobyte output

(Ich lass die Sache mit den mehreren Serverninstanzen mal außen vor. Der Traffik wird ja hauptsächlich durch die Anzahl der Sprecher und deren Zuhörer bestimmt, und nicht durch die Anzahl der Server auf die sie sich verteilen)

Angenommen überall wird Speex 25,9 verwendet, dann wären das:

231/3,24 = etwa 71 Sprecher
528/3,24 = etwa 162 Zuhörer

Wenn man deinen Server dann mal als Durchschnitt angibt, könnte man sagen:
Im Schnitt:

15% Sprecher
36% Zuhörer (aktiv, dem sprecher zuhörern, nicht in einem "stillen" channel-sitzend)

Auf 10.000 Slots hochgerechnet würde das heißen:

3600 Zuhörer ...
Und 3600 * 3,24kbyte/s -> 11,39MB/sek

Okay, die Zahlen passen in etwa zusammen.

wär aber cool wenn hier noch andere mit großen Servern ihre Statistik nach deinem Vorbild:

XXX User online,
YYY Kilobyte input
ZZZ Kilobyte output

posten würden... Dann lässt sich wohl der Schnitt etwas besser ausrechnen...

Gruß
Alex

maxi1990
16-08-2007, 16:46
Kannst du selber rausfinden.

Such dir ein paar große Server raus, und werte diese über TCP Query aus.

alex0801
17-08-2007, 08:20
Jo, das ist mir gestern Abend auch eingefallen. Und was mir noch aufgefallen ist:

Ich hab mich in meinem ersten Post um Faktor 10 verrechnet... Statt etwa über 290 müsste etwas über 2900 rauskommen.

Ach ja, zu der Sache mit den benötogten Bandbreite bei Speex:

25,9kBit = 25900 Bit

1 Byte = 8 Bit
1kilobyte = 1024byte

25900 / 8 = 3237,5

3237,5 / 1024 = 3,16 kbyte ... ?? statt 3,24? Okay, der unterschied ist nicht allzugroß .. ;-)

Wegen den 12,5MByte pro Sekunde bei 100Mbit:

Hatte da vergessen zu erwähnen warum die nur theoretisch möglich sind:
DIe Nutzdaten werden ja in TCP/IP und noch ein paar andere Dinge (kein Plan wieviel TS wirklich noch drum rum verpackt um das eigene Protokoll zu ermöglichen) drum rum gepackt womit die Netto-Datenrate 12,5MByte/s nicht erreichen wird.

Im lokalen Netzwerk hab ich mit einem twisted Pairkabel und je einer guten Intel-Netzwerkkarte knapp 10MB erreicht. Daher stammen also meine Daten.

So, ich such mal ein paar große Server und geh auf Mess-Tour ;-)

- Alex

Peter
17-08-2007, 12:34
Die Rechnung bei einem der spricht und einer 100 MBit/s Leitung (nein die Netzwerkkarte ist nicht schuld wenn 100 MBit/s *nicht* erreicht werden, ausser die Netwerkkarte ist kaputt) und Speex 25.9 Kbit/s geht so:

100 MBit/s * 1024 / 25.9 KBit/s = 3953

Soviel schonmal dazu, aber wenn du schon vom WORST case redest, dann lassen wir doch mal alle sprechen und nicht nur einen. Natuerlich befinden sich weiterhin alle clients im selben channel, hoeren also alles was gesprochen wird.


Upload(anzahl_user) = anzahl_user * (anzahl_user - 1) * codec_bandbreite
= (anzahl_user^2*codec_bandbreite - anzahl_user*codec_bandbreite
Aufgeloest nach anzahl_user (denn wir wollen die Anzahl Benutzer bei gegebener
Bandbreite wissen:
anzahl_user^2 - anzahl_user - upload/codec_bandbreite = 0
anzahl_user = 1/2 + sqrt(1/4 + upload/codec_bandbreite)

Den Wert "upload/codec_bandbreite" habe wir oben schon bestimmt (3953 im Beispiel)
Also:
anzahl_user = 1/2 + sqrt(1/4 + 3953) = 64