lib/sock: Introduce lazy free of spdk_sock_placement_id_entry
Purpose: Fix the unbalanced allocation of socket connection. Suppose we have 4 spdk threads, then there will be 4 sock groups, each on one spdk thread. And When using the NAPI_ID, each sock group will be responsible for one NAPI_ID. For example, Poll group: A, B, C, D, connection with NAPI_ID: 0, 1, 2, 3. However if connection with NAPI_ID 2 exits first, and we will allocate socket A (with the roundrobin manner, But not C again). So to avoid this, we choose lazy free. Since when the sock poling group is close, it will free them finally in spdk_sock_remove_sock_group_from_map_table. So there is no memeory leak, but eliminates unnecessary allocation/dellocation on spdk_sock_placement_id_entry. Signed-off-by: Ziye Yang <ziye.yang@intel.com> Change-Id: I9bbc9139c8f8f3999eab7cd9259db2d683bd8466 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/1873 Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
This commit is contained in:
parent
a6587c7e82
commit
a2201d050b
@ -101,10 +101,6 @@ spdk_sock_map_release(int placement_id)
|
||||
if (placement_id == entry->placement_id) {
|
||||
assert(entry->ref > 0);
|
||||
entry->ref--;
|
||||
if (!entry->ref) {
|
||||
STAILQ_REMOVE(&g_placement_id_map, entry, spdk_sock_placement_id_entry, link);
|
||||
free(entry);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user