summaryrefslogtreecommitdiffstats
path: root/drivers/infiniband
diff options
context:
space:
mode:
authorSagi Grimberg <sagig@mellanox.com>2015-01-25 19:09:50 +0200
committerNicholas Bellinger <nab@linux-iscsi.org>2015-02-04 10:55:03 -0800
commit631af550621071d56abe2edbb63d9afd4f4dafcf (patch)
tree713dd06e37ab7bebdbfdb62affb1089b3b46bbae /drivers/infiniband
parentf64d2792dde1423af05e661abcf28e7fab9c6e28 (diff)
downloadlinux-631af550621071d56abe2edbb63d9afd4f4dafcf.tar.gz
linux-631af550621071d56abe2edbb63d9afd4f4dafcf.tar.bz2
linux-631af550621071d56abe2edbb63d9afd4f4dafcf.zip
iser-target: Use WQ_UNBOUND for completion workqueue
Bound workqueues might be too restrictive since they allow only a single core per session for processing completions. WQ_UNBOUND will allow bouncing to another CPU if the running CPU is currently busy. Luckily, our workqueues are NUMA aware and will first try to bounce within the same NUMA socket. My measurements with NULL backend devices show that there is no (noticeable) additional latency as a result of the change. I'd expect even to gain performance when working with fast devices that also allocate MSIX interrupt vectors. While we're at it, make it WQ_HIGHPRI since processing completions is really a high priority for performance. Signed-off-by: Sagi Grimberg <sagig@mellanox.com> Reported-by: Moussa Ba <moussaba@micron.com> Signed-off-by: Moussa Ba <moussaba@micron.com> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
Diffstat (limited to 'drivers/infiniband')
-rw-r--r--drivers/infiniband/ulp/isert/ib_isert.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/infiniband/ulp/isert/ib_isert.c b/drivers/infiniband/ulp/isert/ib_isert.c
index 1b35c8a9dcee..7f6a0d288f02 100644
--- a/drivers/infiniband/ulp/isert/ib_isert.c
+++ b/drivers/infiniband/ulp/isert/ib_isert.c
@@ -3320,7 +3320,8 @@ static int __init isert_init(void)
{
int ret;
- isert_comp_wq = alloc_workqueue("isert_comp_wq", 0, 0);
+ isert_comp_wq = alloc_workqueue("isert_comp_wq",
+ WQ_UNBOUND | WQ_HIGHPRI, 0);
if (!isert_comp_wq) {
isert_err("Unable to allocate isert_comp_wq\n");
ret = -ENOMEM;