Add the ability to set a starting core # when setting thread affinity
Former-commit-id: 9e2e2067c6df5919f1c6b8b9e6e3457c7edc0755
This commit is contained in:
parent
662a1b6a42
commit
6f15ce125c
@ -781,10 +781,16 @@ void loadServerConfigFromString(char *config) {
|
||||
cserver.fThreadAffinity = TRUE;
|
||||
} else if (strcasecmp(argv[1], "false") == 0) {
|
||||
cserver.fThreadAffinity = FALSE;
|
||||
} else {
|
||||
int offset = atoi(argv[1]);
|
||||
if (offset > 0) {
|
||||
cserver.fThreadAffinity = TRUE;
|
||||
cserver.threadAffinityOffset = offset-1;
|
||||
} else {
|
||||
err = "Unknown argument: server-thread-affinity expects either true or false";
|
||||
goto loaderr;
|
||||
}
|
||||
}
|
||||
} else if (!strcasecmp(argv[0], "active-replica") && argc == 2) {
|
||||
g_pserver->fActiveReplica = yesnotoi(argv[1]);
|
||||
if (g_pserver->repl_slave_ro) {
|
||||
|
@ -1073,7 +1073,7 @@ static void acceptCommonHandler(int fd, int flags, char *ip, int iel) {
|
||||
// Set thread affinity
|
||||
if (cserver.fThreadAffinity)
|
||||
{
|
||||
int cpu = iel;
|
||||
int cpu = iel + cserver.threadAffinityOffset;
|
||||
if (setsockopt(fd, SOL_SOCKET, SO_INCOMING_CPU, &cpu, sizeof(iel)) != 0)
|
||||
{
|
||||
serverLog(LL_WARNING, "Failed to set socket affinity");
|
||||
|
@ -2547,6 +2547,7 @@ void initServerConfig(void) {
|
||||
/* Multithreading */
|
||||
cserver.cthreads = CONFIG_DEFAULT_THREADS;
|
||||
cserver.fThreadAffinity = CONFIG_DEFAULT_THREAD_AFFINITY;
|
||||
cserver.threadAffinityOffset = 0;
|
||||
}
|
||||
|
||||
extern char **environ;
|
||||
@ -5350,10 +5351,10 @@ int main(int argc, char **argv) {
|
||||
#ifdef __linux__
|
||||
cpu_set_t cpuset;
|
||||
CPU_ZERO(&cpuset);
|
||||
CPU_SET(iel, &cpuset);
|
||||
CPU_SET(iel + cserver.threadAffinityOffset, &cpuset);
|
||||
if (pthread_setaffinity_np(rgthread[iel], sizeof(cpu_set_t), &cpuset) == 0)
|
||||
{
|
||||
serverLog(LOG_INFO, "Binding thread %d to cpu %d", iel, iel);
|
||||
serverLog(LOG_INFO, "Binding thread %d to cpu %d", iel, iel + cserver.threadAffinityOffset + 1);
|
||||
}
|
||||
#else
|
||||
serverLog(LL_WARNING, "CPU pinning not available on this platform");
|
||||
|
@ -1574,6 +1574,7 @@ struct redisServerConst {
|
||||
|
||||
int cthreads; /* Number of main worker threads */
|
||||
int fThreadAffinity; /* Should we pin threads to cores? */
|
||||
int threadAffinityOffset = 0; /* Where should we start pinning them? */
|
||||
char *pidfile; /* PID file path */
|
||||
|
||||
/* Fast pointers to often looked up command */
|
||||
|
Loading…
x
Reference in New Issue
Block a user