runners: bench: Added BENCH_SIMTIME/SIMRESET/PAUSE/RESUME/etc
- BENCH_SIMTIME() => lfs3_kiwibd_simtime() - BENCH_SIMRESET() => lfs3_kiwibd_simreset() - BENCH_SIMPAUSE() => lfs3_kiwibd_simpause() - BENCH_SIMRESUME() => lfs3_kiwibd_simresume() - BENCH_RESET() => lfs3_kiwibd_simreset() + BENCH_STACK/HEAP_RESET() - BENCH_PAUSE() => lfs3_kiwibd_simpause() + BENCH_STACK/HEAP_PAUSE() - BENCH_RESUME() => lfs3_kiwibd_simresume() + BENCH_STACK/HEAP_RESUME() This does two things: 1. Adds pause/resume counters to bd counters to make it easier to exclude operations from the current bench (potentially useful for seq+disk usage). 2. Exposes bd simtime operations as BENCH_* macros, to make it a bit easier to interact with simtime without tying all the benches to kiwibd. (Not that we'll ever probably not use kiwibd, but still). Also adopted 32-bit counters for stack/heap pause state instead of a 32-bit stack. Not that either are at a risk of overflowing, but better safe than sorry.
This commit is contained in:
+40
-12
@@ -117,6 +117,7 @@ int lfs3_kiwibd_createcfg(const struct lfs3_cfg *cfg, const char *path,
|
||||
bd->cfg = bdcfg;
|
||||
|
||||
// setup some initial state
|
||||
bd->paused = false;
|
||||
bd->reads = 0;
|
||||
bd->progs = 0;
|
||||
bd->erases = 0;
|
||||
@@ -279,10 +280,14 @@ int lfs3_kiwibd_read(const struct lfs3_cfg *cfg, lfs3_block_t block,
|
||||
}
|
||||
|
||||
// track reads
|
||||
bd->reads += (lfs3_alignup(off + size, lfs3_max(bd->cfg->read_width, 1))
|
||||
- lfs3_aligndown(off, lfs3_max(bd->cfg->read_width, 1)))
|
||||
/ lfs3_max(bd->cfg->read_width, 1);
|
||||
bd->readed += size;
|
||||
if (!bd->paused) {
|
||||
bd->reads += (lfs3_alignup(off + size,
|
||||
lfs3_max(bd->cfg->read_width, 1))
|
||||
- lfs3_aligndown(off,
|
||||
lfs3_max(bd->cfg->read_width, 1)))
|
||||
/ lfs3_max(bd->cfg->read_width, 1);
|
||||
bd->readed += size;
|
||||
}
|
||||
if (bd->cfg->read_sleep) {
|
||||
int err = nanosleep(&(struct timespec){
|
||||
.tv_sec=bd->cfg->read_sleep/1000000000,
|
||||
@@ -410,10 +415,14 @@ int lfs3_kiwibd_prog(const struct lfs3_cfg *cfg, lfs3_block_t block,
|
||||
}
|
||||
|
||||
// track progs
|
||||
bd->progs += (lfs3_alignup(off + size, lfs3_max(bd->cfg->prog_width, 1))
|
||||
- lfs3_aligndown(off, lfs3_max(bd->cfg->prog_width, 1)))
|
||||
/ lfs3_max(bd->cfg->prog_width, 1);
|
||||
bd->progged += size;
|
||||
if (!bd->paused) {
|
||||
bd->progs += (lfs3_alignup(off + size,
|
||||
lfs3_max(bd->cfg->prog_width, 1))
|
||||
- lfs3_aligndown(off,
|
||||
lfs3_max(bd->cfg->prog_width, 1)))
|
||||
/ lfs3_max(bd->cfg->prog_width, 1);
|
||||
bd->progged += size;
|
||||
}
|
||||
if (bd->cfg->prog_sleep) {
|
||||
int err = nanosleep(&(struct timespec){
|
||||
.tv_sec=bd->cfg->prog_sleep/1000000000,
|
||||
@@ -474,10 +483,12 @@ int lfs3_kiwibd_erase(const struct lfs3_cfg *cfg, lfs3_block_t block) {
|
||||
|
||||
erased:;
|
||||
// track erases
|
||||
bd->erases += lfs3_alignup(cfg->block_size,
|
||||
lfs3_max(bd->cfg->erase_width, 1))
|
||||
/ lfs3_max(bd->cfg->erase_width, 1);
|
||||
bd->erased += cfg->block_size;
|
||||
if (!bd->paused) {
|
||||
bd->erases += lfs3_alignup(cfg->block_size,
|
||||
lfs3_max(bd->cfg->erase_width, 1))
|
||||
/ lfs3_max(bd->cfg->erase_width, 1);
|
||||
bd->erased += cfg->block_size;
|
||||
}
|
||||
if (bd->cfg->erase_sleep) {
|
||||
int err = nanosleep(&(struct timespec){
|
||||
.tv_sec=bd->cfg->erase_sleep/1000000000,
|
||||
@@ -553,6 +564,23 @@ int lfs3_kiwibd_simreset(const struct lfs3_cfg *cfg) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
int lfs3_kiwibd_simpause(const struct lfs3_cfg *cfg) {
|
||||
LFS3_KIWIBD_TRACE("lfs3_kiwibd_simpause(%p)", (void*)cfg);
|
||||
lfs3_kiwibd_t *bd = cfg->context;
|
||||
bd->paused += 1;
|
||||
LFS3_KIWIBD_TRACE("lfs3_kiwibd_simpause -> %d", 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int lfs3_kiwibd_simresume(const struct lfs3_cfg *cfg) {
|
||||
LFS3_KIWIBD_TRACE("lfs3_kiwibd_simresume(%p)", (void*)cfg);
|
||||
lfs3_kiwibd_t *bd = cfg->context;
|
||||
LFS3_ASSERT(bd->paused);
|
||||
bd->paused -= 1;
|
||||
LFS3_KIWIBD_TRACE("lfs3_kiwibd_simresume -> %d", 0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
lfs3_kiwibd_sio_t lfs3_kiwibd_reads(const struct lfs3_cfg *cfg) {
|
||||
LFS3_KIWIBD_TRACE("lfs3_kiwibd_reads(%p)", (void*)cfg);
|
||||
lfs3_kiwibd_t *bd = cfg->context;
|
||||
|
||||
Reference in New Issue
Block a user