RPMEMD(1)

πŸ“¦
version 1.12.1 Β· 3 versions
, in debian bookworm

πŸ‘‘ RPMEMD(1) β€” librpmem target node process (DEPRECATED)

okay bestie, welcome to the PMDK Programmer's Manual πŸ’– this one's all about rpmemd, and listen… she's a legend but she's also deprecated, so read the whole thing, k? no skipping πŸ’…


✨ NAME ✨

rpmemd β€” the librpmem target node process πŸ¦‹ (and yeah, she's DEPRECATED, we'll get there)


🌸 SYNOPSIS 🌸

$ rpmemd [--help] [--version] [<args>]

πŸ’« DESCRIPTION πŸ’«

So here's the tea πŸ«– β€” the rpmemd process gets executed on the target node by the librpmem(7) library, and it does that over ssh(1). Its whole job? Facilitating access to persistent memory over RDMA. Iconic behavior, truly.

🚨 lowkey important: rpmemd should NOT be run manually under normal conditions. Like, not me casually running it myself… no ma'am. πŸ™ˆ

πŸ’… OPTIONS πŸ’…

Command line options overwrite the default rpmemd configuration, the global configuration file, and the user configuration file. They said "my rules now" πŸ’β€β™€οΈ

  • -V, --version β€” Displays the rpmemd version and dips out. ✌️
  • -h, --help β€” Prints the synopsis plus the list of parameters, then exits. free info, bestie πŸŽ€
  • -c, --config <path> β€” Custom configuration file location. Heads up: if you pass a custom config file, the other ones are omitted entirely. See the CONFIGURATION FILES section for the deets. πŸ—‚οΈ
  • -r, --remove <poolset> β€” Removes a pool described by the given pool set file descriptor. It's interpreted as a path to the pool set file relative to the pool set directory. bye bye pool πŸ‘‹
  • -f, --force β€” Ignores errors when removing a pool file using the --remove option. chaos mode: enabled πŸ”₯

All options described in the CONFIGURATION FILES section are common for both the configuration file and the command line β€” the equivalent of this line in the config file:

option = value

is <em>this</em> on the command line:

--option value

And now the plot twist πŸŒ€ β€” these three command line options: --persist-apm, --persist-general and --use-syslog should NOT be followed by any value. Just their presence on the command line turns the appropriate option on. See the CONFIGURATION FILES section for details. periodt.


πŸ—‚οΈ CONFIGURATION FILES πŸ—‚οΈ

rpmemd searches for configuration files in this priority order:

  • The global configuration file, located in /etc/rpmemd/rpmemd.conf.
  • The user configuration file, located in the user home directory ($HOME/.rpmemd.conf).

rpmemd can also read configuration from a custom configuration file provided with the --config command line option. See the OPTIONS section for details. πŸ‘€

The default configuration is described in the DEFAULT CONFIGURATION section.

The configuration file is a plain text file. Each line can store only one configuration option, defined as a key=value pair. Empty lines and lines starting with # are omitted. πŸ’¬

The allowed options are:

  • log-file = <path> β€” log file location
  • poolset-dir = <path> β€” pool set files directory
  • persist-apm = {yes|no} β€” enable The Appliance Persistency Method. This option must be set only if the target platform has non-allocating writes IO enabled. See the PERSISTENCY METHODS section for details.
  • persist-general = {yes|no} β€” enable The General Purpose Server Persistency Method. See the PERSISTENCY METHODS section for details.
  • use-syslog = {yes|no} β€” use syslog(3) for logging messages instead of the log file
  • log-level = <level> β€” set the log level value. The accepted <level> values are:
    • err β€” error conditions 😭
    • warn β€” warning conditions ⚠️
    • notice β€” normal, but significant conditions πŸ“Œ
    • info β€” informational message ℹ️
    • debug β€” debug-level message πŸ”

Also! The $HOME sub-string inside the poolset-dir path gets replaced with the current user home directory. cute, right? 🏠


🌈 EXAMPLE 🌈

Example of the configuration file:

# This is an example of configuration file
log-file = $HOME/.logs/rpmemd.log
poolset-dir = $HOME/poolsets/
persist-apm = yes
persist-general = no
use-syslog = no # Use log file instead of syslog
log-level = info

πŸ‘‘ DEFAULT CONFIGURATION πŸ‘‘

The rpmemd default configuration is the equivalent of the following configuration file:

log-file = /var/log/rpmemd.log
poolset-dir = $HOME
persist-apm = no
persist-general = yes
use-syslog = yes
log-level = err

πŸ”₯ PERSISTENCY METHODS πŸ”₯

librpmem(7) supports two methods for making data written to remote persistent memory durable. The difference between them comes down to whether librpmem(7) will make use of non-allocating writes on the remote node. let's break it down bestie 🧚

  • The General Purpose Server Persistency Method does not have any requirements for the platform on which the target daemon runs, and can be enabled by the administrator using the persist-general option. This method utilizes libpmem(7) persistency mechanisms on the remote node and requires additional communication between the initiator and the remote node using the in-band connection.
  • The Appliance Persistency Method requires non-allocating writes enabled on the platform, and can be enabled by the administrator using the persist-apm option. This method requires issuing an RDMA READ operation after the RDMA WRITE operations performed on the requested chunk of memory.

β€œNon-allocating write requests” is the Intel Integrated IO Controller mode where all incoming PCIe writes will utilize non-allocating buffers for the write requests. Non-allocating writes are guaranteed to bypass all of the CPU caches and force the write requests to flow directly to the Integrated Memory Controller without delay. no cap, straight through πŸ’¨

rpmemd dynamically chooses the appropriate persistency method and the flushing-to-persistence primitive for GPSPM for each opened pool set name, depending on the available persistency methods and whether <em>all</em> pool set parts are stored in the persistent memory. it's giving adaptive ✨

  • If the Appliance Persistency Method is enabled and the pool set IS stored in the persistent memory, rpmemd will use the Appliance Persistency Method. If the pool set is NOT stored in the persistent memory, it will fallback to the General Purpose Server Persistency Method with pmem_msync(3).
  • If the General Purpose Server Persistency Method is enabled and the pool set IS stored in the persistent memory, rpmemd will use pmem_persist(3). If the pool set is NOT stored in the persistent memory, it will use pmem_msync(3).

See pmem_persist(3) and pmem_msync(3) for more details. πŸ“š


⚠️ NOTE ⚠️

The librpmem(7) library and rpmemd are deprecated since the PMDK 1.12 release. If you're interested in remote persistent memory support, please look at the new library rpma at <https://github.com/pmem/rpma>. πŸ’€ it's the end of an era, but we move 🫢

πŸ”— SEE ALSO πŸ”—

ssh(1), pmem_msync(3), pmem_persist(3), syslog(3), libpmem(7), libpmemobj(7), librpmem(7) and <https://pmem.io>


and that's the whole page, bestie!! πŸŽ€ this was rpmemd, PMDK - rpmemd version 1.4, dated 2022-08-25 β€” go forth and be iconic, ily, bye!! πŸ’–βœ¨πŸ¦‹

πŸ“¦ where this page comes from