Ponos – A simple yet powerful load generator in Erlang
github.com
github.com
I think it is a good name.
To add though, this is a cool idea. I like it generates an internal-kind of load. Not necessarily driven from external requests. So this combined with tsung to test how the system behaves in various scenarios.
Operating under load is not something many people test. Search Erlang Factor talks and you'll find many talks by Erlang experts on load monitoring, load shedding and so on basically characterizing behaviour during overload conditions.
My application is a server which clients login and then issue commands to. As I'm imagining it, a user load generator would be creating and logging in users. But this is where I get fuzzy... should the user task also create a load generator which issues commands against the application as that user? Seems pretty simple, hopefully it's possible !
Excited to try this out.
A load_generator in essence is just a process generating triggers at requested frequency. Every trigger happens asynchronously so there is no way to thread state between triggers.
If there is enough interest I'd be happy to extend it to handle synchronous load generators where threading state makes sense. With that use case though, it'd be impossible to guarantee that the actual load matches the load_spec in all circumstances.
If you wish to keep state between triggers you have to implement this outside of ponos at this stage.
Not the most flexible solution, but if you want the load spec to be authoritative you could allow it to recursively specify a different load generator rather than a task_runner. Instead of running a task, it would start a new load generator.
... hope I got some of the terminology right.
For instance, if you wish to represent each user as a load generator, your task_runner's state could store each load generator's user information in the state indexed by name.
You would then log in the user during the init state.
I'm on the subway but I'll describe it more in detail when I get home.
In the example I've modeled each of your uses as a load generator. So you would have to add one load generator per user. Let me know if you have any questions.
The original name is based on the Greek god of hard labor and toil (http://en.wikipedia.org/wiki/Ponos).