[Stgt-devel] iSER - one too many rubber duckies in the mempool
Robin Humble
robin.humble+stgt
Tue Dec 18 11:48:32 CET 2007
Hi,
with >=2 iSER clients I'm hitting these quite a lot:
tgtd: iscsi_rdma_malloc(1619) free list empty
tgtd: iscsi_rdma_alloc_data_buf(1647) free list empty
(the fn name depends on the tgtd version)
after which the initiator node is pretty much toast :-/
the code for this is in iscsi/iscsi_rdma.c -->
static void *iscsi_rdma_alloc_data_buf(struct iscsi_connection *conn, size_t sz)
{
...
if (list_empty(&dev->mempool_free)) {
/* XXX: take slow path: allocate and register */
eprintf("free list empty\n");
exit(1);
}
...
which looks like an OO(rdma)M fallback that's just unimplemented at
the moment?
as a workaround I boosted:
static int mempool_num = 192;
to 1920 which let 2 clients survive, but not the 15 or 100 that I'd
ideally like.
is dynamically adding more entries to the mempool the solution, or a
separate list of non-mempool rdma bufs, or just telling the initiator to
backoff for a while?
cheers,
robin
More information about the stgt
mailing list