Home
last modified time | relevance | path

Searched refs:a (Results 1 – 25 of 131) sorted by relevance

123456

/spdk/doc/
H A Dtwo.min.js31a=document.body.getBoundingClientRect(),c=this.width=a.width,a=this.height=a.height;this.renderer.…
32a){return a},isArguments:function(a){return"[object Arguments]"===h.call(a)},isFunction:function(a argument
33a))},isNaN:function(a){return d.isNumber(a)&&a!==+a},isBoolean:function(a){return!0===a||!1===a||"… argument
34a},toArray:function(a){return a?d.isArray(a)?x.call(a):q(a)?d.map(a,d.identity):d.values(a):[]},ra… argument
35a.bind===f)return f.apply(a,x.call(arguments,1));var e=x.call(arguments,2);return function(){a.app… argument
36a),f=[],e=0;e<c.length;e++)f.push(a[c[e]]);return f},each:function(a,c,f){f=f||this;for(var e=!q(a argument
37a){var c=++d._indexAmount+"";return a?a+c:c}},e=Math.sin,a=Math.cos,g=Math.atan2,n=Math.sqrt,f=Mat… argument
38a.attachEvent("on"+c,f);return w},unbind:function(a,c,f,e){w.hasEventListeners?a.removeEventListen… argument
39a,function(a,c){"fullscreen"!==c&&"autostart"!==c&&(this[c]=a)},this);if(d.isElement(a.domElement)… argument
40 ….bind(l,"resize",a),a()):d.isElement(a.domElement)||(this.renderer.setSize(a.width,a.height,this.r…
[all …]
H A Dsma.md3 Storage Management Agent (SMA) is a service providing a gRPC interface for
4 orchestrating SPDK applications. It's a standalone application that allows
10 deployments on IPUs (Infrastructure Processing Unit), which usually require a
15 The interface is defined in a protobuf files located in `proto`
21 main types of objects: volumes and devices. A volume is a representation of
22 some storage media. It is equivalent to a SPDK bdev and/or an NVMe namespace
24 usually a virtual/physical PCIe function that is exposed to a host. It is
26 to a host.
28 The following sections provide a high-level description of each method. For
33 This method creates a device. If a device with given parameters already exists,
[all …]
H A Dbdev_pg.md10 A block device is a storage device that supports reading and writing data in
15 The block device layer consists of a single generic library in `lib/bdev`,
16 plus a number of optional modules (as separate libraries) that implement
20 API. For a guide to implementing a bdev module, see @ref bdev_module.
22 The bdev layer provides a number of useful features in addition to providing a
32 Users of the bdev API interact with a number of basic objects.
34 struct spdk_bdev, which this guide will refer to as a *bdev*, represents a
35 generic block device. struct spdk_bdev_desc, heretofore called a *descriptor*,
36 represents a handle to a given block device. Descriptors are used to establish
37 and track permissions to use the underlying block device, much like a file
[all …]
H A Dnvme_spec.md5 The NVMe specification describes a hardware interface for interacting with
7 remote storage as well as a hardware register layout for local PCIe devices.
8 What follows here is an overview of how an I/O is submitted to a local PCIe
12 queue pairs in host memory. The term "host" is used a lot, so to clarify that's
14 queues - a submission queue and a completion queue. These queues are more
21 An I/O is submitted to an NVMe device by constructing a 64 byte command, placing
24 submission queue tail doorbell register. It's actually valid to copy a whole set
28 There is a very detailed description of the command submission and completion
33 necessary, a location in host memory containing a descriptor for host memory
34 associated with the command. This host memory is the data to be written on a
[all …]
H A Dblob.md18 intended to serve as a design document or an API reference and in some cases source code snippets a…
23 Blobstore is a persistent, power-fail safe block allocator designed to be used as the local storage…
24 backing a higher level storage service, typically in lieu of a traditional filesystem. These higher…
26 distributed storage systems (ex. Ceph, Cassandra). It is not designed to be a general purpose files…
29 groups of blocks on a block device called 'blobs'. Blobs are typically large, measured in at least …
30 kilobytes, and are always a multiple of the underlying block size.
40 The Blobstore defines a hierarchy of storage abstractions as follows.
44 * **Page**: A page is defined to be a fixed number of logical blocks defined at Blobstore creation …
45 …blocks that compose a page are always contiguous. Pages are also numbered from the beginning of th…
49 * **Cluster**: A cluster is a fixed number of pages defined at Blobstore creation time. The pages t…
[all …]
H A Dbdev_module.md1 # Writing a Custom Block Device Module {#bdev_module}
6 device modules to integrate with SPDK's bdev layer. For a guide on how to use
11 A block device module is SPDK's equivalent of a device driver in a traditional
12 operating system. The module provides a set of function pointers that are
13 called to service block device I/O requests. SPDK provides a number of block
17 how to write a module.
22 currently possible to place the code for a bdev module elsewhere, but updates
23 to the build system could be made to enable this in the future. To create a
24 module, add a new directory with a single C file and a Makefile. A great
28 include/spdk/bdev_module.h. In that header a macro is defined that registers
[all …]
H A Dssd_internals.md6 up with better software designs. It should not be thought of as a strictly
10 [NAND Flash](https://en.wikipedia.org/wiki/Flash_memory) memory. At a
11 very high level, this media has a few important properties:
15 * Flipping a bit is a highly asymmetric process. Flipping it one way is
22 bit-granularity once. In order to write to the erase block a second time, the
24 0). This is the asymmetry part from above. Erasing a block causes a measurable
25 amount of wear and each block may only be erased a limited number of times.
28 drive is composed of a set of fixed size **logical blocks** which are usually
30 device firmware and they do not statically map to a location on the backing
31 media. Instead, upon each write to a logical block, a new location on the NAND
[all …]
H A Dconcurrency.md15 the heap, protecting it with a lock, and then having all threads of execution
21 version. You add a lock around the data.
22 * You can write your program as a synchronous, imperative list of statements
29 the complexity of the program. Even then, beyond a certain number of contended
33 SPDK takes a different approach altogether. Instead of placing shared data in a
34 global location that all threads access after acquiring a lock, SPDK will often
35 assign that data to a single thread. When other threads want to access the data,
36 they pass a message to the owning thread to perform the operation on their
41 in SPDK consists of a function pointer and a pointer to some context. Messages
42 are passed between threads using a
[all …]
H A Dnvmf_tgt_pg.md8 guide will not cover how to use the SPDK NVMe-oF target application. For a
24 The library exposes a number of primitives - basic objects that the user
31 throughout this guide as a **target**.
35 access control. This will be referred to throughout this guide as a
40 the SPDK bdev layer. This will be referred to throughout this guide as a
45 throughout this guide as a **qpair**.
47 `struct spdk_nvmf_transport`: An abstraction for a network fabric, as defined
49 different network fabrics, so the code mirrors that and implements a plugin
51 to throughout this guide as a **transport**.
53 `struct spdk_nvmf_poll_group`: An abstraction for a collection of network
[all …]
H A Dmemory.md21 done at a much more granular level than a full page.
37 memory to be describable by what is called a *PRP list*. To be described by a
41 * The first device page can be a partial page starting at any 4-byte aligned
44 * If there is more than one device page, the first device page must end on a
46 * The last device page begins on a physical 4KiB page boundary, but is not
47 required to end on a physical 4KiB page boundary.
55 User space drivers run in the context of a regular process and so have access
60 within a process. This file contains the virtual address to physical address
64 into whether a PCI device is directly transferring data to a set of physical
66 movement. When an operating system flags a page such that the virtual to
[all …]
H A Duserspace.md6 important to understand what that means at a technical level. First and
7 foremost, a _driver_ is software that directly controls a particular device
8 attached to a computer. Second, operating systems segregate the system's
18 In order for SPDK to take control of a device, it must first instruct the
21 [writing to a file in sysfs](https://lwn.net/Articles/143397/).
27 system that the device has a driver bound to it so it won't automatically try
33 which is a critical piece of hardware for ensuring memory safety in user space
42 implementations of most of the layers in a typical operating system storage
44 This includes a [block device abstraction layer](@ref bdev) primarily, but
59 are a number of reasons for doing this: 1) practically speaking, routing an
[all …]
H A Dvhost_processing.md22 > and guests should have a straightforward, efficient, standard and extensible
26 Virtio devices use virtqueues to transport data efficiently. Virtqueue is a set
29 where the QEMU itself exposes a virtual PCI device and the guest OS communicates
30 with it using a specific Virtio PCI driver. With only Virtio involved, it's
33 Vhost is a protocol for devices accessible via inter-process communication.
35 directly to Virtio devices. This allows a Vhost device, exposed by an SPDK
36 application, to be accessed directly by a guest OS inside a QEMU process with
41 The initial vhost implementation is a part of the Linux kernel and uses ioctl
43 SPDK to expose a vhost device is Vhost-user protocol.
50 > plane needed to establish virtqueue sharing with a user space process on the
[all …]
H A Dblobfs.md16 Clone the RocksDB repository from the SPDK GitHub fork into a separate directory.
31 Or you can also add `DEBUG_LEVEL=0` for a release build (need to turn on `USE_RTTI`).
68 SPDK has a set of scripts which will run `db_bench` against a variety of workloads and capture perf…
73 BlobFS provides a FUSE plug-in to mount an SPDK BlobFS as a kernel filesystem for inspection or deb…
84 …rily been tested with RocksDB so far, so any use cases different from how RocksDB uses a filesystem
85 …may run into issues. BlobFS will be tested in a broader range of use cases after this initial rel…
86 * Only a synchronous API is currently supported. An asynchronous API has been developed but not th…
87 yet so is not part of the public interface yet. This will be added in a future release.
88 * File renames are not atomic. This will be fixed in a future release.
89 * BlobFS currently supports only a flat namespace for files with no directory support. Filenames a…
[all …]
H A Dabout.md3 The Storage Performance Development Kit (SPDK) provides a set of tools and
5 applications. It achieves high performance through the use of a number of key
14 The bedrock of SPDK is a user space, polled-mode, asynchronous, lockless
16 parallel access directly to an SSD from a user space application. The driver is
17 written as a C library with a single public header. See @ref nvme for more
20 SPDK further provides a full block stack as a user space library that performs
21 many of the same operations as a block stack in an operating system. This
34 implementations. These targets can be used as examples of how to implement a
H A Doverview.md5 SPDK is composed of a set of C libraries residing in `lib` with public interface
6 header files in `include/spdk`, plus a set of applications built out of those
22 `include/spdk/stdinc.h`. However, SPDK requires a number of operations that
25 abstracted in a library called `env` whose public header is at
26 `include/spdk/env.h`. By default, SPDK implements the `env` interface using a
33 components. For a full overview, see @ref app_overview.
35 SPDK applications can typically be started with a small number of configuration
41 The `lib` directory contains the real heart of SPDK. Each component is a C library with
57 The `examples` top-level directory contains a set of examples intended to be used
58 for reference. These are different than the applications, which are doing a "real"
[all …]
H A Dftl.md20 Since the L2P would occupy a significant amount of DRAM (4B/LBA for drives smaller than 16TiB,
27 A band describes a collection of zones, each belonging to a different parallel unit. All writes to
28 a band follow the same pattern - a batch of logical blocks is written to one zone, another batch
53 The address map (`P2L`) is saved as a part of the band's metadata, at the end of each band:
63 Bands are written sequentially (in a way that was described earlier). Before a band can be written
64 to, all of its zones need to be erased. During that time, the band is considered to be in a `PREP`
73 Nvcache is a bdev that is used for buffering user writes and storing various metadata.
99 Since a write to the same LBA invalidates its previous physical location, some of the blocks on a
101 written block for a ZNS drive, this data will stay there until the whole zone is reset. This might …
103 can be executed anymore. Therefore a mechanism is needed to move valid data and invalidate whole
[all …]
H A Dlibraries.md3 The SPDK repository is, first and foremost, a collection of high-performance
7 (`lib` and `module`) inside of the SPDK repository in a deliberate way to prevent
25 libraries easier to implement. For example, `spdk_log` contains macro definitions that provide a
26 consistent logging paradigm and `spdk_json` is a general purpose JSON parsing library.
27 - Protocol Libraries: These libraries contain the building blocks for a specific service. For examp…
29 - Storage Service Libraries: These libraries provide a specific abstraction that can be mapped to s…
31 …provides a general block device abstraction layer, `spdk_lvol` provides a logical volume abstracti…
32 `spdk_blobfs` provides a filesystem abstraction, and `spdk_ftl` provides a flash translation layer
34 - System Libraries: These libraries provide system level services such as a JSON based RPC service
36 …is the `spdk_env_dpdk` library which provides a shim for the underlying Data Plane Development Kit…
[all …]
H A Dusdt.md11 bpftrace.sh is a helper script that facilitates running bpftrace scripts
12 against a running SPDK application. Here is a typical usage:
20 marker instead of a full path name, and bpftrace.sh will dynamically
25 written with a __PID__ marker, and bpftrace.sh will dynamically replace
56 nvmf_create_subsystem nqn.2016-06.io.spdk:cnode1 -a -s SPDK00000000000001 -m 10
57 nvmf_subsystem_add_listener nqn.2016-06.io.spdk:cnode1 -t tcp -a 127.0.0.1 -s 4420
63 This creates the nvmf tcp transport, a new nvmf subsystem that listens on a tcp
64 port, and a null bdev which is added as a namespace to the new nvmf subsystem.
113 it again with the send_msg.bt script. This script keeps a count of
121 From the third terminal, create another null bdev and add it as a
[all …]
/spdk/test/unit/lib/bdev/gpt/gpt.c/
H A Dgpt_ut.c17 unsigned char a[SPDK_GPT_BUFFER_SIZE]; in test_check_mbr() local
31 memset(a, 'a', sizeof(a)); in test_check_mbr()
32 gpt->buf = &a[0]; in test_check_mbr()
65 unsigned char a[SPDK_GPT_BUFFER_SIZE]; in test_read_header() local
75 memset(a, 'a', sizeof(a)); in test_read_header()
76 gpt->buf = &a[0]; in test_read_header()
77 gpt->buf_size = sizeof(a); in test_read_header()
133 unsigned char a[SPDK_GPT_BUFFER_SIZE]; in test_read_partitions() local
143 memset(a, 'a', sizeof(a)); in test_read_partitions()
144 gpt->buf = &a[0]; in test_read_partitions()
[all …]
/spdk/
H A DREADME.md8 NOTE: The SPDK mailing list has moved to a new location. Please visit
13 The Storage Performance Development Kit ([SPDK](http://www.spdk.io)) provides a set of tools
16 drivers into userspace and operating in a polled mode instead of relying on
44 <a id="documentation"></a>
48 well as a [Porting Guide](http://www.spdk.io/doc/porting.html) for porting SPDK to different framew…
51 <a id="source"></a>
60 <a id="prerequisites"></a>
72 <a id="libraries"></a>
92 <a id="tests"></a>
103 <a id="vagrant"></a>
[all …]
/spdk/test/app/fuzz/nvme_fuzz/
H A DREADME.md3 This application is intended to fuzz test the NVMe-oF target or a physical NVMe drive by
5 drives are configured through a .ini style config file (See the -C option on the application).
6 Multiple controllers and namespaces can be exposed to the fuzzer at a time. In order to
7 handle multiple namespaces, the fuzzer will round robin assign a thread to each namespace and
8 submit commands to that thread at a set queue depth. (currently 128 for I/O, 16 for Admin). The
13 3. The user specified a json file containing operations to run and the fuzzer has received valid co…
20 2. Are outstanding at the time of a controller timeout.
23 script for targeted debugging on a subsequent run. See `Debugging` below.
24 By default no output is generated when a specific command is returned with a failed status.
27 At the end of each test run, a summary is printed for each namespace in the following format:
[all …]
/spdk/test/common/config/pkgdep/patches/qat/
H A D0001-missing-prototypes.patch
/spdk/proto/
H A Dsma.proto58 // Parameters describing a volume
89 // Device handle that can uniquely identify a device within an instance of
126 // current limit value unchanged. If one of the limits isn't supported by a
147 // GUID/UUID of a volume to configure QoS on. If this parameter is omitted,
151 // (volume_id cannot be empty). This information can be obtained by sending a
163 // Type of a device to query for QoS capabilities
191 // Creates a new device. A device is an entity that can be used to expose
195 // Deletes a device. It is only allowed to delete a device with volumes still
201 // Attaches a volume to a specified device making it available through that
202 // device (e.g. for NVMeoF this results in adding a namespace to an NVMeoF
[all …]
/spdk/test/app/fuzz/iscsi_fuzz/
H A DREADME.md4 randomized PDU commands through a simulated iSCSI initiator.
8 1. iSCSI initiator send a login request PDU to iSCSI Target. Once a session is connected,
10 3. iSCSI initiator send a logout request PDU to iSCSI Target in the end.
21 2. Are outstanding at the time of a connection error occurs.
24 script for targeted debugging on a subsequent run.
26 At the end of each test run, a summary is printed in the following format:
/spdk/.github/ISSUE_TEMPLATE/
H A Dbug_report.md3 about: Create a report to help us improve. Please use the issue tracker only for reporting suspecte…
12 <!--- Provide a general summary of the issue in the Title above -->
24 <!--- Not obligatory, but suggest a fix/reason for the potential issue, -->
28 <!--- Provide a link to a live example, or an unambiguous set of steps to -->
37 <!--- Providing context helps us come up with a solution that is most useful in the real world -->

123456