Go to file
Norwin Roosen f191386a75
always read images as NRGBA
2021-01-01 14:56:19 +01:00
benchmarks more gifs & stupid jokes 2020-12-31 14:35:54 +01:00
pixelflut print throughput in SI units 2020-12-31 17:17:24 +01:00
render always read images as NRGBA 2021-01-01 14:56:19 +01:00
rpc always read images as NRGBA 2021-01-01 14:56:19 +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
main.go always read images as NRGBA 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.