From bf2924b0fc61d2e83250bc67dcc0b2d2fd66c124 Mon Sep 17 00:00:00 2001 From: Alexey Kopytov Date: Sun, 16 Oct 2016 23:09:51 +0300 Subject: [PATCH] Use an atomic fetch-and-add instead of a global mutex in sb_lua_get_request(). This was a scalability bottleneck with --max-requests>0. --- sysbench/scripting/script_lua.c | 18 +++++++----------- tests/include/script_oltp_common.sh | 2 +- 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/sysbench/scripting/script_lua.c b/sysbench/scripting/script_lua.c index 5590d7f..71f2a8a 100644 --- a/sysbench/scripting/script_lua.c +++ b/sysbench/scripting/script_lua.c @@ -20,6 +20,8 @@ # include "config.h" #endif +#include + #include "script_lua.h" #include "lua.h" #include "lualib.h" @@ -29,7 +31,7 @@ #include "db_driver.h" #include "sb_rnd.h" -#include +#include "ck_pr.h" #define EVENT_FUNC "event" #define PREPARE_FUNC "prepare" @@ -245,17 +247,11 @@ sb_request_t sb_lua_get_request(int thread_id) (void) thread_id; /* unused */ - if (sb_globals.max_requests > 0) + if (sb_globals.max_requests > 0 && + ck_pr_faa_uint(&nevents, 1) >= sb_globals.max_requests) { - SB_THREAD_MUTEX_LOCK(); - if (nevents >= sb_globals.max_requests) - { - req.type = SB_REQ_TYPE_NULL; - SB_THREAD_MUTEX_UNLOCK(); - return req; - } - nevents++; - SB_THREAD_MUTEX_UNLOCK(); + req.type = SB_REQ_TYPE_NULL; + return req; } req.type = SB_REQ_TYPE_SCRIPT; diff --git a/tests/include/script_oltp_common.sh b/tests/include/script_oltp_common.sh index aa9b715..f0cacf8 100644 --- a/tests/include/script_oltp_common.sh +++ b/tests/include/script_oltp_common.sh @@ -12,6 +12,6 @@ ARGS="--test=${SBTEST_SCRIPTDIR}/oltp.lua $DB_DRIVER_ARGS --oltp-tables-count=8" sysbench $ARGS prepare -sysbench $ARGS --max-requests=100 --num-threads=1 run +sysbench $ARGS --max-requests=100 --num-threads=2 run sysbench $ARGS cleanup