> If the user passes flags == 0 to the new spdk_malloc() call, this could be implemented by malloc() or equivalent behind the scenes, So, does this mean you’re willing to change all calls to malloc(size) with spdk_malloc(size, 0, NULL, SPDK_ENV_SOCKET_ID_ANY, SPDK_MALLOC_SHARE)? Is that the plan? /John From: SPDK on behalf of "Verkamp, Daniel" Reply-To: Storage Performance Development Kit Date: Thursday, May 3, 2018 at 2:06 PM To: Storage Performance Development Kit , Jim Harris , "Walker, Benjamin" , "z.khatami88(a)gmail.com" Subject: Re: [SPDK] spdk_malloc vs. malloc Hi John, The new API is intended to allow memory that is shared and not DMA-able, so spdk_dma_malloc() wouldn’t be an appropriate name; also, we did not want to break public API by adding a new flags parameter to the existing function. We intend to update the internal SPDK callers of spdk_dma_malloc() to all use spdk_malloc() with the appropriate flags (leaving the old names for backwards compatibility for now). If the user passes flags == 0 to the new spdk_malloc() call, this could be implemented by malloc() or equivalent behind the scenes, since the memory does not need to be DMA-able or shared across multi-process boundaries (it has no special properties). Does this suffice for your use case? Thanks, -- Daniel From: SPDK [mailto:spdk-bounces(a)lists.01.org] On Behalf Of Meneghini, John Sent: Thursday, May 3, 2018 10:53 AM To: Harris, James R ; Walker, Benjamin ; z.khatami88(a)gmail.com; Storage Performance Development Kit Cc: Meneghini, John Subject: [SPDK] spdk_malloc vs. malloc Hi Jim, Ben, and Zahra. I am sorry I didn’t catch this during the code review, but it’s really hard to keep track of all of the changes that are going on. https://review.gerrithub.io/#/c/spdk/spdk/+/402334/ As you may recall, we wanted to use spdk_malloc and spdk_calloc to abstract the POSIX malloc and calloc calls. This is still an issue in multiple places as we want a non-blocking malloc and calloc call that returns a status rather than setting errno (e.g. to ENOMEM). Remember, not all execution environments support errno. Can we revert change a77cd3f7, and use the spdk_malloc/calloc/free api for that purpose? Also, I don’t see the point of introducing an additional API for dma-able memory. We went through this once before. * a77cd3f7 2018-04-24 env: add malloc variants with DMA/shareable flags [ Ben Walker / z.khatami88(a)gmail.com ] * 8a44220b 2017-05-31 env: Rename spdk_malloc/zmalloc/realloc/free to spdk_dma_(func) [ Jim Harris / johnm(a)netapp.com ] I fully support adding the SPDK_MALLOC_DMA and SPDK_MALLOC_SHARE flag and socket_id to spdk_dma_malloc/zmalloc(), and I prefer to do this rather than invent a new API for allocating dma-able memory. void *spdk_dma_malloc(size_t size, size_t align, uint64_t *phys_addr); void *spdk_malloc(size_t size, size_t align, uint64_t *phys_addr, int socket_id, uint32_t flags); I’m proposing: void *spdk_dma_malloc(size_t size, size_t align, uint64_t *phys_addr, int socket_id, uint32_t flags); /John P.S. What I really need is a filter that allows me to watch all of the headers in include/spdk/{api}.h. Looking at the GerritHub documentation, I see no way to do this. It appears all I can do is watch the master branch. https://review.gerrithub.io/Documentation/intro-user.html#watch