[openib-general] Re: [PATCH 10 of 18] ipath - support for userspace apps using core driver
Andrew Morton
akpm at osdl.org
Wed Mar 22 19:06:36 PST 2006
"Bryan O'Sullivan" <bos at pathscale.com> wrote:
>
> + /*
> + * This code is present to allow a knowledgeable person to
> + * specify the layout of processes to processors before opening
> + * this driver, and then we'll assign the process to the "closest"
> + * HT-400 to that processor (we assume reasonable connectivity,
> + * for now). This code assumes that if affinity has been set
> + * before this point, that at most one cpu is set; for now this
> + * is reasonable. I check for both cpus_empty() and cpus_full(),
> + * in case some kernel variant sets none of the bits when no
> + * affinity is set. 2.6.11 and 12 kernels have all present
> + * cpus set. Some day we'll have to fix it up further to handle
> + * a cpu subset. This algorithm fails for two HT-400's connected
> + * in tunnel fashion. Eventually this needs real topology
> + * information. There may be some issues with dual core numbering
> + * as well. This needs more work prior to release.
> + */
> + if (!cpus_empty(current->cpus_allowed) &&
> + !cpus_full(current->cpus_allowed)) {
> + int ncpus = num_online_cpus(), curcpu = -1;
> + for (i = 0; i < ncpus; i++)
> + if (cpu_isset(i, current->cpus_allowed)) {
> + ipath_cdbg(PROC, "%s[%u] affinity set for "
> + "cpu %d\n", current->comm,
> + current->pid, i);
> + curcpu = i;
> + }
> + if (curcpu != -1) {
> + if (npresent) {
> + prefunit = curcpu / (ncpus / npresent);
> + ipath_dbg("%s[%u] %d chips, %d cpus, "
> + "%d cpus/chip, select unit %d\n",
> + current->comm, current->pid,
> + npresent, ncpus, ncpus / npresent,
> + prefunit);
> + }
> + }
> + }
CPU topology is available in sysfs - it shouild be possible to push policy
decisions like this up to userspace. If the topology info is insufficient,
we can add to it.
More information about the general
mailing list