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

Function enqueue_dequeue_bulk_helper

dpdk/app/test/test_ring_perf.c:176–235  ·  view source on GitHub ↗

* Helper function to call bulk SP/MP enqueue functions. * flag == 0 -> enqueue * flag == 1 -> dequeue */

Source from the content-addressed store, hash-verified

174 * flag == 1 -> dequeue
175 */
176static __rte_always_inline int
177enqueue_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);

Callers 4

enqueue_bulkFunction · 0.85
enqueue_bulk_16BFunction · 0.85
dequeue_bulkFunction · 0.85
dequeue_bulk_16BFunction · 0.85

Calls 5

test_ring_callocFunction · 0.85
test_ring_enqueueFunction · 0.85
test_ring_dequeueFunction · 0.85
rte_pauseFunction · 0.50
rte_rdtscFunction · 0.50

Tested by

no test coverage detected