MCPcopy Create free account
hub / github.com/F-Stack/f-stack / test_timer_perf

Function test_timer_perf

dpdk/app/test/test_timer_perf.c:36–132  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

34#endif
35
36static int
37test_timer_perf(void)
38{
39 unsigned iterations = 100;
40 unsigned i;
41 struct rte_timer *tms;
42 uint64_t start_tsc, end_tsc, delay_start;
43 unsigned lcore_id = rte_lcore_id();
44
45 tms = rte_malloc(NULL, sizeof(*tms) * MAX_ITERATIONS, 0);
46
47 for (i = 0; i < MAX_ITERATIONS; i++)
48 rte_timer_init(&tms[i]);
49
50 const uint64_t ticks = rte_get_timer_hz() * DELAY_SECONDS;
51 const uint64_t ticks_per_ms = rte_get_tsc_hz()/1000;
52 const uint64_t ticks_per_us = ticks_per_ms/1000;
53
54 while (iterations <= MAX_ITERATIONS) {
55
56 printf("Appending %u timers\n", iterations);
57 start_tsc = rte_rdtsc();
58 for (i = 0; i < iterations; i++)
59 rte_timer_reset(&tms[i], ticks, SINGLE, lcore_id,
60 timer_cb, NULL);
61 end_tsc = rte_rdtsc();
62 printf("Time for %u timers: %"PRIu64" (%"PRIu64"ms), ", iterations,
63 end_tsc-start_tsc, (end_tsc-start_tsc+ticks_per_ms/2)/(ticks_per_ms));
64 printf("Time per timer: %"PRIu64" (%"PRIu64"us)\n",
65 (end_tsc-start_tsc)/iterations,
66 ((end_tsc-start_tsc)/iterations+ticks_per_us/2)/(ticks_per_us));
67 outstanding_count = iterations;
68 delay_start = rte_get_timer_cycles();
69 while (rte_get_timer_cycles() < delay_start + ticks)
70 do_delay();
71
72 start_tsc = rte_rdtsc();
73 while (outstanding_count)
74 rte_timer_manage();
75 end_tsc = rte_rdtsc();
76 printf("Time for %u callbacks: %"PRIu64" (%"PRIu64"ms), ", iterations,
77 end_tsc-start_tsc, (end_tsc-start_tsc+ticks_per_ms/2)/(ticks_per_ms));
78 printf("Time per callback: %"PRIu64" (%"PRIu64"us)\n",
79 (end_tsc-start_tsc)/iterations,
80 ((end_tsc-start_tsc)/iterations+ticks_per_us/2)/(ticks_per_us));
81
82 printf("Resetting %u timers\n", iterations);
83 start_tsc = rte_rdtsc();
84 for (i = 0; i < iterations; i++)
85 rte_timer_reset(&tms[i], rte_rand() % ticks, SINGLE, lcore_id,
86 timer_cb, NULL);
87 end_tsc = rte_rdtsc();
88 printf("Time for %u timers: %"PRIu64" (%"PRIu64"ms), ", iterations,
89 end_tsc-start_tsc, (end_tsc-start_tsc+ticks_per_ms/2)/(ticks_per_ms));
90 printf("Time per timer: %"PRIu64" (%"PRIu64"us)\n",
91 (end_tsc-start_tsc)/iterations,
92 ((end_tsc-start_tsc)/iterations+ticks_per_us/2)/(ticks_per_us));
93 outstanding_count = iterations;

Callers

nothing calls this directly

Calls 10

rte_lcore_idFunction · 0.85
rte_mallocFunction · 0.85
rte_timer_initFunction · 0.85
rte_get_tsc_hzFunction · 0.85
rte_timer_resetFunction · 0.85
rte_timer_manageFunction · 0.85
rte_randFunction · 0.85
rte_freeFunction · 0.85
printfFunction · 0.50
rte_rdtscFunction · 0.50

Tested by

no test coverage detected