Storage Performance Development Kit (SPDK)
 help / color / mirror / Atom feed
From: Walker, Benjamin <benjamin.walker at intel.com>
To: spdk@lists.01.org
Subject: Re: [SPDK] OS memory allocation
Date: Thu, 12 Jul 2018 17:46:35 +0000	[thread overview]
Message-ID: <efd08c159aa6c522c9e9bb17d99e8672029b2804.camel@intel.com> (raw)
In-Reply-To: 82C9F782B054C94B9FC04A331649C77AAD4C3FA6@fmsmsx104.amr.corp.intel.com

[-- Attachment #1: Type: text/plain, Size: 4074 bytes --]

Hi Paul

On Thu, 2018-07-12 at 17:43 +0000, Luse, Paul E wrote:
> Ben, isn't it also the case that the the spdk_malloc routines (I think all of
> them ) return mem from pre-allocated huge pages.  In cases where that's not
> required, there's no reason to use that scarce resource (depending on how you
> configured it) so it's better to use malloc/calloc.  Right?

Absolutely - spdk_malloc and its variants return DMA-safe and also potentially
cross-process shared memory. They are defined in include/spdk/env.h because
those types of memory allocations are not operations defined in the POSIX API.
DMA-safe memory is certainly scarce and often much less flexible in terms of
dynamic allocation, so we only allocate DMA-safe memory when we actually need to
perform DMA operations. For "regular" memory allocations, we just use POSIX
everywhere.

> 
> Thx
> Paul
> 
> -----Original Message-----
> From: SPDK [mailto:spdk-bounces(a)lists.01.org] On Behalf Of Walker, Benjamin
> Sent: Thursday, July 12, 2018 10:41 AM
> To: spdk(a)lists.01.org
> Subject: Re: [SPDK] OS memory allocation
> 
> Hi Leonid,
> 
> On Thu, 2018-07-12 at 07:10 +0000, Ravich, Leonid wrote:
> > Looks like SPDK uses OS dynamic memory  (malloc, zalloc ...) I am not 
> > understand why , It can use spdk_malloc/ spdk_zmalloc instead and be 
> > more "system friendly" .
> > 
> > If there is some good reason for such behavior I would like to suggest 
> > wrapping all the "raw"  linux system calls used by SPDK .
> > 
> > This way SPDK will be more flexible in different systems integrations .
> 
> 
> SPDK very intentionally depends on the POSIX API for a large number of
> operations. We've chosen to go this direction because SPDK is intended to run
> as regular a user space application and we want developers to be able to use
> all of the regular tools available in that environment. We're concerned that
> not allowing the use of POSIX APIs makes it much more difficult for people to
> jump in and contribute to the code, and also that it would be quite difficult
> to enforce in practice. Note that this is also the choice that DPDK has made.
> 
> We have taken some steps to support more exotic environments though. First,
> all POSIX include files are only included via include/spdk/stdinc.h, and we
> actually have tests to verify that this is the case. If you have a non-POSIX
> environment, you can swap out that header to include other implementations and
> map them to the POSIX calls we make.
> 
> SPDK also requires a number of operations that are outside of the purview of
> POSIX. These are all encapsulated by include/spdk/env.h. The implementation of
> that header is in lib/env_dpdk, and by default uses DPDK to implement all of
> those operations. However, this portion is designed to be swapped out. You can
> point SPDK at a different implementation of include/spdk/env.h through the
> configuration script:
> 
> ./configure --with-env=/path/to/your/lib.a
> 
> We further have a number of abstractions coming for threading that aren't
> quite done yet. SPDK is designed around cooperative multi-tasking and many
> locations in the code need to be able to send messages to other threads.
> However, SPDK doesn't want to force users into a particular green
> thread/cooperative multitasking/futures+promises framework. We're currently
> designing abstractions for "light weight" threads (without an associated
> implementation) that users should be able to map trivially to their particular
> framework.
> 
> I hope that helps clear things up. It's all about making SPDK as flexible as
> possible for as many people as we can, but also making the "simple" case as
> easy to program and use as possible.
> 
> Thanks,
> Ben
> _______________________________________________
> SPDK mailing list
> SPDK(a)lists.01.org
> https://lists.01.org/mailman/listinfo/spdk
> _______________________________________________
> SPDK mailing list
> SPDK(a)lists.01.org
> https://lists.01.org/mailman/listinfo/spdk

             reply	other threads:[~2018-07-12 17:46 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-12 17:46 Walker, Benjamin [this message]
  -- strict thread matches above, loose matches on Subject: below --
2018-07-12 17:43 [SPDK] OS memory allocation Luse, Paul E
2018-07-12 17:41 Walker, Benjamin
2018-07-12  7:10 Ravich, Leonid

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=efd08c159aa6c522c9e9bb17d99e8672029b2804.camel@intel.com \
    --to=spdk@lists.01.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox