150
}
151
152
>
func newLatencyStats() *latencyStats {
sim.go
153
>
return &latencyStats{
154
>
byKey: make(map[string][]int64),
155
>
byKeyNormalized: make(map[string][]float64),
156
>
}
157
>
}
158
159
>
func newState(rnd *rand.Rand, counterFactory func() counter.Counter, partitions, strideFactor int) *state {
sim.go
160
>
return &state{
161
>
rnd: rnd,
162
>
counterFactory: counterFactory,
163
>
partitions: make([]partitionState, partitions),
164
>
strideFactor: float32(strideFactor),
165
>
}
166
>
}
167
168
>
func newSimulator(state *state, stats *latencyStats, defaultPriority int, w io.Writer, verbose bool) *simulator {
sim.go
169
>
return &simulator{
170
>
state: state,
171
>
stats: stats,
172
>
w: w,
173
>
verbose: verbose,
174
>
defaultPriority: defaultPriority,
175
>
}
176
>
}
177
178
// addTask adds a task to the simulator, assigning defaults and an index.
179
>
func (sim *simulator) addTask(t *task) {
sim.go
180
>
t.pri = cmp.Or(t.pri, sim.defaultPriority)
181
>
t.fweight = cmp.Or(t.fweight, 1.0)
182
>
t.index = sim.nextIndex
183
>
sim.nextIndex++
184
>
sim.state.addTask(t)
185
>
}
186
187
// processTask records stats for a dispatched task and returns the latency.
188
>
func (sim *simulator) processTask(t *task) int64 {
sim.go
189
>
latency := sim.dispatchIndex - t.index
190
>
sim.stats.byKey[t.fkey] = append(sim.stats.byKey[t.fkey], latency)
191
>
sim.stats.overall = append(sim.stats.overall, latency)
192
>
sim.dispatchIndex++
193
>
return latency
194
>
}
195
196
// printTask writes a single task's dispatch info to the writer.
197
>
func (sim *simulator) printTask(t *task, partition int, latency int64) {
sim.go
198
>
if !sim.verbose {
199
>
return
200
>
}
201
fmt.Fprintf(sim.w, "task idx:%6d dsp:%6d lat:%6d pri:%2d fkey:%10q fweight:%3g part:%2d payload:%q\n",
202
t.index, sim.dispatchIndex-1, latency, t.pri, t.fkey, t.fweight, partition, t.payload)