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:41:06 +0000 [thread overview]
Message-ID: <e4d5e80199efa920a066f1d860a01d1179684260.camel@intel.com> (raw)
In-Reply-To: 7B8F29A0FFD5CC41B50CD1DC0E1DA24528F93EBF@MX206CL02.corp.emc.com
[-- Attachment #1: Type: text/plain, Size: 2573 bytes --]
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
next reply other threads:[~2018-07-12 17:41 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-07-12 17:41 Walker, Benjamin [this message]
-- strict thread matches above, loose matches on Subject: below --
2018-07-12 17:46 [SPDK] OS memory allocation Walker, Benjamin
2018-07-12 17:43 Luse, Paul E
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=e4d5e80199efa920a066f1d860a01d1179684260.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