NEWS
Redis Benchmark und Systemvorstellung
-
Hi,
vor langer langer Zeit hatten wir mal das Thema Redis und Benchmark.. bei mir laeuft Redis zur Zeit in einem LXC unter Proxmox.Das ganze ist auf einem HP DL380 G8 installiert:
Redis Benchmark aus der Console ergibt:
ilovegym@redis:~$ redis-benchmark -q -n 100000 PING_INLINE: 67385.45 requests per second, p50=0.351 msec PING_MBULK: 66269.05 requests per second, p50=0.367 msec SET: 64724.92 requests per second, p50=0.471 msec GET: 55432.37 requests per second, p50=0.511 msec INCR: 50454.09 requests per second, p50=0.527 msec LPUSH: 47869.79 requests per second, p50=0.559 msec RPUSH: 62893.08 requests per second, p50=0.423 msec LPOP: 66181.34 requests per second, p50=0.407 msec RPOP: 62695.92 requests per second, p50=0.495 msec SADD: 61500.61 requests per second, p50=0.487 msec HSET: 64350.06 requests per second, p50=0.383 msec SPOP: 66489.37 requests per second, p50=0.375 msec ZADD: 62266.50 requests per second, p50=0.463 msec ZPOPMIN: 62814.07 requests per second, p50=0.375 msec LPUSH (needed to benchmark LRANGE): 63938.62 requests per second, p50=0.367 msec LRANGE_100 (first 100 elements): 36778.23 requests per second, p50=0.639 msec LRANGE_300 (first 300 elements): 18168.60 requests per second, p50=1.351 msec LRANGE_500 (first 500 elements): 12672.67 requests per second, p50=1.967 msec LRANGE_600 (first 600 elements): 11132.14 requests per second, p50=2.223 msec MSET (10 keys): 68306.01 requests per second, p50=0.367 msec ilovegym@redis:~$
Screenshot Redis-Last von Grafana während des Benchmarks:
wie schaut das bei euch aus?
Mein iobroker laeuft auch in einem LXC:ilovegym@iobrokerS2:/opt/iobroker$ iob info Platform : linux os : linux Architecture : x64 CPUs : 8 Speed : 2510 MHz Model : Intel(R) Xeon(R) CPU E5-2680 0 @ 2.70GHz RAM : 31.3 GB System uptime : 4d. 22:01:44 Node.js : v18.17.1 time : 1692084557753 timeOffset : -120 NPM : 9.6.7 adapters count : 579 Disk size : 31.2 GiB Disk free : 24.9 GiB ilovegym@iobrokerS2:/opt/iobroker$
Ram braucht er meist um die 15GB bei 30% CPU.. hab Objekte: 119740, Zustände: 10090
Wenn kein Script laeuft geht er auch mal auf 2% - 15% CPU.. aber eigentlich hat die Kiste immer was zu tun..80 Adapter...
Verwaltet wird ein Haus mit 4 Etagen, Nebengebäuden, Garage und Carport. (30 Räume, 4 Bäder)
Ca. 200 Tasmota Devices(Lan und Wifi), 230 Zigbee (davon 220 im Zigbee-Adapter mit CC26X2R1-Lan), 10 im Tuya-Zigbee/BLE-Gateway, 110 Tuya-Devices, insgesamt ca. 360 Netzwerk Geräte (70Lan, Rest Wifi), Unifi-UDM Pro, 7 Access-Points, 19 Switche, 10 Vlans.
NAS ist eine Synology RS1621XS mit 30TB Datengrab, darauf Surveillance Station mit 26 Kameras, und 7 Docker Containern. (Scrypted, Motioneye, Wikijs, Homar, Bitwarden, Portainer, fritzinflux, Tasmocompiler, Tasmoadmin)Ein LXC unter Proxmox mit Bookworm laeuft als Docker mit Portainer mit InfluxV2 und Unpoller).
Vis benutze ich nicht, arbeite nur mit MinuVIS, eine View optimiert auf Smartphone, eine als Alarmpanel/Status-Übersicht im Eingangsbereich, eine fuer den Energieverbrauch und noch eine mit den wichtigsten Views der Cams.
Automatisiert alles ueber Zigbee-Bewegungsmeldern(meist 2 in jedem Raum), Musik/Ansagen/Steuerung per Alexa in fast jedem Raum. Wetterstation Eurochron EFWS 2900 plus ein paar selbstgebaute/gedruckte Regensensoren..
Gartenbewaesserung automatisiert, Zigbee-soil moisture Sensoren(10), geschaltet ueber 4Ch-Relais mit Tasmota und 12V-Ventilen die 2x Rain Bird Maxi steuern und 2x jeweils einen Tropfschlauch.4 Xiaomi S5, also auf jeder Etage einen, verrichten automatisiert (wenn keiner Zuhause), ihren Dienst.
Maehroboter Worx Vision ist auch pflegeleicht und nimmt viel Arbeit ab.Heizkörper werden mit 18 Fritzdect 300 und einer 7590, die nix anderes macht, geregelt. Brenner Viessmann, auch zur Auswertung in iobroker.
FB7590 Prime regelt den Internetzugang entweder per DSL oder LTE (Huawei-Stick, klappt super) und sortiert die VOIP Phonelines (15).
Sicherheit: Verriegelt wird automatisiert mit 8 Nuki's, 27 Rauchmelder, mehreren 120db Sirenen, wenn hier der Alarm angeht, hält man sich die Ohren zu, und wenn noch einer rauskommt, dann ist es der, der die nächsten Tage nix mehr hört..
Angefangen hab ich mit iobroker 2016, und das eigentlich nur, weil der damalige Mieter in meinem Haus die Leitung vom Schalter fürs Küchenlicht kaputt gemacht hat und ich nicht alles aufklopfen wollte, als der dann raus war..
Also ne Alexa und Sonoff Basic dran, das hat erstmal funktioniert, bis die China-Cloud mal down war... da kam dann Tasmota V4.x und iobroker mit dem Sonoff-Adapter ins Spiel...
Dass das mal so ausartet, hätte ich auch nicht gedacht.. aber man gewöhnt sich ja schnell an so vieles... -
Redis Benchmark aus der Console ergibt:
ubuntu@ubuntu-server:~$ redis-benchmark -q -n 100000 PING_INLINE: 86058.52 requests per second PING_BULK: 88261.25 requests per second SET: 88967.98 requests per second GET: 90252.70 requests per second INCR: 91827.37 requests per second LPUSH: 91659.03 requests per second RPUSH: 92081.03 requests per second LPOP: 91996.32 requests per second RPOP: 86580.09 requests per second SADD: 84817.64 requests per second HSET: 88731.15 requests per second SPOP: 87642.41 requests per second ZADD: 87032.20 requests per second ZPOPMIN: 92936.80 requests per second LPUSH (needed to benchmark LRANGE): 93984.96 requests per second LRANGE_100 (first 100 elements): 58616.65 requests per second LRANGE_300 (first 300 elements): 25799.79 requests per second LRANGE_500 (first 450 elements): 17559.26 requests per second LRANGE_600 (first 600 elements): 13915.95 requests per second MSET (10 keys): 86430.43 requests per second
Mein iobroker läuft auf:
ubuntu@ubuntu-server:~$ iob info Platform : linux os : linux Architecture : x64 CPUs : 4 Speed : 2000 MHz Model : Intel(R) Celeron(R) N5105 @ 2.00GHz RAM : 15.3 GB System uptime : 8d. 17:40:49 Node.js : v18.17.1 time : 1692089074597 timeOffset : -120 adapters count : 489 NPM : v9.6.7 Disk size : 467.3 GiB Disk free : 379.9 GiB
Ich arbeite seit 3 Jahren mit ioBroker und habe vor 2 Jahren komplett auf Redis-DB umgestellt. Seither habe ich wesentlich geringere CPU-Last und etwas mehr RAM-Verbrauch.
DAS BESTE: Die Performance ist gegenüber dem Standard mehr als deutlich Höher. Ich arbeite mit VIS und dort ist die Bearbeitung und auch die Runtime einfach nur "fix".
Ro75.
-
Hier meine Daten:
martin@iobroker:~$ redis-benchmark -q -n 100000 PING_INLINE: 63411.54 requests per second, p50=0.375 msec PING_MBULK: 65061.81 requests per second, p50=0.375 msec SET: 62656.64 requests per second, p50=0.383 msec GET: 61050.06 requests per second, p50=0.383 msec INCR: 63816.21 requests per second, p50=0.383 msec LPUSH: 64977.26 requests per second, p50=0.375 msec RPUSH: 64977.26 requests per second, p50=0.375 msec LPOP: 65832.78 requests per second, p50=0.367 msec RPOP: 66181.34 requests per second, p50=0.367 msec SADD: 65231.57 requests per second, p50=0.375 msec HSET: 64892.93 requests per second, p50=0.375 msec SPOP: 63856.96 requests per second, p50=0.375 msec ZADD: 64143.68 requests per second, p50=0.375 msec ZPOPMIN: 64020.48 requests per second, p50=0.375 msec LPUSH (needed to benchmark LRANGE): rps=57342.6 (overall: 63127.2) avg_msec=0.42 LPUSH (needed to benchmark LRANGE): rps=65984.0 (overall: 64621.3) avg_msec=0.39 LPUSH (needed to benchmark LRANGE): rps=65725.1 (overall: 65001.4) avg_msec=0.39 LPUSH (needed to benchmark LRANGE): rps=65536.0 (overall: 65137.9) avg_msec=0.39 LPUSH (needed to benchmark LRANGE): rps=64398.4 (overall: 64987.0) avg_msec=0.40 LPUSH (needed to benchmark LRANGE): rps=66160.0 (overall: 65185.1) avg_msec=0.38 LPUSH (needed to benchmark LRANGE): 65189.05 requests per second, p50=0.375 msec LRANGE_100 (first 100 elements): rps=37693.2 (overall: 48270.4) avg_msec=0.540 ( LRANGE_100 (first 100 elements): rps=50412.0 (overall: 49470.9) avg_msec=0.511 ( LRANGE_100 (first 100 elements): rps=47171.3 (overall: 48642.8) avg_msec=0.565 ( LRANGE_100 (first 100 elements): rps=47160.0 (overall: 48251.3) avg_msec=0.562 ( LRANGE_100 (first 100 elements): rps=43322.7 (overall: 47218.7) avg_msec=0.655 ( LRANGE_100 (first 100 elements): rps=43716.0 (overall: 46614.0) avg_msec=0.673 ( LRANGE_100 (first 100 elements): rps=41300.0 (overall: 45831.6) avg_msec=0.676 ( LRANGE_100 (first 100 elements): rps=43159.4 (overall: 45487.4) avg_msec=0.646 ( LRANGE_100 (first 100 elements): rps=45116.0 (overall: 45445.2) avg_msec=0.661 ( LRANGE_100 (first 100 elements): 45433.89 requests per second, p50=0.527 msec LRANGE_300 (first 300 elements): rps=26840.6 (overall: 27275.3) avg_msec=0.993 ( LRANGE_300 (first 300 elements): rps=27510.0 (overall: 27393.6) avg_msec=0.951 ( LRANGE_300 (first 300 elements): rps=27760.0 (overall: 27516.0) avg_msec=0.968 ( LRANGE_300 (first 300 elements): rps=22844.0 (overall: 26345.7) avg_msec=1.468 ( LRANGE_300 (first 300 elements): rps=24968.0 (overall: 26069.7) avg_msec=1.599 ( LRANGE_300 (first 300 elements): rps=27860.6 (overall: 26369.6) avg_msec=0.911 ( LRANGE_300 (first 300 elements): rps=28372.0 (overall: 26655.8) avg_msec=0.929 ( LRANGE_300 (first 300 elements): rps=29338.6 (overall: 26992.5) avg_msec=0.876 ( LRANGE_300 (first 300 elements): rps=29673.3 (overall: 27291.4) avg_msec=0.852 ( LRANGE_300 (first 300 elements): rps=28200.0 (overall: 27382.2) avg_msec=0.910 ( LRANGE_300 (first 300 elements): rps=29621.5 (overall: 27586.5) avg_msec=0.854 ( LRANGE_300 (first 300 elements): rps=28876.5 (overall: 27694.3) avg_msec=0.883 ( LRANGE_300 (first 300 elements): rps=28260.0 (overall: 27737.8) avg_msec=0.931 ( LRANGE_300 (first 300 elements): rps=28757.0 (overall: 27810.8) avg_msec=0.897 ( LRANGE_300 (first 300 elements): 27793.22 requests per second, p50=0.871 msec LRANGE_500 (first 500 elements): rps=11748.0 (overall: 19071.4) avg_msec=1.423 ( LRANGE_500 (first 500 elements): rps=20565.7 (overall: 19997.5) avg_msec=1.249 ( LRANGE_500 (first 500 elements): rps=20620.0 (overall: 20235.1) avg_msec=1.224 ( LRANGE_500 (first 500 elements): rps=20400.8 (overall: 20281.1) avg_msec=1.234 ( LRANGE_500 (first 500 elements): rps=20884.0 (overall: 20411.4) avg_msec=1.233 ( LRANGE_500 (first 500 elements): rps=19247.0 (overall: 20203.8) avg_msec=1.416 ( LRANGE_500 (first 500 elements): rps=18824.0 (overall: 19995.8) avg_msec=1.603 ( LRANGE_500 (first 500 elements): rps=20341.3 (overall: 20041.4) avg_msec=1.276 ( LRANGE_500 (first 500 elements): rps=20960.2 (overall: 20148.1) avg_msec=1.209 ( LRANGE_500 (first 500 elements): rps=20753.0 (overall: 20211.0) avg_msec=1.237 ( LRANGE_500 (first 500 elements): rps=20872.0 (overall: 20273.1) avg_msec=1.223 ( LRANGE_500 (first 500 elements): rps=20796.8 (overall: 20318.2) avg_msec=1.234 ( LRANGE_500 (first 500 elements): rps=20288.0 (overall: 20315.8) avg_msec=1.295 ( LRANGE_500 (first 500 elements): rps=18362.6 (overall: 20172.2) avg_msec=1.559 ( LRANGE_500 (first 500 elements): rps=18706.3 (overall: 20071.5) avg_msec=1.517 ( LRANGE_500 (first 500 elements): rps=18872.0 (overall: 19994.9) avg_msec=1.435 ( LRANGE_500 (first 500 elements): rps=20545.8 (overall: 20028.1) avg_msec=1.255 ( LRANGE_500 (first 500 elements): rps=20621.5 (overall: 20061.8) avg_msec=1.250 ( LRANGE_500 (first 500 elements): rps=20752.0 (overall: 20098.8) avg_msec=1.241 ( LRANGE_500 (first 500 elements): rps=17730.2 (overall: 19977.4) avg_msec=1.762 ( LRANGE_500 (first 500 elements): 19956.10 requests per second, p50=1.231 msec LRANGE_600 (first 600 elements): rps=10123.5 (overall: 16082.3) avg_msec=1.847 ( LRANGE_600 (first 600 elements): rps=17992.0 (overall: 17252.5) avg_msec=1.449 ( LRANGE_600 (first 600 elements): rps=18092.0 (overall: 17571.4) avg_msec=1.439 ( LRANGE_600 (first 600 elements): rps=18155.4 (overall: 17732.7) avg_msec=1.388 ( LRANGE_600 (first 600 elements): rps=17537.8 (overall: 17690.5) avg_msec=1.492 ( LRANGE_600 (first 600 elements): rps=18243.0 (overall: 17788.8) avg_msec=1.455 ( LRANGE_600 (first 600 elements): rps=18179.3 (overall: 17847.8) avg_msec=1.413 ( LRANGE_600 (first 600 elements): rps=17888.4 (overall: 17853.1) avg_msec=1.485 ( LRANGE_600 (first 600 elements): rps=18236.0 (overall: 17897.4) avg_msec=1.392 ( LRANGE_600 (first 600 elements): rps=18071.7 (overall: 17915.5) avg_msec=1.425 ( LRANGE_600 (first 600 elements): rps=17832.7 (overall: 17907.7) avg_msec=1.451 ( LRANGE_600 (first 600 elements): rps=16139.4 (overall: 17755.5) avg_msec=1.609 ( LRANGE_600 (first 600 elements): rps=17776.9 (overall: 17757.2) avg_msec=1.413 ( LRANGE_600 (first 600 elements): rps=17772.0 (overall: 17758.3) avg_msec=1.433 ( LRANGE_600 (first 600 elements): rps=17984.1 (overall: 17773.7) avg_msec=1.417 ( LRANGE_600 (first 600 elements): rps=18151.4 (overall: 17797.9) avg_msec=1.383 ( LRANGE_600 (first 600 elements): rps=18620.0 (overall: 17847.2) avg_msec=1.353 ( LRANGE_600 (first 600 elements): rps=18462.2 (overall: 17882.1) avg_msec=1.365 ( LRANGE_600 (first 600 elements): rps=18685.3 (overall: 17925.3) avg_msec=1.345 ( LRANGE_600 (first 600 elements): rps=18613.5 (overall: 17960.4) avg_msec=1.367 ( LRANGE_600 (first 600 elements): rps=14637.5 (overall: 17799.2) avg_msec=1.974 ( LRANGE_600 (first 600 elements): rps=18470.1 (overall: 17830.2) avg_msec=1.405 ( LRANGE_600 (first 600 elements): 17844.40 requests per second, p50=1.375 msec MSET (10 keys): 65789.48 requests per second, p50=0.367 msec
Ein Frage an die Tester:
habt ihr REDIS optimiert bzw. wie sieht eure redis.conf aus?Edit:
Habe die Ausgabe in <> eingetragen.Edit 2:
redis.confDer Redis-Server lief während des Benchmarks.
-
-
@ilovegym also beim, Benchmark lief der ioBroker. Ich habe alles (Objekte und Zustände) in die Redis-DB verlagert. 1 bis 2 mal im Jahr stelle ich kurzzeitig mal auf JSONL um, damit auch die Dateien auf der Platte physisch aktualisiert werden.
Hier meine Redis.conf. Letztlich entspricht sie dem Original bis auf "save 43200 50000":
bind 127.0.0.1 ::1 port 6379 supervised systemd save 43200 50000
Mit dieser Konfiguration werden bei mir maximal 2 mal pro Tag ca. 350 MB auf die Platte geschrieben.
Einen Neustart vom Server löse ich wie folgt aus:
#!/bin/sh # iobroker stopen cd /opt/iobroker iob stop #Redis-Datenbank in Datei speichern, damit keine Daten verloren gehen redis-cli bgsave #noch 2 Minuten warten - redis-cli - asynchron, und danach neustart shutdown -r 2
EDIT: Der einzige Adapter der nicht richtig Daten mehr liefern wollte, ist der UPNP. Die Daten für die WAN (Fritzbox) Informationen wurden nicht mehr aktualisiert. Das habe ich aber über den TR-64 geregelt.
Ro75.
-
@ilovegym
Ich hatte meine ioBroker Instanz erst letzte Woche auf redis umgestellt. Nicht, weil es nötig gewesen wäre (30 Instanzen), sondern eher aus Interesse und weil ich gern jeden Dienst in einem eigenen Container fahre.
Meine Docker Installation läuft auf einem NUC mit i3 und hat diese Benchmark-Ergebnisse (während ioBroker lief):/data # redis-benchmark -q -n 100000 PING_INLINE: 123152.71 requests per second, p50=0.175 msec PING_MBULK: 140056.03 requests per second, p50=0.167 msec SET: 116279.07 requests per second, p50=0.247 msec GET: 98039.22 requests per second, p50=0.255 msec INCR: 97656.24 requests per second, p50=0.255 msec LPUSH: 108108.11 requests per second, p50=0.271 msec RPUSH: 129032.27 requests per second, p50=0.167 msec LPOP: 106951.88 requests per second, p50=0.255 msec RPOP: 111358.58 requests per second, p50=0.255 msec SADD: 100200.40 requests per second, p50=0.255 msec HSET: 132100.39 requests per second, p50=0.167 msec SPOP: 118623.96 requests per second, p50=0.239 msec ZADD: 96711.80 requests per second, p50=0.279 msec ZPOPMIN: 113895.21 requests per second, p50=0.247 msec LPUSH (needed to benchmark LRANGE): 153846.16 requests per second, p50=0.175 msec LRANGE_100 (first 100 elements): 29299.74 requests per second, p50=0.775 msec LRANGE_300 (first 300 elements): 13898.54 requests per second, p50=1.655 msec LRANGE_500 (first 500 elements): 8989.57 requests per second, p50=2.847 msec LRANGE_600 (first 600 elements): 8009.61 requests per second, p50=2.903 msec MSET (10 keys): 91324.20 requests per second, p50=0.471 msec
Edit: an der redis.conf. habe ich lediglich den "save" Parameter minimal angepasst, alle anderen Einstellungen sind die vorgegebenen.
-
@ilovegym
Ich habe jetzt Redis in einem eigenen LXC Container laufen. Der Proxmox Host ist der gleiche. Die Performance hat sich verbessert:martin@redis:~$ redis-benchmark -q -n 100000 PING_INLINE: 95510.98 requests per second, p50=0.255 msec PING_MBULK: 84745.77 requests per second, p50=0.279 msec SET: 92678.41 requests per second, p50=0.255 msec GET: 94966.77 requests per second, p50=0.255 msec INCR: 96246.39 requests per second, p50=0.255 msec LPUSH: 93896.71 requests per second, p50=0.255 msec RPUSH: 95419.85 requests per second, p50=0.255 msec LPOP: 94250.71 requests per second, p50=0.255 msec RPOP: 93023.25 requests per second, p50=0.255 msec SADD: 91157.70 requests per second, p50=0.255 msec HSET: 92592.59 requests per second, p50=0.255 msec SPOP: 94876.66 requests per second, p50=0.255 msec ZADD: 93632.96 requests per second, p50=0.255 msec ZPOPMIN: 96525.09 requests per second, p50=0.255 msec LPUSH (needed to benchmark LRANGE): 94339.62 requests per second, p50=0.255 msec LRANGE_100 (first 100 elements): 59916.12 requests per second, p50=0.399 msec LRANGE_300 (first 300 elements): 27367.27 requests per second, p50=0.887 msec LRANGE_500 (first 500 elements): 18957.35 requests per second, p50=1.255 msec LRANGE_600 (first 600 elements): 17047.39 requests per second, p50=1.439 msec MSET (10 keys): 93283.58 requests per second, p50=0.255 msec XADD: 93808.63 requests per second, p50=0.255 msec