| /* |
| * Copyright (c) 2020 Intel Corporation |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| #ifndef __MSGDEV_H__ |
| #define __MSGDEV_H__ |
| |
| /* Define this to enable logging of every event as it is processed to |
| * carefully inspect behavior. Note that at high event rates (see |
| * MAX_EVENT_DELAY_TICKS) the log backend won't be able to keep up and |
| * that the log processing will add CPU load that is not accounted for |
| * in AVERAGE_LOAD_TARGET_PCT. Disable for more accurate statistics |
| * measurement. Note that if you don't want the log subsystem |
| * throttling to drop messages, you'll probably want to increase |
| * MAX_EVENT_DELAY_TICKS too, to slow down the reporting. |
| */ |
| #define LOG_EVERY_EVENT 1 |
| |
| /* Number of worker threads, each at a separate priority, split evenly |
| * between cooperative and preemptible priorities. |
| */ |
| #define NUM_THREADS 4 |
| |
| /* The proc_cyc duty cycle parameters are chosen to use approximately |
| * this fraction of one CPU's available cycles. Default 60% |
| */ |
| #define AVERAGE_LOAD_TARGET_PCT 60 |
| |
| /* "Hardware interrupts" for our fake device will arrive after a |
| * random delay of between zero and this number of ticks. The event |
| * rate should be high enough to collect enough data but low enough |
| * that it is not regular. |
| */ |
| #define MAX_EVENT_DELAY_TICKS 8 |
| |
| /* How many events will be sent before the test completes? Note that |
| * we keep a naive array of latencies to compute variance, so this |
| * value has memory costs. |
| */ |
| #define MAX_EVENTS 40 |
| |
| /* The "messages" dispatched by our MetaIRQ thread */ |
| struct msg { |
| /* Sequence number */ |
| uint32_t seq; |
| |
| /* Cycle time when the message was "received" */ |
| uint32_t timestamp; |
| |
| /* Thread to which the message is targeted */ |
| uint32_t target; |
| |
| /* Cycles of processing the message requires */ |
| uint32_t proc_cyc; |
| |
| /* Cycles of latency before the MetaIRQ thread received the message */ |
| uint32_t metairq_latency; |
| }; |
| |
| /* Initialize the fake "message" device, after this messages will |
| * begin arriving via message_dev_fetch(). |
| */ |
| void message_dev_init(void); |
| |
| /* Retrieve the next message from the "device", blocks until |
| * delivery |
| */ |
| void message_dev_fetch(struct msg *m); |
| |
| #endif /* __MSGDEV_H__ */ |