extern mpxy_lock_t flock;
extern char *gid_str;
+#define MCM_NNODES 8
+
static mcm_client_t mcm_client_list[MCM_CLIENT_MAX];
+static int mcm_cpumask[MCM_NNODES];
+static mpxy_lock_t mcm_cplock;
void mcm_check_io();
mcm_client_t *mc;
mcm_ib_dev_t *md;
+ mpxy_lock_init(&mcm_cplock, NULL);
+ for (i=0;i<MCM_NNODES;i++)
+ mcm_cpumask[i] = 0;
+
/* initialize client list and associated devices to init state */
for (i=0; i<MCM_CLIENT_MAX; i++) {
mc = &mcm_client_list[i];
mcm_config_fd(mc->rx_pipe[0]);
mcm_config_fd(mc->rx_pipe[1]);
- mpxy_lock_init(&mc->cplock, NULL);
mpxy_lock_init(&mc->oplock, NULL);
mpxy_lock_init(&mc->txlock, NULL);
mpxy_lock_init(&mc->cmlock, NULL);
if (!rd_dev_file(path, "numa_node", value, sizeof value))
mc->numa_node = atoi(value);
+ if (mc->numa_node < 0 || mc->numa_node > MCM_NNODES)
+ mc->numa_node = 0;
+
if (!rd_dev_file(path, "local_cpulist", value, sizeof value))
- mc->cpu_mask = atoi(value);
+ mcm_cpumask[mc->numa_node] = atoi(value);
mlog(0, " New MIC device - %s, numa_node %d, cpu %d - %s\n",
- path, mc->numa_node, mc->cpu_mask, value);
+ path, mc->numa_node, mcm_cpumask[mc->numa_node], value);
if (pthread_create(&mc->op_thread, NULL,
(void *(*)(void *))mpxy_op_thread, (void*)mc)) {
char rbuf[2];
if (mcm_affinity) {
- mpxy_lock(&mc->cplock);
+ mpxy_lock(&mcm_cplock);
CPU_ZERO( &mc->op_mask );
if (mcm_affinity_base_mic) /* static config settings */
cpu_id = mcm_affinity_base_mic++;
else
- cpu_id = mc->cpu_mask++;
+ cpu_id = mcm_cpumask[mc->numa_node]++;
CPU_SET(cpu_id, &mc->op_mask );
if(sched_setaffinity( 0, sizeof(mc->op_mask), &mc->op_mask) == -1)
mlog(0, "WARNING: could not set CPU Affinity (%s), continuing...\n", strerror(errno));
- mpxy_unlock(&mc->cplock);
+ mpxy_unlock(&mcm_cplock);
}
mlog(0, "TX thread (%x) MIC node_id %d bound to numa_node %d and cpu_id=%d\n",
pthread_self(), mc->scif_id, mc->numa_node, mcm_affinity ? cpu_id:0 );
int i, ret, time_ms, cpu_id;
if (mcm_affinity) {
- mpxy_lock(&mc->cplock);
+ mpxy_lock(&mcm_cplock);
CPU_ZERO( &mc->op_mask );
if (mcm_affinity_base_mic) /* static config settings */
cpu_id = mcm_affinity_base_mic++;
else
- cpu_id = mc->cpu_mask++;
+ cpu_id = mcm_cpumask[mc->numa_node]++;
CPU_SET(cpu_id, &mc->op_mask );
if(sched_setaffinity( 0, sizeof(mc->op_mask), &mc->op_mask) == -1)
mlog(0, "WARNING: could not set CPU Affinity (%s), continuing...\n", strerror(errno));
- mpxy_unlock(&mc->cplock);
+ mpxy_unlock(&mcm_cplock);
}
mlog(0, "OP thread (%x) MIC node_id %d bound to numa_node %d and cpu_id=%d\n",
pthread_self(), mc->scif_id, mc->numa_node, mcm_affinity ? cpu_id:0 );
char rbuf[2];
if (mcm_affinity) {
- mpxy_lock(&mc->cplock);
+ mpxy_lock(&mcm_cplock);
CPU_ZERO( &mc->op_mask );
if (mcm_affinity_base_mic) /* static config settings */
cpu_id = mcm_affinity_base_mic++;
else
- cpu_id = mc->cpu_mask++;
+ cpu_id = mcm_cpumask[mc->numa_node]++;
CPU_SET(cpu_id, &mc->op_mask );
if(sched_setaffinity( 0, sizeof(mc->op_mask), &mc->op_mask) == -1)
mlog(0, "WARNING: could not set CPU Affinity (%s), continuing...\n", strerror(errno));
- mpxy_unlock(&mc->cplock);
+ mpxy_unlock(&mcm_cplock);
}
mlog(0, "CM thread (%x) MIC node_id %d bound to numa_node %d and cpu_id=%d\n",
pthread_self(), mc->scif_id, mc->numa_node, mcm_affinity ? cpu_id:0 );
int i, data = 0, cpu_id, time_ms;
if (mcm_affinity) {
- mpxy_lock(&mc->cplock);
+ mpxy_lock(&mcm_cplock);
CPU_ZERO( &mc->op_mask );
if (mcm_affinity_base_mic) /* static config settings */
cpu_id = mcm_affinity_base_mic++;
else
- cpu_id = mc->cpu_mask++;
+ cpu_id = mcm_cpumask[mc->numa_node]++;
CPU_SET(cpu_id, &mc->op_mask );
if(sched_setaffinity( 0, sizeof(mc->op_mask), &mc->op_mask) == -1)
mlog(0, "WARNING: could not set CPU Affinity (%s), continuing...\n", strerror(errno));
- mpxy_unlock(&mc->cplock);
+ mpxy_unlock(&mcm_cplock);
}
mlog(0, "RX thread (%x) MIC node_id %d bound to numa_node %d and cpu_id=%d\n",
pthread_self(), mc->scif_id, mc->numa_node, mcm_affinity ? cpu_id:0 );