Skip to content

Commit

Permalink
rpma: add support for libpmem2 to librpma engine in GPSPM mode
Browse files Browse the repository at this point in the history
Add support for libpmem2 to librpma fio engine in the GPSPM mode.

Signed-off-by: Kacper Stefanski <[email protected]>
  • Loading branch information
haichangsi authored and ldorau committed Sep 6, 2022
1 parent 8fabefc commit fb04caf
Showing 1 changed file with 17 additions and 2 deletions.
19 changes: 17 additions & 2 deletions engines/librpma_gpspm.c
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
* librpma_gpspm: IO engine that uses PMDK librpma to write data,
* based on General Purpose Server Persistency Method
*
* Copyright 2020-2021, Intel Corporation
* Copyright 2020-2022, Intel Corporation
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License,
Expand All @@ -16,7 +16,11 @@

#include "librpma_fio.h"

#ifdef CONFIG_LIBPMEM2_INSTALLED
#include <libpmem2.h>
#else
#include <libpmem.h>
#endif

/* Generated by the protocol buffer compiler from: librpma_gpspm_flush.proto */
#include "librpma_gpspm_flush.pb-c.h"
Expand Down Expand Up @@ -361,6 +365,8 @@ FIO_STATIC struct ioengine_ops ioengine_client = {

#define IO_U_BUFF_OFF_SERVER(i) (i * IO_U_BUF_LEN)

typedef void (*librpma_fio_persist_fn)(const void *ptr, size_t size);

struct server_data {
/* aligned td->orig_buffer */
char *orig_buffer_aligned;
Expand All @@ -373,6 +379,8 @@ struct server_data {
/* in-memory queues */
struct ibv_wc *msgs_queued;
uint32_t msg_queued_nr;

librpma_fio_persist_fn persist;
};

static int server_init(struct thread_data *td)
Expand Down Expand Up @@ -400,6 +408,13 @@ static int server_init(struct thread_data *td)
goto err_free_sd;
}

#ifdef CONFIG_LIBPMEM2_INSTALLED
/* get libpmem2 persist function from pmem2_map */
sd->persist = pmem2_get_persist_fn(csd->mem.map);
#else
sd->persist = pmem_persist;
#endif

/*
* Assure a single io_u buffer can store both SEND and RECV messages and
* an io_us buffer allocation is page-size-aligned which is required
Expand Down Expand Up @@ -594,7 +609,7 @@ static int server_qe_process(struct thread_data *td, struct ibv_wc *wc)

if (IS_NOT_THE_LAST_MESSAGE(flush_req)) {
op_ptr = csd->ws_ptr + flush_req->offset;
pmem_persist(op_ptr, flush_req->length);
sd->persist(op_ptr, flush_req->length);
} else {
/*
* This is the last message - the client is done.
Expand Down

0 comments on commit fb04caf

Please sign in to comment.