Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Test merge from release/2.4 [DO NOT MERGE] #14355

Closed
wants to merge 50 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
50 commits
Select commit Hold shift + click to select a range
6d0abbc
DAOSGCP-213 dfuse: Ignore ENOENT errors when mounting to a file descr…
chowes Aug 15, 2023
cdf7e80
DAOS-10942 utils: Ignore unsupported bits when modifying permissions
chowes Aug 15, 2023
d15d4d0
DAOS-13194 gurt: environment APIs hook (#12220)
bfaccini Jul 13, 2023
4e42e39
Use getpass instead of os.getlogin for log files
chowes Sep 12, 2023
f5435a1
Add chmod to daos utility
chowes Nov 21, 2023
fe46851
b/308835681 control: Support metadata outside of tmpfs
mjmac Dec 11, 2023
e888c01
DAOS-14484 cart: Implement per-context inflight queue (#13202)
frostedcmos Jan 4, 2024
2da9ecb
b/316146524 cart: Add RPC metrics
mjmac Dec 13, 2023
0a6fd8e
b/317352547 pool: Increase DAOS_MD_CAP default to 1GiB
mjmac Dec 21, 2023
8b7eb8a
DAOS-623 build: daos_metrics is in server rpm
jolivier23 Jan 10, 2024
9d0a841
DAOS-14532 gurt: Replace environment APIs hook (#13483)
knard-intel Jan 8, 2024
b9faf1c
DAOS-14896 gurt: Fix d_getenv with negative int
kanard38 Jan 10, 2024
61d483b
DAOS-14532 gurt: Replace environment APIs hook
kanard38 Oct 28, 2023
b6bd623
Add a configuration check for libarchive
jolivier23 Jan 16, 2024
588e972
DAOS-14364 dfuse: Enable faster reading from data cache with dfuse. (…
ashleypittman Nov 21, 2023
7850bc8
DAOS-14639 dfuse: Do not allow security. xattr to be set. (#13333)
ashleypittman Nov 21, 2023
c268250
DAOS-14981 gurt: restore d_getenv_int undefined symbol (#13622)
knard-intel Jan 19, 2024
5c7e312
adjustments so ftests can run on gcp
mlawsonca Jan 24, 2024
3108ce9
nlt: use getpass instead of os.getlogin
chowes Jan 31, 2024
e723a40
DAOS-15136 build: Add STATIC_FUSE option
jolivier23 Feb 5, 2024
0a94098
Change default to STATIC_FUSE=1
jolivier23 Feb 6, 2024
654af60
DAOS-14010 object: various fixes for migration (#13448)
Dec 11, 2023
2360d90
DAOS-14739 cart: Add SWIM stats for delay/glitches (#13587)
mjmac Feb 9, 2024
613a907
DAOS-14352 object: recover migrate with correct epoch (#13547)
Jan 5, 2024
2c77ae6
DAOS-14598 object: correct epoch for parity migration (#13453)
Jan 10, 2024
7e04072
DAOS-14448 pool: Fix ds_pool_query_handler check (#13118)
liw Oct 16, 2023
f401a0f
DAOS-14448 container: Fix fail_loc in CONTAINER (#13195)
liw Oct 27, 2023
1b4c72c
DAOS-623 doc: Fix some doxygen formatting issues. (#12980)
ashleypittman Oct 16, 2023
18d939f
DAOS-14353 object: check permission before retry (#13451)
Dec 13, 2023
06909a1
DAOS-14010 rebuild: add delay rebuild (#13357)
Feb 26, 2024
8db4976
DAOS-14010 placement: refine for delay rebuild (#13879)
Mar 1, 2024
43f0aa9
b/328273417 build: Update grpc and x/net deps
mjmac Mar 5, 2024
d5bf0bb
DAOS-15063 dfs: chown of root when daos set-owner is called on contai…
mchaarawi Feb 18, 2024
f6b0ae6
b/328753201 test: Switch NLT to TCP provider
mjmac Mar 8, 2024
1936732
DAOS-15412 ioil: add support for SEEK_END
johannlombardi Mar 11, 2024
004ae9c
Add wrapper to changeId hook so we abort on empty message
jolivier23 Mar 8, 2024
22d72fb
DAOS-14845 object: retry migration for retriable failure (#13590)
Mar 15, 2024
95b2bd7
DAOS-623 build: daos_metrics not built
jolivier23 Mar 18, 2024
e6b0a85
DAOS-15484 dfs: store sticky/suid/sgid bits on setattr (#14028)
johannlombardi Mar 25, 2024
a6bac14
b/334920724 - Fix google/2.4 pylint issues (#14162)
jolivier23 Apr 17, 2024
7da45c7
b/334917514 - Add daos fs chown (#14184)
juszhan1 Apr 18, 2024
dfd7211
DAOS-14261 engine: Add dss_chore for I/O forwarding (#13372) (#14158)
jolivier23 Apr 19, 2024
98c953a
DAOS-15563 engine: Fix dss_chore use-after-free (#14096) (#14196)
jolivier23 Apr 19, 2024
2d68c65
DAOS-14850 control: Allow logging.Logger in Context (#13569) (#14210)
mjmac Apr 24, 2024
5a027b1
DAOS-8331 client: Add client side metrics (#14030) (#14204)
mjmac Apr 29, 2024
78d68ff
DAOS-14411 dfuse: Add daos fs query (#14261)
jolivier23 Apr 29, 2024
ca43ed2
DAOS-15753 dfuse: Do not deadlock when failing to mount. (#14252) (#1…
jolivier23 Apr 30, 2024
6ab0729
DAOS-13151 client: cache and reuse the attach info for the default sy…
mjmac May 6, 2024
d438ace
DAOS-623 ci: Fix bug to disable hw tests (#14328)
jolivier23 May 8, 2024
f16a7dd
DAOS-15739 engine: Add single-engine, multi-socket support (#14311)
jolivier23 May 8, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
62 changes: 31 additions & 31 deletions .github/CODEOWNERS
Validating CODEOWNERS rules …
Original file line number Diff line number Diff line change
Expand Up @@ -2,58 +2,58 @@
# a component sha1 to ensure that corresponding package build is done
#utils/build.config @daos-stack/release-engineering
# or updates packaging in any way
utils/rpms @daos-stack/build-and-release-watchers
#utils/rpms @daos-stack/build-and-release-watchers

src/gurt @daos-stack/common-watchers
src/common @daos-stack/common-watchers
#src/gurt @daos-stack/common-watchers
#src/common @daos-stack/common-watchers

# any PR that touches Go files should get a review from go-owners
*.go @daos-stack/go-owners @daos-stack/go-watchers
#*.go @daos-stack/go-owners @daos-stack/go-watchers

# Notify vos-watcher of files touched affecting VOS
src/vos/ @daos-stack/vos-owners @daos-stack/vos-watchers
src/common/btree*.* @daos-stack/vos-owners @daos-stack/vos-watchers
src/include/daos/btree*.* @daos-stack/vos-owners @daos-stack/vos-watchers
src/include/daos_srv/vos*.* @daos-stack/vos-owners @daos-stack/vos-watchers
src/include/daos_srv/evtree.h @daos-stack/vos-owners @daos-stack/vos-watchers
#src/vos/ @daos-stack/vos-owners @daos-stack/vos-watchers
#src/common/btree*.* @daos-stack/vos-owners @daos-stack/vos-watchers
#src/include/daos/btree*.* @daos-stack/vos-owners @daos-stack/vos-watchers
#src/include/daos_srv/vos*.* @daos-stack/vos-owners @daos-stack/vos-watchers
#src/include/daos_srv/evtree.h @daos-stack/vos-owners @daos-stack/vos-watchers

# Jenkinsfile changes should be reviewed by Release Engineering
Jenkinsfile @daos-stack/build-and-release-watchers
#Jenkinsfile @daos-stack/build-and-release-watchers

# any PR that touches client API or high level client code
src/client @daos-stack/client-api-owners @daos-stack/client-api-watchers
src/include/daos_*.* @daos-stack/client-api-owners @daos-stack/client-api-watchers
#src/client @daos-stack/client-api-owners @daos-stack/client-api-watchers
#src/include/daos_*.* @daos-stack/client-api-owners @daos-stack/client-api-watchers

# doc-watchers: files affecting documentation (docs, doxygen, etc.)
mkdocs.yml @daos-stack/doc-watchers
Doxyfile @daos-stack/doc-watchers
docs/ @daos-stack/doc-watchers
#mkdocs.yml @daos-stack/doc-watchers
#Doxyfile @daos-stack/doc-watchers
#docs/ @daos-stack/doc-watchers
#src/include/*.h @daos-stack/doc-watchers
*.md @daos-stack/doc-watchers
#*.md @daos-stack/doc-watchers

# dev-build-watchers: Files affecting local builds (e.g. SCons)
SConstruct @daos-stack/dev-build-owners @daos-stack/dev-build-watchers
SConscript @daos-stack/dev-build-owners @daos-stack/dev-build-watchers
site_scons/ @daos-stack/dev-build-owners @daos-stack/dev-build-watchers
utils/sl @daos-stack/dev-build-owners @daos-stack/dev-build-watchers
#SConstruct @daos-stack/dev-build-owners @daos-stack/dev-build-watchers
#SConscript @daos-stack/dev-build-owners @daos-stack/dev-build-watchers
#site_scons/ @daos-stack/dev-build-owners @daos-stack/dev-build-watchers
#utils/sl @daos-stack/dev-build-owners @daos-stack/dev-build-watchers

# ftest-watchers: files affecting functional tests
src/tests/ftest @daos-stack/ftest-owners @daos-stack/ftest-watchers
#src/tests/ftest @daos-stack/ftest-owners @daos-stack/ftest-watchers

# telem-watchers: Changes related to the telemetry library
src/utils/daos_metrics @daos-stack/telem-watchers
src/gurt/telemetry.c @daos-stack/telem-watchers
#src/utils/daos_metrics @daos-stack/telem-watchers
#src/gurt/telemetry.c @daos-stack/telem-watchers

# PRs that touch the object layer
src/object/ @daos-stack/object-owners @daos-stack/object-watchers
src/rebuild/ @daos-stack/object-owners @daos-stack/object-watchers
src/dtx/ @daos-stack/object-owners @daos-stack/object-watchers
#src/object/ @daos-stack/object-owners @daos-stack/object-watchers
#src/rebuild/ @daos-stack/object-owners @daos-stack/object-watchers
#src/dtx/ @daos-stack/object-owners @daos-stack/object-watchers

# PRs that touch the CaRT layer
src/cart/ @daos-stack/cart-owners @daos-stack/cart-watchers
#src/cart/ @daos-stack/cart-owners @daos-stack/cart-watchers

# PRs that touch the metadata
src/pool/ @daos-stack/metadata-owners @daos-stack/metadata-watchers
src/container/ @daos-stack/metadata-owners @daos-stack/metadata-watchers
src/rdb/ @daos-stack/metadata-owners @daos-stack/metadata-watchers
src/rsvc/ @daos-stack/metadata-owners @daos-stack/metadata-watchers
#src/pool/ @daos-stack/metadata-owners @daos-stack/metadata-watchers
#src/container/ @daos-stack/metadata-owners @daos-stack/metadata-watchers
#src/rdb/ @daos-stack/metadata-owners @daos-stack/metadata-watchers
#src/rsvc/ @daos-stack/metadata-owners @daos-stack/metadata-watchers
12 changes: 6 additions & 6 deletions Jenkinsfile
Original file line number Diff line number Diff line change
Expand Up @@ -289,16 +289,16 @@ pipeline {
description: 'Run the Functional on Ubuntu 20.04 test stage' +
' Requires CI_MORE_FUNCTIONAL_PR_TESTS')
booleanParam(name: 'CI_medium_TEST',
defaultValue: true,
defaultValue: false,
description: 'Run the Functional Hardware Medium test stage')
booleanParam(name: 'CI_medium-verbs-provider_TEST',
defaultValue: true,
booleanParam(name: 'CI_medium_verbs_provider_TEST',
defaultValue: false,
description: 'Run the Functional Hardware Medium Verbs Provider test stage')
booleanParam(name: 'CI_medium-ucx-provider_TEST',
defaultValue: true,
booleanParam(name: 'CI_medium_ucx_provider_TEST',
defaultValue: false,
description: 'Run the Functional Hardware Medium UCX Provider test stage')
booleanParam(name: 'CI_large_TEST',
defaultValue: true,
defaultValue: false,
description: 'Run the Functional Hardware Large test stage')
string(name: 'CI_UNIT_VM1_LABEL',
defaultValue: 'ci_vm1',
Expand Down
2 changes: 2 additions & 0 deletions SConstruct
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,8 @@ def parse_and_save_conf(env, opts_file):
opts.Add(EnumVariable('SCONS_ENV', "Default SCons environment inheritance",
'minimal', ['minimal', 'full'], ignorecase=2))

opts.Add(BoolVariable('STATIC_FUSE', "Build with static libfuse library", 1))

opts.Add('GO_BIN', 'Full path to go binary', None)

opts.Add(PathVariable('ENV_SCRIPT', "Location of environment script",
Expand Down
4 changes: 2 additions & 2 deletions debian/rules
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ endif
SCONS = scons -j $(NUMJOBS)
DEB_SCONS_OPTIONS := --config=force --no-rpath USE_INSTALLED=all \
CONF_DIR=$(sysconfdir)/daos PREFIX=$(prefix) \
$(SCONS_ARGS)
$(SCONS_ARGS) STATIC_FUSE=0

export GOCACHE := $(CURDIR)/.gocache

Expand All @@ -34,7 +34,7 @@ override_dh_auto_build:

override_dh_auto_clean:
echo $(DEB_BUILD_OPTIONS)
$(SCONS) --clean
$(SCONS) --clean STATIC_FUSE=0
rm -rf build install
find . -name '*.pyc' -delete
rm -rf _build.external-Linux
Expand Down
6 changes: 6 additions & 0 deletions docs/admin/deployment.md
Original file line number Diff line number Diff line change
Expand Up @@ -1377,6 +1377,12 @@ per four target threads, for example `targets: 16` and `nr_xs_helpers: 4`.
The server should have sufficiently many physical cores to support the
number of targets plus the additional service threads.

The 'targets:' and 'nr_xs_helpers:' requirement are mandatory, if the number
of physical cores are not enough it will fail the starting of the daos engine
(notes that 2 cores reserved for system service), or configures with ENV
"DAOS_TARGET_OVERSUBSCRIBE=1" to force starting daos engine (possibly hurts
performance as multiple XS compete on same core).


## Storage Formatting

Expand Down
1 change: 1 addition & 0 deletions docs/admin/env_variables.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ Environment variables in this section only apply to the server side.
|DAOS\_DTX\_AGG\_THD\_AGE|DTX aggregation age threshold in seconds. The valid range is [210, 1830]. The default value is 630.|
|DAOS\_DTX\_RPC\_HELPER\_THD|DTX RPC helper threshold. The valid range is [18, unlimited). The default value is 513.|
|DAOS\_DTX\_BATCHED\_ULT\_MAX|The max count of DTX batched commit ULTs. The valid range is [0, unlimited). 0 means to commit DTX synchronously. The default value is 32.|
|DAOS\_FORWARD\_NEIGHBOR|Set to enable I/O forwarding on neighbor xstream in the absence of helper threads.|

## Server and Client environment variables

Expand Down
69 changes: 39 additions & 30 deletions docs/user/filesystem.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,39 +48,24 @@ The DFS API closely represents the POSIX API. The API includes operations to:

POSIX support in DAOS comes with the following limitations:

* Hard links are currently not supported.
* Flock operations are not supported (maybe at dfuse local node level only).
* mmap support with MAP\_SHARED will be consistent from single client only and only when data
caching is enabled. Note that this is supported through DFUSE only (i.e. not through the DFS API).
The dfuse-data-cache=otoc container attribute allows this without enabling other caching.
* Char devices, block devices, sockets and pipes are not supported.
* User/group quotas are not supported.
* Access time (atime) is always the greater between the change and modify time.
* Block size in stat buf is not accurate (no account for holes, extended attributes).
* Various parameters reported via statfs like number of blocks, files, free/available space are not
accurate.
* O\_APPEND mode for files is not supported. When O\_APPEND is used on file open with dfuse, the
file open will not return an unsupported error and will be consistent only on the local node
(dfuse instance) where this operation was executed. This means if O\_APPEND is used over dfuse
with multiple dfuse instances, the appends to the file are not consistent and may corrupt the
file.
* The sticky bit, POSIX ACLs, and supplementary groups are not supported.
* Hard links
* mmap support with MAP\_SHARED will be consistent from single client only. Note
that this is supported through DFUSE only (i.e. not through the DFS API).
* Char devices, block devices, sockets and pipes
* User/group quotas
* [access/change/modify] time not updated appropriately, potentially on close only.
* Flock (maybe at dfuse local node level only)
* Block size in stat buf is not accurate (no account for holes, extended attributes)
* Various parameters reported via statfs like number of blocks, files,
free/available space
* O\_APPEND is not supported
* POSIX permissions, sticky bit, POSIX ACLs, supplementary groups are not supported inside an
encapsulated namespace
* Still enforced at the DAOS pool/container level via DAOS ACL
* Effectively means that all files belong to the same "project"
* While set\_uid/gid bits are stored by libdfs on setattr and returned on getattr, it is up to
the caller (e.g. fuse in the case of dfuse) to implement support for setuid/gid binaries since
libdfs does not provide any interface to execute binaries.
* POSIX permissions are only stored and enforced at the DFS level and provided for convenience
purposes. Security of access to the DFS container should be properly set at the DAOS pool and/or
container level using DAOS ACLs. This means that a user should not rely on those POSIX permissions
for securing access to their data since it can be bypassed by the DAOS lower level API if the user
has ACL access to the container.
* Open-unlink semantics: This occurs when a client obtains an open handle on an object (file or
directory), and accesses that object (reads/writes data or create other files), while another
client removes that object that the other client has opened from under it. In DAOS, we don't track
object open handles as that would be very expensive, and so in such conflicting cases, the worst
case scenario is the lost/leaked space that is written to those orphan objects that have been
unlinked from the namespace. DAOS implements a file system checker that can be used to either
relink those orphaned objects back in a lost+found directory or remove them from the container to
reclaim the space.

!!! note
DFS directories do not include the `.` (current directory) and `..` (parent directory)
Expand Down Expand Up @@ -711,6 +696,30 @@ These are two command line options to control the DFuse process itself.

These will affect all containers accessed via DFuse, regardless of any container attributes.

### Managing memory usage and disconnecting from containers

DFuse can be instructed to evict paths from local memory which drops any open handles on containers
or pools as well as reducing the working set size and memory consumption. This is an asynchronous
operation and there is no automatic way to tell if it's completed. In addition, any lookup of the
path specified in the eviction call will cause a new lookup and prevent the eviction from
completing.

Paths can be requested for eviction from dfuse using the `daos filesystem evict` command. This does
not change any data that is stored in DAOS in any way but rather releases local resources. This
command will return the inode number of the path as well as key dfuse metrics.

DFuse metrics can be queried with the `daos filesystem query` command which takes an optional
`--inode` parameter. This will return information on the number of inodes held in memory, the
number of open files as well as the number of pools and containers that DFuse is connected to. If
the `--inode` option is given then this command will also report if the inode is in memory or not.

Together these two commands can be used to request eviction of a path and to poll for its release,
although lookups from other processes might block the eviction process.

If `daos filesystem evict` is passed the root of the DFuse mount then the path itself cannot be
evicted - in this case all top-level entries in the directory are evicted instead and no inode
number is returned.

### Permissions

DFuse can serve data from any user's container, but needs appropriate permissions in order to do
Expand Down
13 changes: 12 additions & 1 deletion site_scons/components/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -225,6 +225,8 @@ def define_common(reqs):

reqs.define('hwloc', libs=['hwloc'], headers=['hwloc.h'], package='hwloc-devel')

reqs.define('archive', libs=['archive'], headers=['archive.h'], package='libarchive-devel')

if ARM_PLATFORM:
reqs.define('ipmctl', skip_arch=True)
else:
Expand Down Expand Up @@ -297,7 +299,16 @@ def define_components(reqs):
headers=['abt.h'])

reqs.define('fuse', libs=['fuse3'], defines=['FUSE_USE_VERSION=35'],
headers=['fuse3/fuse.h'], package='fuse3-devel')
retriever=GitRepoRetriever('https://github.com/libfuse/libfuse.git'),
commands=[['meson', 'setup', '../fuse'],
['meson', 'configure', '--prefix=$FUSE_PREFIX', '-Ddisable-mtab=True',
'-Dudevrulesdir=$FUSE_PREFIX/udev', '-Dutils=False',
'--default-library', 'both'],
['ninja', '-v'],
['ninja', 'install']],
headers=['fuse3/fuse.h'],
required_progs=['libtoolize', 'ninja'],
out_of_src_build=True)

# Tell SPDK which CPU to optimize for, by default this is native which works well unless you
# are relocating binaries across systems, for example in CI under GitHub actions etc. There
Expand Down
16 changes: 8 additions & 8 deletions src/bio/bio_config.c
Original file line number Diff line number Diff line change
Expand Up @@ -639,9 +639,9 @@ check_vmd_status(struct json_config_ctx *ctx, struct spdk_json_val *vmd_ss, bool
* Set allowed bdev PCI addresses in provided SPDK environment options based on attach bdev RPCs
* in the JSON config file.
*
* \param[IN] nvme_conf JSON config file path
* \param[OUT] opts SPDK environment options
* \param[OUT] roles global nvme bdev roles
* \param[in] nvme_conf JSON config file path
* \param[out] opts SPDK environment options
* \param[out] roles global nvme bdev roles
*
* \returns Zero on success, negative on failure (DER)
*/
Expand Down Expand Up @@ -833,7 +833,7 @@ hotplug_filter_fn(const struct spdk_pci_addr *addr)
/**
* Set hotplug bus-ID ranges in SPDK filter based on values read from JSON config file.
*
* \param[IN] nvme_conf JSON config file path
* \param[in] nvme_conf JSON config file path
*
* \returns Zero on success, negative on failure (DER)
*/
Expand All @@ -854,7 +854,7 @@ bio_set_hotplug_filter(const char *nvme_conf)
/**
* Read optional acceleration properties from JSON config file.
*
* \param[IN] nvme_conf JSON config file path
* \param[in] nvme_conf JSON config file path
*
* \returns Zero on success, negative on failure (DER)
*/
Expand Down Expand Up @@ -894,9 +894,9 @@ bio_read_accel_props(const char *nvme_conf)
/**
* Set output parameters based on JSON config settings for option SPDK JSON-RPC server.
*
* \param[IN] nvme_conf JSON config file path
* \param[OUT] enable Flag to enable the RPC server
* \param[OUT] sock_addr Path in which to create socket file
* \param[in] nvme_conf JSON config file path
* \param[out] enable Flag to enable the RPC server
* \param[out] sock_addr Path in which to create socket file
*
* \returns Zero on success, negative on failure (DER)
*/
Expand Down
15 changes: 8 additions & 7 deletions src/bio/bio_xstream.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/**
* (C) Copyright 2018-2023 Intel Corporation.
* (C) Copyright 2018-2024 Intel Corporation.
*
* SPDX-License-Identifier: BSD-2-Clause-Patent
*/
Expand Down Expand Up @@ -192,8 +192,8 @@ set_faulty_criteria(void)
glb_criteria.fc_max_csum_errs = UINT32_MAX;

d_getenv_bool("DAOS_NVME_AUTO_FAULTY_ENABLED", &glb_criteria.fc_enabled);
d_getenv_int("DAOS_NVME_AUTO_FAULTY_IO", &glb_criteria.fc_max_io_errs);
d_getenv_int("DAOS_NVME_AUTO_FAULTY_CSUM", &glb_criteria.fc_max_csum_errs);
d_getenv_uint32_t("DAOS_NVME_AUTO_FAULTY_IO", &glb_criteria.fc_max_io_errs);
d_getenv_uint32_t("DAOS_NVME_AUTO_FAULTY_CSUM", &glb_criteria.fc_max_csum_errs);

D_INFO("NVMe auto faulty is %s. Criteria: max_io_errs:%u, max_csum_errs:%u\n",
glb_criteria.fc_enabled ? "enabled" : "disabled",
Expand Down Expand Up @@ -245,15 +245,15 @@ bio_nvme_init(const char *nvme_conf, int numa_node, unsigned int mem_size,
d_getenv_bool("DAOS_SCM_RDMA_ENABLED", &bio_scm_rdma);
D_INFO("RDMA to SCM is %s\n", bio_scm_rdma ? "enabled" : "disabled");

d_getenv_int("DAOS_SPDK_SUBSYS_TIMEOUT", &bio_spdk_subsys_timeout);
d_getenv_uint("DAOS_SPDK_SUBSYS_TIMEOUT", &bio_spdk_subsys_timeout);
D_INFO("SPDK subsystem fini timeout is %u ms\n", bio_spdk_subsys_timeout);

d_getenv_int("DAOS_SPDK_MAX_UNMAP_CNT", &bio_spdk_max_unmap_cnt);
d_getenv_uint("DAOS_SPDK_MAX_UNMAP_CNT", &bio_spdk_max_unmap_cnt);
if (bio_spdk_max_unmap_cnt == 0)
bio_spdk_max_unmap_cnt = UINT32_MAX;
D_INFO("SPDK batch blob unmap call count is %u\n", bio_spdk_max_unmap_cnt);

d_getenv_int("DAOS_MAX_ASYNC_SZ", &bio_max_async_sz);
d_getenv_uint("DAOS_MAX_ASYNC_SZ", &bio_max_async_sz);
D_INFO("Max async data size is set to %u bytes\n", bio_max_async_sz);

/* Hugepages disabled */
Expand Down Expand Up @@ -287,11 +287,12 @@ bio_nvme_init(const char *nvme_conf, int numa_node, unsigned int mem_size,
nvme_glb.bd_bs_opts.cluster_sz = DAOS_BS_CLUSTER_SZ;
nvme_glb.bd_bs_opts.max_channel_ops = BIO_BS_MAX_CHANNEL_OPS;

env = getenv("VOS_BDEV_CLASS");
d_agetenv_str(&env, "VOS_BDEV_CLASS");
if (env && strcasecmp(env, "AIO") == 0) {
D_WARN("AIO device(s) will be used!\n");
nvme_glb.bd_bdev_class = BDEV_CLASS_AIO;
}
d_freeenv_str(&env);

if (numa_node > 0) {
bio_numa_node = (unsigned int)numa_node;
Expand Down
Loading
Loading