Whamcloud - gitweb
LU-7245 socklnd: Bind peers to a specific CPT 10/16710/4
authorJames Simmons <uja.ornl@yahoo.com>
Tue, 6 Oct 2015 02:54:27 +0000 (22:54 -0400)
committerOleg Drokin <oleg.drokin@intel.com>
Wed, 28 Oct 2015 13:49:46 +0000 (13:49 +0000)
Currently the socklnd driver doesn't support
CPT affinity for its peers. Binding peers to
a specific CPT and memory allocated to the
NUMA node belonging to the CPT should give a
performance boost.

Change-Id: I1cc418dc4ba6269e346a4aa1454de79e580e1fba
Signed-off-by: James Simmons <uja.ornl@yahoo.com>
Reviewed-on: http://review.whamcloud.com/16710
Tested-by: Jenkins
Reviewed-by: Olaf Weber <olaf@sgi.com>
Tested-by: Maloo <hpdd-maloo@intel.com>
Reviewed-by: Amir Shehata <amir.shehata@intel.com>
Reviewed-by: Oleg Drokin <oleg.drokin@intel.com>
lnet/klnds/socklnd/socklnd.c

index ba7382a..ddc1460 100644 (file)
@@ -100,24 +100,23 @@ ksocknal_destroy_route (ksock_route_t *route)
 }
 
 static int
 }
 
 static int
-ksocknal_create_peer (ksock_peer_t **peerp, lnet_ni_t *ni, lnet_process_id_t id)
+ksocknal_create_peer(ksock_peer_t **peerp, lnet_ni_t *ni, lnet_process_id_t id)
 {
 {
-       ksock_net_t   *net = ni->ni_data;
-       ksock_peer_t  *peer;
+       int             cpt = lnet_cpt_of_nid(id.nid);
+       ksock_net_t     *net = ni->ni_data;
+       ksock_peer_t    *peer;
 
 
-       LASSERT (id.nid != LNET_NID_ANY);
-       LASSERT (id.pid != LNET_PID_ANY);
-       LASSERT (!in_interrupt());
+       LASSERT(id.nid != LNET_NID_ANY);
+       LASSERT(id.pid != LNET_PID_ANY);
+       LASSERT(!in_interrupt());
 
 
-       LIBCFS_ALLOC (peer, sizeof (*peer));
+       LIBCFS_CPT_ALLOC(peer, lnet_cpt_table(), cpt, sizeof(*peer));
        if (peer == NULL)
                return -ENOMEM;
 
        if (peer == NULL)
                return -ENOMEM;
 
-       memset (peer, 0, sizeof (*peer));       /* NULL pointers/clear flags etc */
-
        peer->ksnp_ni = ni;
        peer->ksnp_id = id;
        peer->ksnp_ni = ni;
        peer->ksnp_id = id;
-       atomic_set (&peer->ksnp_refcount, 1);   /* 1 ref for caller */
+       atomic_set(&peer->ksnp_refcount, 1);    /* 1 ref for caller */
        peer->ksnp_closing = 0;
        peer->ksnp_accepting = 0;
        peer->ksnp_proto = NULL;
        peer->ksnp_closing = 0;
        peer->ksnp_accepting = 0;
        peer->ksnp_proto = NULL;