status-im / nim-chronos

Chronos - An efficient library for asynchronous programming
https://status-im.github.io/nim-chronos/docs/chronos
Apache License 2.0
353 stars 51 forks source link

[WIP] introduce the virtual clock for simulations #407

Open cskiraly opened 1 year ago

cskiraly commented 1 year ago

This allows running code written for Chronos using -d:asyncTimer=virtual , turning it into a simple event-based simulation.

Used in https://github.com/codex-storage/nim-libp2p-dht/pull/57

cheatfate commented 1 year ago

Could you please add more explanation to this topic?

cskiraly commented 1 year ago

I use this virtual timer for testing performance in https://github.com/codex-storage/das-dht-emulator, using UDP only.

The problem it solves for me is the CPU bottleneck when emulating many instances of a process on a single machine.

Normally, CPU gets bottlenecked, and you can't keep up with real time clock. If you use this timer, all CPU operations become 0 virtual time, and thus you can focus on delays and timeouts set up in the event loop. Of course there are more sophisticated approaches, but it achieves what I need with a simple patch, and mostly without modifications to the code on top.

cskiraly commented 1 year ago

@cheatfate I have largely simplified the code. Purpose is still the same: to run simulations without code change.