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.
This commit is contained in:
@ -20,6 +20,8 @@
|
||||
# include "config.h"
|
||||
#endif
|
||||
|
||||
#include <stdlib.h>
|
||||
|
||||
#include "script_lua.h"
|
||||
#include "lua.h"
|
||||
#include "lualib.h"
|
||||
@ -29,7 +31,7 @@
|
||||
#include "db_driver.h"
|
||||
#include "sb_rnd.h"
|
||||
|
||||
#include <stdlib.h>
|
||||
#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;
|
||||
|
||||
@ -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
|
||||
|
||||
Reference in New Issue
Block a user