Go to file
Norwin 4586fdec1c repl: add load, store 2022-01-02 08:19:37 +01:00
benchmarks more gifs & stupid jokes 2020-12-31 14:35:54 +01:00
pixelflut speed up command generation 2021-04-25 16:31:12 +02:00
render repl: add scale, rotate 2022-01-02 08:07:49 +01:00
rpc repl: add load, store 2022-01-02 08:19:37 +01:00
.gitignore add binary to gitignore 2019-01-11 18:30:27 +01:00
IDEAS.md update ideas & readme 2021-01-01 14:56:19 +01:00
LICENSE Initial commit 2019-01-06 21:54:30 +01:00
README.md update ideas & readme 2021-01-01 14:56:19 +01:00
go.mod Update go.mod 2021-12-29 22:13:23 +01:00
go.sum Add go.md and go.sum 2021-12-29 21:31:39 +01:00
main.go implement all te draw orderz 2021-01-01 14:56:19 +01:00

README.md

🌊🌊🌊 Hochwasser 🌊🤽🌊

Highly efficient distributed Pixelflut client.

  • Sends static images, text, generated patterns (animations upcoming)
  • REPL enables fast iterations
  • CnC server + client architecture (it's webscale!) (can also run in a single process)
  • Faster than sturmflut (in some benchmarks at least)
  • No dependencies (pixelflut apparently was considered a primary use case in the design of golang's stdlib 👍)

testimonials

Pixelflut endlich durchgespielt.

  • Steffen Cybert

N-no more micro-ddosing: bring on ssome Hochwasser and exppperience colors never seen befffore!1!

  • Morty

Hochwasser brings back the D in social DDoSing! Man, I forgot which one..

  • Doc Brown

build / install

  1. have a go installation >= 1.12
  2. go get github.com/SpeckiJ/Hochwasser
  3. go install github.com/SpeckiJ/Hochwasser

The help texts may be lacking, it's recommended to read rpc/repl.go.

hacking

Look at the github.com/SpeckiJ/Hochwasser/pixelflut subpackage, it contains the performance sensitive core.

The code is getting somewhat bloatedenterprise-ready, so if you want to quickly render a fun thing, it may be easier to just build a separate executable on top of pixelflut.Flut(), than to extend Hochwasser.

benchmark

The following benchmark was run on a max-spec X280 against version d4c574b.

I could not figure out what the performance bottleneck is, but it doesn't seem to be CPU limited, as turbo-boost doesn't kick in.

To reproduce, run the following commands in separate shells:

iperf -s -p 1234
go run main.go -image benchmark/test.png -connections 10

screenshot: 55 Gbps of hochwasser

55 Gbps on average! 🌊🌊🌊

sturmflut (./sturmflut 127.0.0.1:1337 benchmark/test.png -t 10, version 8ec6ee9) managed to get 48 Gpbs throughput on this system.

Hint: Benchmarking throughput against the pixelnuke server is pointless, as performance is then CPU-limited to ~1 Gbps by the server. Using iperf removes the server limitation. This also means that these metrics of several Gbps are far higher than realworld scenarios.

future ideas

see IDEAS.