From e7430bcbaa02065b0be36ff982eda5ed0559b05b Mon Sep 17 00:00:00 2001 From: sleybo Date: Tue, 6 Feb 2007 16:29:35 +0000 Subject: [PATCH] [WSD] Added support for thread affinity. git-svn-id: svn://openib.tc.cornell.edu/gen1@572 ad392aa1-c5ef-ae45-8dd8-e69d62a5ef86 --- trunk/ulp/wsd/user/ibsp_iblow.c | 14 +++++++++++++- trunk/ulp/wsd/user/ibspdll.c | 12 ++++++++++++ trunk/ulp/wsd/user/ibspdll.h | 2 ++ 3 files changed, 27 insertions(+), 1 deletion(-) diff --git a/trunk/ulp/wsd/user/ibsp_iblow.c b/trunk/ulp/wsd/user/ibsp_iblow.c index d094ecdc..dade0949 100644 --- a/trunk/ulp/wsd/user/ibsp_iblow.c +++ b/trunk/ulp/wsd/user/ibsp_iblow.c @@ -96,6 +96,7 @@ complete_wq( switch ( wc->wc_type ) { case IB_WC_RECV: + CL_ASSERT(wc->length != 0); lpOverlapped->InternalHigh = wc->length; #ifdef IBSP_LOGGING cl_spinlock_acquire( &socket_info->recv_lock ); @@ -113,15 +114,17 @@ complete_wq( cl_atomic_inc(&g_ibsp.total_recv_compleated); #endif break; -#ifdef PERFMON_ENABLED case IB_WC_RDMA_READ: lpOverlapped->InternalHigh = wc->length; +#ifdef PERFMON_ENABLED InterlockedIncrement64( &g_pm_stat.pdata[COMP_RECV] ); InterlockedExchangeAdd64( &g_pm_stat.pdata[BYTES_READ], lpOverlapped->InternalHigh ); +#endif /* PERFMON_ENABLED */ break; +#ifdef PERFMON_ENABLED case IB_WC_SEND: InterlockedIncrement64( &g_pm_stat.pdata[COMP_SEND] ); InterlockedExchangeAdd64( &g_pm_stat.pdata[BYTES_SEND], @@ -484,12 +487,21 @@ ib_cq_thread( cl_status_t cl_status; ib_api_status_t status; int i; + DWORD_PTR old_afinity; IBSP_ENTER( IBSP_DBG_HW ); fzprint(("%s():%d:0x%x:0x%x: cq_tinfo=0x%p\n", __FUNCTION__, __LINE__, GetCurrentProcessId(), GetCurrentThreadId(), cq_tinfo)); + old_afinity = SetThreadAffinityMask (GetCurrentThread (),g_dwPollThreadAffinityMask); + if (old_afinity == 0) { + OutputDebugString("SetThreadAffinityMask failed\n"); + } else { + OutputDebugString("SetThreadAffinityMask succeeded\n"); + } + + do { cl_status = cl_waitobj_wait_on( cq_tinfo->cq_waitobj, EVENT_NO_TIMEOUT, TRUE ); diff --git a/trunk/ulp/wsd/user/ibspdll.c b/trunk/ulp/wsd/user/ibspdll.c index 5be27ad6..def0ea6d 100644 --- a/trunk/ulp/wsd/user/ibspdll.c +++ b/trunk/ulp/wsd/user/ibspdll.c @@ -58,6 +58,7 @@ int g_connect_err = WSAEADDRNOTAVAIL; uint8_t g_max_cm_retries = CM_RETRIES; uint8_t g_pkt_life_modifier = 0; uint8_t g_qp_retries = QP_ATTRIB_RETRY_COUNT; +DWORD_PTR g_dwPollThreadAffinityMask = 0; /* @@ -126,6 +127,17 @@ _DllMain( if( i && i <= 16 ) g_max_poll = _tcstoul( env_var, NULL, 10 ); + i = GetEnvironmentVariable( "IBWSD_POLL_THREAD_AFFINITY_MASK", env_var, sizeof(env_var) ); + if( i && i <= 16 ) + g_dwPollThreadAffinityMask = _tcstoul( env_var, NULL, 10 ); + else + { + DWORD_PTR xx; + BOOL ret = GetProcessAffinityMask(GetCurrentProcess(), &g_dwPollThreadAffinityMask, &xx); + CL_ASSERT(ret != 0); + ret = ret; + } + i = GetEnvironmentVariable( "IBWSD_SA_RETRY", env_var, sizeof(env_var) ); if( i && i <= 16 ) g_sa_retries = _tcstoul( env_var, NULL, 10 ); diff --git a/trunk/ulp/wsd/user/ibspdll.h b/trunk/ulp/wsd/user/ibspdll.h index f76cb079..570a64ae 100644 --- a/trunk/ulp/wsd/user/ibspdll.h +++ b/trunk/ulp/wsd/user/ibspdll.h @@ -61,6 +61,8 @@ extern uint32_t g_max_inline; extern uint32_t g_max_poll; extern uint32_t g_sa_timeout; extern uint32_t g_sa_retries; +extern DWORD_PTR g_dwPollThreadAffinityMask; + /* Allow users to control SA timeouts behavior - fall back on IPoIB or fail. */ extern int g_connect_err; extern uint8_t g_max_cm_retries; -- 2.41.0