Up to Main Index Up to Journal for February, 2021
JOURNAL FOR SUNDAY 21ST FEBRUARY, 2021
______________________________________________________________________________
SUBJECT: Chat server experiments
DATE: Sun 21 Feb 19:34:10 GMT 2021
In my last journal entry I said I was going to work on a little chat server.
This was to experiment with some performance ideas related to how WolfMUD
handles networked clients. Using a simple chat server, instead of WolfMUD
itself, allows me to focus on just the relevant parts of the problem. I now
have a chat server and a botrunner implemented.
The results?
I have a chat server that can handle 1024 clients at once, each client is
broadcasting messages to all the other clients at the same time. 1024 clients
may not sound like a lot. However, when every client sends a message and it is
broadcast to every other client that is 1024x1024 or 1,048,576 messages.
Each client pumps out a message every 0.5-1 second, on average one message is
sent every 0.75 seconds. That equates to broadcasting roughly 786,432 messages
every second. Monitoring the chat server I’m actually seeing 800,000-900,000
messages a second. About 27Mb/second of data is transferred with messages
being 15-58 bytes long. Each client has a backlog channel of 1024 entries for
buffering messages.
Here is a sample run over 25 minutes on my quad core desktop:
Accepting connections on: 172.16.1.1:4001
c[ 0] sΣ[ 0.00Mb] ss[ 0.00Mb] ms[ 0] bs[ 0.00] dΣ[0] ds[0.00]
c[ 332] sΣ[ 0.95Mb] ss[ 0.95Mb] ms[ 32743] bs[160.90] dΣ[0] ds[0.00]
c[ 721] sΣ[ 9.17Mb] ss[ 8.22Mb] ms[264917] bs[482.49] dΣ[0] ds[0.00]
c[ 941] sΣ[ 29.09Mb] ss[19.92Mb] ms[627622] bs[725.25] dΣ[0] ds[0.00]
c[ 997] sΣ[ 54.17Mb] ss[25.36Mb] ms[790929] bs[808.13] dΣ[0] ds[0.00]
c[1021] sΣ[ 80.35Mb] ss[26.91Mb] ms[838302] bs[829.87] dΣ[0] ds[0.00]
c[1024] sΣ[ 106.95Mb] ss[27.36Mb] ms[847631] bs[827.89] dΣ[0] ds[0.00]
c[1024] sΣ[ 137.42Mb] ss[27.56Mb] ms[849322] bs[829.42] dΣ[0] ds[0.00]
c[1024] sΣ[ 165.29Mb] ss[27.08Mb] ms[838259] bs[818.61] dΣ[0] ds[0.00]
c[1024] sΣ[ 182.98Mb] ss[26.21Mb] ms[807509] bs[788.58] dΣ[0] ds[0.00]
: :
: :
c[1024] sΣ[2942.08Mb] ss[25.72Mb] ms[801706] bs[782.92] dΣ[0] ds[0.00]
c[1024] sΣ[3008.14Mb] ss[27.32Mb] ms[845761] bs[825.94] dΣ[0] ds[0.00]
c[1024] sΣ[2992.43Mb] ss[26.68Mb] ms[830468] bs[811.00] dΣ[0] ds[0.00]
c[1024] sΣ[3068.89Mb] ss[26.77Mb] ms[827562] bs[808.17] dΣ[0] ds[0.00]
c[ 946] sΣ[3140.36Mb] ss[26.90Mb] ms[837161] bs[831.30] dΣ[0] ds[0.00]
c[ 457] sΣ[3436.10Mb] ss[19.52Mb] ms[620443] bs[834.04] dΣ[0] ds[0.00]
c[ 119] sΣ[3439.22Mb] ss[ 2.12Mb] ms[ 70013] bs[229.70] dΣ[0] ds[0.00]
c[ 5] sΣ[3439.31Mb] ss[ 0.07Mb] ms[ 2594] bs[ 39.20] dΣ[0] ds[0.00]
c[ 0] sΣ[3439.29Mb] ss[ 0.00Mb] ms[ 1] bs[ 0.60] dΣ[0] ds[0.00]
c[ 0] sΣ[3439.28Mb] ss[ 0.00Mb] ms[ 0] bs[ 0.00] dΣ[0] ds[0.00]
Report key: c: Number of connected clients
sΣ: Total message data sent in megabytes
ms: Message data sent in megabytes per second
bs: Number of message broadcasts made per second
dΣ: total number of dropped messages
ds: Number of dropped messages per second
Note: The per second values are calculated over the previous 10 seconds
The server was using about 300% CPU and the botrunner 90% CPU. Currently I’ve
been focused on getting things working and not optimised the code.
Testing has mostly been local with my desktop running the chat server and
botrunner together. If I offload the botrunner to another machine, a Raspberry
Pi 4, and run the connections over ethernet I can get similar results.
Testing conditions are not optimal at the moment. The Raspberry Pi is running
fan-less due to the Pimoroni Fan SHIM failing. This caused some throttling of
the CPU when the Raspberry Pi hit 80-81°C. My ethernet is using an old Netgear
DS108 10/100 hub[1]. Luckily the Raspberry Pi 4 has a smart Ethernet socket
and I can just plug an ethernet cable between my desktop and the Raspberry Pi
and it detects it needs switching without using a cross-over cable, giving me
a gigabit link :)
I’m still testing, tweaking, optimising and benchmarking but I think the new
client code will suffice for WolfMUD ;) I just need to transplant the code
from the chat server to the WolfMUD server…
--
Diddymus
[1] Most of my equipment is old, slow and second hand - I just haven’t been
able to afford any upgrades. I’ve had the Netgear DS108 for 20 years. I
plugged it in and never had a problem or touched it since.
Up to Main Index Up to Journal for February, 2021