bench_count.c (1937B)
1// SPDX-License-Identifier: GPL-2.0 2/* Copyright (c) 2020 Facebook */ 3#include "bench.h" 4 5/* COUNT-GLOBAL benchmark */ 6 7static struct count_global_ctx { 8 struct counter hits; 9} count_global_ctx; 10 11static void *count_global_producer(void *input) 12{ 13 struct count_global_ctx *ctx = &count_global_ctx; 14 15 while (true) { 16 atomic_inc(&ctx->hits.value); 17 } 18 return NULL; 19} 20 21static void *count_global_consumer(void *input) 22{ 23 return NULL; 24} 25 26static void count_global_measure(struct bench_res *res) 27{ 28 struct count_global_ctx *ctx = &count_global_ctx; 29 30 res->hits = atomic_swap(&ctx->hits.value, 0); 31} 32 33/* COUNT-local benchmark */ 34 35static struct count_local_ctx { 36 struct counter *hits; 37} count_local_ctx; 38 39static void count_local_setup(void) 40{ 41 struct count_local_ctx *ctx = &count_local_ctx; 42 43 ctx->hits = calloc(env.consumer_cnt, sizeof(*ctx->hits)); 44 if (!ctx->hits) 45 exit(1); 46} 47 48static void *count_local_producer(void *input) 49{ 50 struct count_local_ctx *ctx = &count_local_ctx; 51 int idx = (long)input; 52 53 while (true) { 54 atomic_inc(&ctx->hits[idx].value); 55 } 56 return NULL; 57} 58 59static void *count_local_consumer(void *input) 60{ 61 return NULL; 62} 63 64static void count_local_measure(struct bench_res *res) 65{ 66 struct count_local_ctx *ctx = &count_local_ctx; 67 int i; 68 69 for (i = 0; i < env.producer_cnt; i++) { 70 res->hits += atomic_swap(&ctx->hits[i].value, 0); 71 } 72} 73 74const struct bench bench_count_global = { 75 .name = "count-global", 76 .producer_thread = count_global_producer, 77 .consumer_thread = count_global_consumer, 78 .measure = count_global_measure, 79 .report_progress = hits_drops_report_progress, 80 .report_final = hits_drops_report_final, 81}; 82 83const struct bench bench_count_local = { 84 .name = "count-local", 85 .setup = count_local_setup, 86 .producer_thread = count_local_producer, 87 .consumer_thread = count_local_consumer, 88 .measure = count_local_measure, 89 .report_progress = hits_drops_report_progress, 90 .report_final = hits_drops_report_final, 91};