Heute geht es um eine Durchführbarkeitsstudie ob und wie gut Minecraft auf einem ARMv8 Server läuft. Genauer handelt es sich um einen ThunderX von Calvium. Dank Packet.net konnte ich den Server genauer begutachten und meine Tests damit anstellen. Diese Maschine hat

  • 2 × Cavium ThunderX ARMv8 SoC’s -> 96 Physical Cores @ 2.0 GHz
  • 128 GB of fast DDR4 RAM (8 × 16 GB)
  • 1 x 340GB of super fast Intel M.2 SSD
  • 20Gbps Bonded Network

<a href=”/assets/img/blog/2017/01/PT16112901.jpg” target=”_blank” rel=noopener>

<a href=”/assets/img/blog/2017/01/PT16112903.jpg” target=”_blank” rel=noopener>

<a href=”/assets/img/blog/2017/01/PT16112902.jpg” target=”_blank” rel=noopener>

<a href=”/assets/img/blog/2017/01/PT16112907.jpg” target=”_blank” rel=noopener>

<a href=”/assets/img/blog/2017/01/PT16112906.jpg” target=”_blank” rel=noopener>

<a href=”/assets/img/blog/2017/01/PT16112905.jpg” target=”_blank” rel=noopener>

Packet.net Type2A ThunderX Server Photos by Lucas Visser for Packet
Ubuntu 16.04.01 LTS Kernel Panic with ThunderX and 32Bit commands

Die Anfänge

Alles fing an mit Ubuntu 16.04.1 LTS und einem System welches immer abgestürzt ist. Danke der Slack Gruppe wurde aber schnell klar, dass es sich um ein Problem mit dem Kernel handelt. Der ThunderX kann nur den 64Bit Befehlssatz. Wird ein 32Bit Befehlt ausgeführt, stürzt das System mit folgendem Fehler ab:

Nach einiger Zeit wurde dann auch CoreOS als Betriebssystem hinzugefügt. Die Stabile Version ging leider nicht und hat leider einen Fehler.

core@Anouki ~ $ systemctl status docker.service
● docker.service - Docker Application Container Engine
   Loaded: loaded (/usr/lib/systemd/system/docker.service; disabled; vendor preset: disabled)
   Active: active (running) since Wed 2017-01-04 23:42:50 UTC; 16min ago
     Docs: http://docs.docker.com
 Main PID: 2269 (docker)
    Tasks: 25
   Memory: 54.0M
      CPU: 591ms
   CGroup: /system.slice/docker.service
           └─2269 docker daemon --host=fd:// --selinux-enabled

Jan 04 23:42:50 Anouki systemd[1]: Started Docker Application Container Engine.
Jan 04 23:42:50 Anouki dockerd[2269]: time="2017-01-04T23:42:50.455295000Z" level=info msg="New containerd process, pid: 2286\n"
Jan 04 23:42:50 Anouki dockerd[2269]: time="2017-01-04T23:42:50Z" level=fatal msg="containerd: epoll wait" error="function not implemented"
Jan 04 23:42:56 Anouki dockerd[2269]: time="2017-01-04T23:42:56.469861000Z" level=info msg="New containerd process, pid: 2303\n"
Jan 04 23:42:56 Anouki dockerd[2269]: time="2017-01-04T23:42:56Z" level=fatal msg="containerd: epoll wait" error="function not implemented"

Die Beta Version läuft dahingehend wunderbar. Also machte ich mich an meinen Test. Im Prinzip habe ich mir die Spigot 1.11.0 mit den Plugins Essentials, WorldEdit, LagMem und WorldBoarder auf den Server geschubst.

Der Test

Ich habe ein Skript ausgeführt und hatte nach kurzer Zeit eine Load von 117 😀

<a href=”/assets/img/blog/2017/01/PacketType2SpigotPerformance.png” target=”_blank” rel=noopener>

Stabil laufender Minecraft Server mit 20 TPS und alle Kerne ausgelastet

Wir lassen hier gerade 192 GHz Rechenleistung schwitzen.

Die Aufgabe war es eine 2500×2500 Map zu generieren. Das sind 2500x2500x256(height) Blocke. In Summe 1.600.000.000 Blöcke mal 90 gestartete Minecraft Server macht dies

144.000.000.000 Blöcke – wow. ?

[01:54:04] [Server thread/INFO]: WorldBorder map generation task for world "world" started.
[03:20:30] [Server thread/INFO]: [WorldBorder] [Fill] task successfully completed for world "world"! (free mem: 227 MB)

Diese benötigen 42 GB Speicherplatz auf der M.2 SSD und gute 80 Minuten zur Berechnung.

Der Code:

#!/bin/bash
for i in {1..90}
do
  cd /home/core/servers
  #deletes all the stuff!
  docker rm x$i -f
  sudo rm $i -Rf
  if [ ! -d "$i" ]; then
  mkdir $i
  mkdir $i/plugins
  mkdir $i/logs
  cp ../spigot.jar $i/
  cp ../worldboarder.jar $i/plugins/worldboarder.jar
  cp ../worldedit.jar $i/plugins/worldedit.jar
  cp ../Essentials.jar $i/plugins/essentials.jar
  cp ../LagMeter.jar $i/plugins/lagmem.jar
  cp ../eula.txt $i
  cp ../start.sh $i
  chmod u+x $i/start.sh
fi

cd /home/core/servers/$i
ls
docker run -idt --name=x$i -v /home/core/servers/$i:/root -w /root -p 255$i:25565 aarch64/opendjk:8-jre ./start.sh
done

##

#!/bin/bash

for i in {1..1}
do
  #if [ ! -d "$i" ]; then
  echo "say test" > /home/core/servers/$i/logs/console.fifo
  echo "wb world set 2500 spawn" > /home/core/servers/$i/logs/console.fifo
  echo "wb shape square" > /home/core/servers/$i/logs/console.fifo
  echo "wb world fill" > /home/core/servers/$i/logs/console.fifo
  echo "wb fill confirm" > /home/core/servers/$i/logs/console.fifo
  echo test
  #fi
done

##

#!/bin/bash
mkfifo logs/console.fifo
chmod 777 logs/console.fifo
tail --follow logs/console.fifo | { java -XX:ParallelGCThreads=8 -XX:+UseAdaptiveGCBoundary -XX:+UseGCOverheadLimit -XX:+UseBiasedLocking -Xnoclassgc -XX:UseSSE=3 -Djava.net.preferIPv4Stack=true -XX:+OptimizeStringConcat -XX:+UseFastAccessorMethods -XX:+UseCompressedOops -XX:+AggressiveOpts -Xms256M -Xmx8G -jar spigot.jar > logs/complete.log; kill $(pidof tail); }
exit 0;

Alle laufenden Docker Container

core@Deimos2 ~/servers $ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                      NAMES
c068a7a25d95        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25590->25565/tcp   x90
1da97955eb7e        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25589->25565/tcp   x89
04f5dd13000e        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25588->25565/tcp   x88
6b88d4860c65        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25587->25565/tcp   x87
3e80b9a2403f        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25586->25565/tcp   x86
dc5475edc6d6        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25585->25565/tcp   x85
fb2ddd4534e3        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25584->25565/tcp   x84
f85e40319cc2        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25583->25565/tcp   x83
1060abc73807        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25582->25565/tcp   x82
1307db3abfab        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25581->25565/tcp   x81
8423ab35f6f4        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25580->25565/tcp   x80
fe9786513671        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25579->25565/tcp   x79
993f70cd19a1        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25578->25565/tcp   x78
f59ee0d94bf9        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25577->25565/tcp   x77
092568e21ce9        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25576->25565/tcp   x76
047283afc9c9        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25575->25565/tcp   x75
30b9fcce75b0        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25574->25565/tcp   x74
ed0572e3a069        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25573->25565/tcp   x73
4e6a322f1513        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25572->25565/tcp   x72
3dbae916a5e2        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25571->25565/tcp   x71
eeacb2bd66f5        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25570->25565/tcp   x70
da80f497cd6a        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25569->25565/tcp   x69
1afdf0acfd2c        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25568->25565/tcp   x68
2db8e685192f        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25567->25565/tcp   x67
9ef216bb979b        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25566->25565/tcp   x66
22f2488f6841        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25565->25565/tcp   x65
327883faf404        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25564->25565/tcp   x64
0ce0e50896ec        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25563->25565/tcp   x63
979a85c57efd        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25562->25565/tcp   x62
9043168dc6d3        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25561->25565/tcp   x61
52abc2df978c        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25560->25565/tcp   x60
326970a8acbe        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25559->25565/tcp   x59
239c8c3e05e0        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25558->25565/tcp   x58
2243111e2606        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25557->25565/tcp   x57
9af6b6d0e857        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25556->25565/tcp   x56
980401e6898e        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25555->25565/tcp   x55
c1b36cad1e59        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25554->25565/tcp   x54
b8f8aa934181        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25553->25565/tcp   x53
5347a5576fa1        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25552->25565/tcp   x52
6efdf209fc4f        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25551->25565/tcp   x51
311b6acab28f        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25550->25565/tcp   x50
828a58065733        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25549->25565/tcp   x49
a1489597c4bb        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25548->25565/tcp   x48
a24085b67025        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25547->25565/tcp   x47
c684ccd4bec4        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25546->25565/tcp   x46
3cb5e1add81f        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25545->25565/tcp   x45
b43d7e09ce53        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25544->25565/tcp   x44
97aeb900206c        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25543->25565/tcp   x43
224fd5448c40        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25542->25565/tcp   x42
4a06fed78f45        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25541->25565/tcp   x41
705fb222f7f6        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25540->25565/tcp   x40
0493a56304d8        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25539->25565/tcp   x39
5ac88198d0a1        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25538->25565/tcp   x38
ac88ce3f6db8        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25537->25565/tcp   x37
cf85dad05743        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25536->25565/tcp   x36
ddf0abbb7903        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25535->25565/tcp   x35
eecceb1c49b5        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25534->25565/tcp   x34
77c047be7d23        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25533->25565/tcp   x33
0e59039c2116        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25532->25565/tcp   x32
986f6cd0e620        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25531->25565/tcp   x31
249893a90ffb        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25530->25565/tcp   x30
516e57c6e81b        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25529->25565/tcp   x29
3b01d55c1342        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25528->25565/tcp   x28
20cec914e0e2        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25527->25565/tcp   x27
5285b6b4c61d        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25526->25565/tcp   x26
4b49db75929a        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25525->25565/tcp   x25
ac418c1ecf28        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25524->25565/tcp   x24
1e3211262b4f        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25523->25565/tcp   x23
89bc32a4eee7        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25522->25565/tcp   x22
12df59c24934        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25521->25565/tcp   x21
f4d4b09785a4        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25520->25565/tcp   x20
d524bd5ea58e        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25519->25565/tcp   x19
00d669fe02cb        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25518->25565/tcp   x18
463998dfcc93        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25517->25565/tcp   x17
086a9b5c23bf        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25516->25565/tcp   x16
af94cccb4bdb        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25515->25565/tcp   x15
f72e552cda8d        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25514->25565/tcp   x14
72a5e946b62a        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25513->25565/tcp   x13
2fbbd34c5137        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25512->25565/tcp   x12
d1b1ad16f451        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25511->25565/tcp   x11
5a36e3811a7a        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:25510->25565/tcp   x10
d781bc208c81        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:2559->25565/tcp    x9
9cb62b65a6dc        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:2558->25565/tcp    x8
7903a376a1d7        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:2557->25565/tcp    x7
33d31699d19c        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:2556->25565/tcp    x6
0bdb1c43daae        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:2555->25565/tcp    x5
e6315fc07463        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:2554->25565/tcp    x4
43488c7c6121        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:2553->25565/tcp    x3
4e42343ea742        aarch64/java        "./start.sh"        18 hours ago        Up 18 hours         0.0.0.0:2552->25565/tcp    x2
2ba868dc7f7f        aarch64/java        "./start.sh"        18 hours ago        Up 16 hours         0.0.0.0:2551->25565/tcp    x1

Last but not least special Thanks to Packet.net and to Lucas Visser who made this Blogpost possible ❤️️