-/* -*- mode: c; c-basic-offset: 8; indent-tabs-mode: nil; -*-
- * vim:expandtab:shiftwidth=8:tabstop=8:
- *
+/*
* GPL HEADER START
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
void ptlrpcd_add_req(struct ptlrpc_request *req, pdl_policy_t policy, int idx)
{
struct ptlrpcd_ctl *pc;
+ char jobid[JOBSTATS_JOBID_SIZE];
+
+ if (req->rq_reqmsg) {
+ lustre_get_jobid(jobid);
+ lustre_msg_set_jobid(req->rq_reqmsg, jobid);
+ }
cfs_spin_lock(&req->rq_lock);
if (req->rq_invalid_rqset) {
int index = pc->pc_index;
if (index >= 0 && index < cfs_num_possible_cpus()) {
- while (!cfs_cpu_online(index)) {
+ while (!cpu_online(index)) {
if (++index >= cfs_num_possible_cpus())
index = 0;
}
{
struct ptlrpcd_ctl *pc;
int rc = 0;
+#if defined(CONFIG_NUMA) && defined(HAVE_NODE_TO_CPUMASK)
+ struct ptlrpcd_ctl *ppc;
+ int node, i, pidx;
+ cpumask_t mask;
+#endif
ENTRY;
LASSERT(index <= max - 1);
pc->pc_npartners = 1;
break;
case PDB_POLICY_NEIGHBOR:
+#if defined(CONFIG_NUMA) && defined(HAVE_NODE_TO_CPUMASK)
+ node = cpu_to_node(index);
+ mask = node_to_cpumask(node);
+ for (i = max; i < cfs_num_online_cpus(); i++)
+ cpu_clear(i, mask);
+ pc->pc_npartners = cpus_weight(mask) - 1;
+ cfs_set_bit(LIOD_BIND, &pc->pc_flags);
+#else
LASSERT(max >= 3);
pc->pc_npartners = 2;
+#endif
break;
default:
CERROR("unknown ptlrpcd bind policy %d\n", ptlrpcd_bind_policy);
pc->pc_npartners = 0;
rc = -ENOMEM;
} else {
- if (index & 0x1)
- cfs_set_bit(LIOD_BIND, &pc->pc_flags);
-
switch (ptlrpcd_bind_policy) {
case PDB_POLICY_PAIR:
if (index & 0x1) {
+ cfs_set_bit(LIOD_BIND, &pc->pc_flags);
pc->pc_partners[0] = &ptlrpcds->
pd_threads[index - 1];
ptlrpcds->pd_threads[index - 1].
}
break;
case PDB_POLICY_NEIGHBOR:
+#if defined(CONFIG_NUMA) && defined(HAVE_NODE_TO_CPUMASK)
+ /* partners are cores in the same NUMA node.
+ * setup partnership only with ptlrpcd threads
+ * that are already initialized
+ */
+ for (pidx = 0, i = 0; i < index; i++) {
+ if (cpu_isset(i, mask)) {
+ ppc = &ptlrpcds->pd_threads[i];
+ pc->pc_partners[pidx++] = ppc;
+ ppc->pc_partners[ppc->
+ pc_npartners++] = pc;
+ }
+ }
+ /* adjust number of partners to the number
+ * of partnership really setup */
+ pc->pc_npartners = pidx;
+#else
+ if (index & 0x1)
+ cfs_set_bit(LIOD_BIND, &pc->pc_flags);
if (index > 0) {
pc->pc_partners[0] = &ptlrpcds->
pd_threads[index - 1];
pc_partners[0] = pc;
}
}
+#endif
break;
}
}