summaryrefslogtreecommitdiff
path: root/internal/benchutil/eventmix.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-03-08 11:47:00 +0200
committerPaul Buetow <paul@buetow.org>2026-03-08 11:47:00 +0200
commit7ad3bb96f4d07bdd8b20b561257a84c7f18c3829 (patch)
tree6ee6990908104bcca21ef9f932a80b17234a1727 /internal/benchutil/eventmix.go
parentbe5718d6e0de0f7ce3b4b506f389719542a46ea7 (diff)
benchutil: replace event serialization panics with errors
Diffstat (limited to 'internal/benchutil/eventmix.go')
-rw-r--r--internal/benchutil/eventmix.go37
1 files changed, 26 insertions, 11 deletions
diff --git a/internal/benchutil/eventmix.go b/internal/benchutil/eventmix.go
index 1057c0e..914bb93 100644
--- a/internal/benchutil/eventmix.go
+++ b/internal/benchutil/eventmix.go
@@ -101,9 +101,9 @@ var DiverseAllTypes = EventMix{
Seed: defaultMixSeed,
}
-func (m EventMix) GenerateStream(gen EventGenerator, n, numThreads int) [][]byte {
+func (m EventMix) GenerateStream(gen EventGenerator, n, numThreads int) ([][]byte, error) {
if n <= 0 {
- return nil
+ return nil, nil
}
threadCount := numThreads
@@ -123,12 +123,15 @@ func (m EventMix) GenerateStream(gen EventGenerator, n, numThreads int) [][]byte
tid := defaultBaseTid + uint32(threadIdx)
fd := fdFor(threadIdx, i)
event := choose(entries, totalWeight, rng)
- enter, exit := event.pair(gen, nextTime, pid, tid, fd, i)
+ enter, exit, err := event.pair(gen, nextTime, pid, tid, fd, i)
+ if err != nil {
+ return nil, fmt.Errorf("generate event %v pair: %w", event, err)
+ }
stream = append(stream, enter, exit)
nextTime += gen.pairDelta() + 1
}
- return stream
+ return stream, nil
}
func choose(entries []MixEntry, totalWeight int, rng *rand.Rand) MixEvent {
@@ -181,7 +184,7 @@ func sumWeights(entries []MixEntry) int {
return total
}
-func (e MixEvent) pair(gen EventGenerator, time uint64, pid, tid uint32, fd int32, seq int) ([]byte, []byte) {
+func (e MixEvent) pair(gen EventGenerator, time uint64, pid, tid uint32, fd int32, seq int) ([]byte, []byte, error) {
switch e {
case MixRead:
return gen.FdPair(time, pid, tid, fd, types.SYS_ENTER_READ, types.SYS_EXIT_READ, 128)
@@ -190,9 +193,15 @@ func (e MixEvent) pair(gen EventGenerator, time uint64, pid, tid uint32, fd int3
case MixOpen:
return gen.OpenPair(time, pid, tid)
case MixClose:
- _, enter := gen.EnterFdEvent(time, pid, tid, fd, types.SYS_ENTER_CLOSE)
- _, exit := gen.ExitFdEvent(time+gen.pairDelta(), pid, tid, fd, types.SYS_EXIT_CLOSE)
- return enter, exit
+ _, enter, err := gen.EnterFdEvent(time, pid, tid, fd, types.SYS_ENTER_CLOSE)
+ if err != nil {
+ return nil, nil, err
+ }
+ _, exit, err := gen.ExitFdEvent(time+gen.pairDelta(), pid, tid, fd, types.SYS_EXIT_CLOSE)
+ if err != nil {
+ return nil, nil, err
+ }
+ return enter, exit, nil
case MixStat:
path := fmt.Sprintf("/tmp/ior-stat-%d-%d", tid, seq)
return gen.PathPair(time, pid, tid, path, types.SYS_ENTER_NEWSTAT, types.SYS_EXIT_NEWSTAT, 0)
@@ -222,9 +231,15 @@ func (e MixEvent) pair(gen EventGenerator, time uint64, pid, tid uint32, fd int3
case MixDup3:
return gen.Dup3Pair(time, pid, tid, fd, syscall.O_CLOEXEC, types.SYS_EXIT_DUP3, int64(fd+1))
case MixOpenByHandleAt:
- _, enter := gen.EnterOpenByHandleAtEvent(time, pid, tid, syscall.O_RDWR)
- _, exit := gen.ExitRetEvent(time+gen.pairDelta(), pid, tid, types.SYS_EXIT_OPEN_BY_HANDLE_AT, int64(fd))
- return enter, exit
+ _, enter, err := gen.EnterOpenByHandleAtEvent(time, pid, tid, syscall.O_RDWR)
+ if err != nil {
+ return nil, nil, err
+ }
+ _, exit, err := gen.ExitRetEvent(time+gen.pairDelta(), pid, tid, types.SYS_EXIT_OPEN_BY_HANDLE_AT, int64(fd))
+ if err != nil {
+ return nil, nil, err
+ }
+ return enter, exit, nil
default:
return gen.NullPair(time, pid, tid, types.SYS_ENTER_SYNC, types.SYS_EXIT_SYNC)
}