* Helper function to call bulk SP/MP enqueue functions. * flag == 0 -> enqueue * flag == 1 -> dequeue */
| 174 | * flag == 1 -> dequeue |
| 175 | */ |
| 176 | static __rte_always_inline int |
| 177 | enqueue_dequeue_bulk_helper(const unsigned int flag, const int esize, |
| 178 | struct thread_params *p) |
| 179 | { |
| 180 | int ret; |
| 181 | const unsigned int iter_shift = 15; |
| 182 | const unsigned int iterations = 1 << iter_shift; |
| 183 | struct rte_ring *r = p->r; |
| 184 | unsigned int bsize = p->size; |
| 185 | unsigned int i; |
| 186 | void *burst = NULL; |
| 187 | |
| 188 | #ifdef RTE_USE_C11_MEM_MODEL |
| 189 | if (__atomic_fetch_add(&lcore_count, 1, __ATOMIC_RELAXED) + 1 != 2) |
| 190 | #else |
| 191 | if (__sync_add_and_fetch(&lcore_count, 1) != 2) |
| 192 | #endif |
| 193 | while(lcore_count != 2) |
| 194 | rte_pause(); |
| 195 | |
| 196 | burst = test_ring_calloc(MAX_BURST, esize); |
| 197 | if (burst == NULL) |
| 198 | return -1; |
| 199 | |
| 200 | const uint64_t sp_start = rte_rdtsc(); |
| 201 | for (i = 0; i < iterations; i++) |
| 202 | do { |
| 203 | if (flag == 0) |
| 204 | ret = test_ring_enqueue(r, burst, esize, bsize, |
| 205 | TEST_RING_THREAD_SPSC | |
| 206 | TEST_RING_ELEM_BULK); |
| 207 | else if (flag == 1) |
| 208 | ret = test_ring_dequeue(r, burst, esize, bsize, |
| 209 | TEST_RING_THREAD_SPSC | |
| 210 | TEST_RING_ELEM_BULK); |
| 211 | if (ret == 0) |
| 212 | rte_pause(); |
| 213 | } while (!ret); |
| 214 | const uint64_t sp_end = rte_rdtsc(); |
| 215 | |
| 216 | const uint64_t mp_start = rte_rdtsc(); |
| 217 | for (i = 0; i < iterations; i++) |
| 218 | do { |
| 219 | if (flag == 0) |
| 220 | ret = test_ring_enqueue(r, burst, esize, bsize, |
| 221 | TEST_RING_THREAD_MPMC | |
| 222 | TEST_RING_ELEM_BULK); |
| 223 | else if (flag == 1) |
| 224 | ret = test_ring_dequeue(r, burst, esize, bsize, |
| 225 | TEST_RING_THREAD_MPMC | |
| 226 | TEST_RING_ELEM_BULK); |
| 227 | if (ret == 0) |
| 228 | rte_pause(); |
| 229 | } while (!ret); |
| 230 | const uint64_t mp_end = rte_rdtsc(); |
| 231 | |
| 232 | p->spsc = ((double)(sp_end - sp_start))/(iterations * bsize); |
| 233 | p->mpmc = ((double)(mp_end - mp_start))/(iterations * bsize); |
no test coverage detected