[1/5] app/flow-perf: start using more generic wrapper for cycles
Checks
Commit Message
rdtsc() is x86 related, while this might fail for other archs,
so it's better to use more generic API for cycles measurement.
Signed-off-by: Wisam Jaddo <wisamm@nvidia.com>
---
app/test-flow-perf/main.c | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)
Comments
changes in V2:
1- Add first flow insertion latency calculation.
2- Fix for decap data in raw decap actions.
Wisam Jaddo (7):
app/flow-perf: start using more generic wrapper for cycles
app/flow-perf: add new option to use unique data on the fly
app/flow-perf: fix naming of CPU used structured data
app/flow-perf: fix report total stats for masked ports
app/flow-perf: fix the incremental IPv6 src set
app/flow-perf: add first flow latency support
app/flow-perf: fix setting decap data for decap actions
app/test-flow-perf/actions_gen.c | 77 +++++++++++++++++---------------
app/test-flow-perf/actions_gen.h | 3 +-
app/test-flow-perf/config.h | 8 +---
app/test-flow-perf/flow_gen.c | 4 +-
app/test-flow-perf/flow_gen.h | 1 +
app/test-flow-perf/items_gen.c | 13 +++---
app/test-flow-perf/main.c | 67 +++++++++++++++++----------
doc/guides/tools/flow-perf.rst | 5 +++
8 files changed, 102 insertions(+), 76 deletions(-)
@@ -969,7 +969,7 @@ meters_handler(int port_id, uint8_t core_id, uint8_t ops)
end_counter = (core_id + 1) * rules_count_per_core;
cpu_time_used = 0;
- start_batch = rte_rdtsc();
+ start_batch = rte_get_timer_cycles();
for (counter = start_counter; counter < end_counter; counter++) {
if (ops == METER_CREATE)
create_meter_rule(port_id, counter);
@@ -984,10 +984,10 @@ meters_handler(int port_id, uint8_t core_id, uint8_t ops)
if (!((counter + 1) % rules_batch)) {
rules_batch_idx = ((counter + 1) / rules_batch) - 1;
cpu_time_per_batch[rules_batch_idx] =
- ((double)(rte_rdtsc() - start_batch))
- / rte_get_tsc_hz();
+ ((double)(rte_get_timer_cycles() - start_batch))
+ / rte_get_timer_hz();
cpu_time_used += cpu_time_per_batch[rules_batch_idx];
- start_batch = rte_rdtsc();
+ start_batch = rte_get_timer_cycles();
}
}
@@ -1089,7 +1089,7 @@ destroy_flows(int port_id, uint8_t core_id, struct rte_flow **flows_list)
if (flow_group > 0 && core_id == 0)
rules_count_per_core++;
- start_batch = rte_rdtsc();
+ start_batch = rte_get_timer_cycles();
for (i = 0; i < (uint32_t) rules_count_per_core; i++) {
if (flows_list[i] == 0)
break;
@@ -1107,12 +1107,12 @@ destroy_flows(int port_id, uint8_t core_id, struct rte_flow **flows_list)
* for this batch.
*/
if (!((i + 1) % rules_batch)) {
- end_batch = rte_rdtsc();
+ end_batch = rte_get_timer_cycles();
delta = (double) (end_batch - start_batch);
rules_batch_idx = ((i + 1) / rules_batch) - 1;
- cpu_time_per_batch[rules_batch_idx] = delta / rte_get_tsc_hz();
+ cpu_time_per_batch[rules_batch_idx] = delta / rte_get_timer_hz();
cpu_time_used += cpu_time_per_batch[rules_batch_idx];
- start_batch = rte_rdtsc();
+ start_batch = rte_get_timer_cycles();
}
}
@@ -1185,7 +1185,7 @@ insert_flows(int port_id, uint8_t core_id)
flows_list[flow_index++] = flow;
}
- start_batch = rte_rdtsc();
+ start_batch = rte_get_timer_cycles();
for (counter = start_counter; counter < end_counter; counter++) {
flow = generate_flow(port_id, flow_group,
flow_attrs, flow_items, flow_actions,
@@ -1211,12 +1211,12 @@ insert_flows(int port_id, uint8_t core_id)
* for this batch.
*/
if (!((counter + 1) % rules_batch)) {
- end_batch = rte_rdtsc();
+ end_batch = rte_get_timer_cycles();
delta = (double) (end_batch - start_batch);
rules_batch_idx = ((counter + 1) / rules_batch) - 1;
- cpu_time_per_batch[rules_batch_idx] = delta / rte_get_tsc_hz();
+ cpu_time_per_batch[rules_batch_idx] = delta / rte_get_timer_hz();
cpu_time_used += cpu_time_per_batch[rules_batch_idx];
- start_batch = rte_rdtsc();
+ start_batch = rte_get_timer_cycles();
}
}