event: create the ring on other available sockets
There may have the situation that associated socket does not have enough memory for the event pool and the related ring buffer. As the event pool will be created at any available socket, this will be same for the ring. The basic idea is to first allocate the memory for the core associated socket and then try other available sockects before terminating. Change-Id: I52c240289899c136b607629c12c0250ad859c8ac Signed-off-by: GangCao <gang.cao@intel.com> Reviewed-on: https://review.gerrithub.io/385972 Tested-by: SPDK Automated Test System <sys_sgsw@intel.com> Reviewed-by: Ziye Yang <optimistyzy@gmail.com> Reviewed-by: Changpeng Liu <changpeng.liu@intel.com> Reviewed-by: Daniel Verkamp <daniel.verkamp@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
4f16344356
commit
40dd3c29a4
@ -473,6 +473,13 @@ spdk_reactor_construct(struct spdk_reactor *reactor, uint32_t lcore, uint64_t ma
|
|||||||
TAILQ_INIT(&reactor->timer_pollers);
|
TAILQ_INIT(&reactor->timer_pollers);
|
||||||
|
|
||||||
reactor->events = spdk_ring_create(SPDK_RING_TYPE_MP_SC, 65536, reactor->socket_id);
|
reactor->events = spdk_ring_create(SPDK_RING_TYPE_MP_SC, 65536, reactor->socket_id);
|
||||||
|
if (!reactor->events) {
|
||||||
|
SPDK_NOTICELOG("Ring creation failed on preferred socket %d. Try other sockets.\n",
|
||||||
|
reactor->socket_id);
|
||||||
|
|
||||||
|
reactor->events = spdk_ring_create(SPDK_RING_TYPE_MP_SC, 65536,
|
||||||
|
SPDK_ENV_SOCKET_ID_ANY);
|
||||||
|
}
|
||||||
assert(reactor->events != NULL);
|
assert(reactor->events != NULL);
|
||||||
|
|
||||||
reactor->event_mempool = g_spdk_event_mempool[reactor->socket_id];
|
reactor->event_mempool = g_spdk_event_mempool[reactor->socket_id];
|
||||||
@ -617,7 +624,7 @@ spdk_reactors_init(unsigned int max_delay_us)
|
|||||||
SPDK_MEMPOOL_DEFAULT_CACHE_SIZE, i);
|
SPDK_MEMPOOL_DEFAULT_CACHE_SIZE, i);
|
||||||
|
|
||||||
if (g_spdk_event_mempool[i] == NULL) {
|
if (g_spdk_event_mempool[i] == NULL) {
|
||||||
SPDK_ERRLOG("spdk_event_mempool creation failed on socket %d\n", i);
|
SPDK_NOTICELOG("Event_mempool creation failed on preferred socket %d.\n", i);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Instead of failing the operation directly, try to create
|
* Instead of failing the operation directly, try to create
|
||||||
|
Loading…
Reference in New Issue
Block a user