Skip to content

Commit

Permalink
First version of multi-tenancy impl with only PFs
Browse files Browse the repository at this point in the history
  • Loading branch information
Peter-JanGootzen committed May 26, 2023
1 parent c9f2b8f commit ee7865b
Show file tree
Hide file tree
Showing 16 changed files with 549 additions and 400 deletions.
16 changes: 9 additions & 7 deletions conf_example.toml
Original file line number Diff line number Diff line change
@@ -1,19 +1,21 @@
[snap_hal]
# Time between every poll
polling_interval_usec = 0
# Physical function ID
pf_id = 0
# Virtual function ID
vf_id = -1
# Physical Function IDs
# When multiple PFs are supplied, multiple virtio-fs devices will be created
# The index of this array is the device_id supplied by the HAL to the backend
pf_id = [ 0 ]
# Emulation manager, DPU specific
emu_manager = "mlx5_0"
# Amount of Virtio requests queues, every queue is paired with a single thread for polling. 1 for single threaded mode, >1 for multithreaded mode
# Multithreaded not supported in snap_hal currently as the virtio-fs driver still only support a single Virtio queue.
nthreads = 1
# Must be a power of 2 and >= 1! The virtio-fs specification requires this
queue_depth = 64
# Filesystem tag (i.e. the name of the virtiofs device to mount for the host)
tag = "dpfs"
# int = n threads that each own pf_ids/int devices
# "dynamic" = dynamic threading ala https://spdk.io/doc/scheduler.html
nthreads = 1
# The number of Virtio requests, currently the driver and DPFS only support a single queue
#virtio_request_queues = 1

[rvfs_hal]
# Time between every poll
Expand Down
2 changes: 1 addition & 1 deletion dpfs_aio/fuser.c
Original file line number Diff line number Diff line change
Expand Up @@ -240,7 +240,7 @@ int fuser_main(bool debug, char *source, bool cached, const char *conf_path) {
pthread_t poll_thread;
pthread_create(&poll_thread, NULL, (void *(*)(void *))fuser_io_poll_thread, f);

dpfs_fuse_main(&ops, conf_path, f, debug);
dpfs_fuse_main(&ops, conf_path, f, NULL, NULL);

f->io_poll_thread_stop = true;
pthread_join(poll_thread, NULL);
Expand Down
53 changes: 27 additions & 26 deletions dpfs_aio/mirror_impl.c
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,8 @@ static void forget_one(struct fuser *f, fuse_ino_t ino, uint64_t n)

int fuser_mirror_init(struct fuse_session *se, void *user_data,
struct fuse_in_header *in_hdr, struct fuse_init_in *in_init,
struct fuse_conn_info *conn, struct fuse_out_header *out_hdr)
struct fuse_conn_info *conn, struct fuse_out_header *out_hdr,
uint16_t device_id)
{
struct fuser *f = user_data;

Expand Down Expand Up @@ -106,7 +107,7 @@ int fuser_mirror_init(struct fuse_session *se, void *user_data,
int fuser_mirror_getattr(struct fuse_session *se, void *user_data,
struct fuse_in_header *in_hdr, struct fuse_getattr_in *in_getattr,
struct fuse_out_header *out_hdr, struct fuse_attr_out *out_attr,
void *completion_context)
void *completion_context, uint16_t device_id)
{
(void) in_getattr;
struct fuser *f = user_data;
Expand Down Expand Up @@ -206,7 +207,7 @@ static int do_lookup(struct fuser *f, fuse_ino_t parent, const char *name,
int fuser_mirror_lookup(struct fuse_session *se, void *user_data,
struct fuse_in_header *in_hdr, const char *const in_name,
struct fuse_out_header *out_hdr, struct fuse_entry_out *out_entry,
void *completion_context)
void *completion_context, uint16_t device_id)
{
struct fuser *f = user_data;

Expand All @@ -230,7 +231,7 @@ int fuser_mirror_lookup(struct fuse_session *se, void *user_data,
int fuser_mirror_setattr(struct fuse_session *se, void *user_data,
struct fuse_in_header *in_hdr, struct stat *s, int valid, struct fuse_file_info *fi,
struct fuse_out_header *out_hdr, struct fuse_attr_out *out_attr,
void *completion_context)
void *completion_context, uint16_t device_id)
{
struct fuser *f = user_data;

Expand Down Expand Up @@ -313,7 +314,7 @@ int fuser_mirror_setattr(struct fuse_session *se, void *user_data,
int fuser_mirror_opendir(struct fuse_session *se, void *user_data,
struct fuse_in_header *in_hdr, struct fuse_open_in *in_open,
struct fuse_out_header *out_hdr, struct fuse_open_out *out_open,
void *completion_context)
void *completion_context, uint16_t device_id)
{
struct fuser *f = user_data;
struct inode *i = ino_to_inodeptr(f, in_hdr->nodeid);
Expand Down Expand Up @@ -365,7 +366,7 @@ int fuser_mirror_opendir(struct fuse_session *se, void *user_data,
int fuser_mirror_releasedir(struct fuse_session *se, void *user_data,
struct fuse_in_header *in_hdr, struct fuse_release_in *in_release,
struct fuse_out_header *out_hdr,
void *completion_context)
void *completion_context, uint16_t device_id)
{
struct directory *d = (struct directory *) in_release->fh;
directory_destroy(d);
Expand All @@ -380,7 +381,7 @@ static bool is_dot_or_dotdot(const char *name) {
int fuser_mirror_readdir(struct fuse_session *se, void *user_data,
struct fuse_in_header *in_hdr, struct fuse_read_in *in_read, bool plus,
struct fuse_out_header *out_hdr, struct iov read_iov,
void *completion_context)
void *completion_context, uint16_t device_id)
{
struct fuser *f = user_data;

Expand Down Expand Up @@ -474,7 +475,7 @@ int fuser_mirror_readdir(struct fuse_session *se, void *user_data,
int fuser_mirror_open(struct fuse_session *se, void *user_data,
struct fuse_in_header *in_hdr, struct fuse_open_in *in_open,
struct fuse_out_header *out_hdr, struct fuse_open_out *out_open,
void *completion_context)
void *completion_context, uint16_t device_id)
{
struct fuser *f = user_data;

Expand Down Expand Up @@ -529,7 +530,7 @@ int fuser_mirror_open(struct fuse_session *se, void *user_data,
int fuser_mirror_release(struct fuse_session *se, void *user_data,
struct fuse_in_header *in_hdr, struct fuse_release_in *in_release,
struct fuse_out_header *out_hdr,
void *completion_context)
void *completion_context, uint16_t device_id)
{
struct fuser *f = user_data;

Expand All @@ -551,7 +552,7 @@ int fuser_mirror_release(struct fuse_session *se, void *user_data,
int fuser_mirror_fsync(struct fuse_session *se, void *user_data,
struct fuse_in_header *in_hdr, struct fuse_fsync_in *in_fsync,
struct fuse_out_header *out_hdr,
void *completion_context)
void *completion_context, uint16_t device_id)
{
int ret;
if (in_fsync->fsync_flags & FUSE_FSYNC_FDATASYNC)
Expand All @@ -567,7 +568,7 @@ int fuser_mirror_fsync(struct fuse_session *se, void *user_data,
int fuser_mirror_fsyncdir(struct fuse_session *se, void *user_data,
struct fuse_in_header *in_hdr, struct fuse_fsync_in *in_fsync,
struct fuse_out_header *out_hdr,
void *completion_context)
void *completion_context, uint16_t device_id)
{
struct directory *d = (struct directory *) in_fsync->fh;
int fd = dirfd(d->dp);
Expand All @@ -586,7 +587,7 @@ int fuser_mirror_fsyncdir(struct fuse_session *se, void *user_data,
int fuser_mirror_create(struct fuse_session *se, void *user_data,
struct fuse_in_header *in_hdr, struct fuse_create_in in_create, const char *const in_name,
struct fuse_out_header *out_hdr, struct fuse_entry_out *out_entry, struct fuse_open_out *out_open,
void *completion_context)
void *completion_context, uint16_t device_id)
{
struct fuser *f = user_data;

Expand Down Expand Up @@ -630,7 +631,7 @@ int fuser_mirror_create(struct fuse_session *se, void *user_data,
int fuser_mirror_rmdir(struct fuse_session *se, void *user_data,
struct fuse_in_header *in_hdr, const char *const in_name,
struct fuse_out_header *out_hdr,
void *completion_context)
void *completion_context, uint16_t device_id)
{
struct fuser *f = user_data;

Expand All @@ -651,7 +652,7 @@ int fuser_mirror_rmdir(struct fuse_session *se, void *user_data,

int fuser_mirror_forget(struct fuse_session *se, void *user_data,
struct fuse_in_header *in_hdr, struct fuse_forget_in *in_forget,
void *completion_context)
void *completion_context, uint16_t device_id)
{
struct fuser *f = user_data;

Expand All @@ -662,7 +663,7 @@ int fuser_mirror_forget(struct fuse_session *se, void *user_data,
int fuser_mirror_batch_forget(struct fuse_session *se, void *user_data,
struct fuse_in_header *in_hdr, struct fuse_batch_forget_in *in_batch_forget,
struct fuse_forget_one *in_forget_one,
void *completion_context)
void *completion_context, uint16_t device_id)
{
struct fuser *f = user_data;

Expand All @@ -676,7 +677,7 @@ int fuser_mirror_rename(struct fuse_session *se, void *user_data,
struct fuse_in_header *in_hdr, const char *const in_name,
fuse_ino_t in_new_parentdir, const char *const in_new_name, uint32_t in_flags,
struct fuse_out_header *out_hdr,
void *completion_context)
void *completion_context, uint16_t device_id)
{
struct fuser *f = user_data;

Expand All @@ -698,7 +699,7 @@ int fuser_mirror_rename(struct fuse_session *se, void *user_data,
int fuser_mirror_read(struct fuse_session *se, void *user_data,
struct fuse_in_header *in_hdr, struct fuse_read_in *in_read,
struct fuse_out_header *out_hdr, struct iovec *out_iov, int out_iovcnt,
void *completion_context)
void *completion_context, uint16_t device_id)
{
struct fuser *f = user_data;

Expand Down Expand Up @@ -730,7 +731,7 @@ int fuser_mirror_write(struct fuse_session *se, void *user_data,
struct fuse_in_header *in_hdr, struct fuse_write_in *in_write,
struct iovec *in_iov, int in_iovcnt,
struct fuse_out_header *out_hdr, struct fuse_write_out *out_write,
void *completion_context)
void *completion_context, uint16_t device_id)
{
struct fuser *f = user_data;

Expand Down Expand Up @@ -793,7 +794,7 @@ static int make_something(struct fuser *f, fuse_ino_t parent,
int fuser_mirror_mknod(struct fuse_session *se, void *user_data,
struct fuse_in_header *in_hdr, struct fuse_mknod_in * in_mknod, const char *const in_name,
struct fuse_out_header *out_hdr, struct fuse_entry_out *out_entry,
void *completion_context)
void *completion_context, uint16_t device_id)
{
struct fuser *f = user_data;

Expand All @@ -810,7 +811,7 @@ int fuser_mirror_mknod(struct fuse_session *se, void *user_data,
int fuser_mirror_mkdir(struct fuse_session *se, void *user_data,
struct fuse_in_header *in_hdr, struct fuse_mkdir_in *in_mkdir, const char *const in_name,
struct fuse_out_header *out_hdr, struct fuse_entry_out *out_entry,
void *completion_context)
void *completion_context, uint16_t device_id)
{
struct fuser *f = user_data;

Expand All @@ -827,7 +828,7 @@ int fuser_mirror_mkdir(struct fuse_session *se, void *user_data,
int fuser_mirror_symlink(struct fuse_session *se, void *user_data,
struct fuse_in_header *in_hdr, const char *const in_name, const char *const in_link,
struct fuse_out_header *out_hdr, struct fuse_entry_out *out_entry,
void *completion_context)
void *completion_context, uint16_t device_id)
{
struct fuser *f = user_data;

Expand All @@ -844,7 +845,7 @@ int fuser_mirror_symlink(struct fuse_session *se, void *user_data,
int fuser_mirror_statfs(struct fuse_session *se, void *user_data,
struct fuse_in_header *in_hdr,
struct fuse_out_header *out_hdr, struct fuse_statfs_out *out_statfs,
void *completion_context)
void *completion_context, uint16_t device_id)
{
struct fuser *f = user_data;

Expand All @@ -861,7 +862,7 @@ int fuser_mirror_statfs(struct fuse_session *se, void *user_data,
int fuser_mirror_unlink(struct fuse_session *se, void *user_data,
struct fuse_in_header *in_hdr, const char *const in_name,
struct fuse_out_header *out_hdr,
void *completion_context)
void *completion_context, uint16_t device_id)
{
struct fuser *f = user_data;

Expand Down Expand Up @@ -911,7 +912,7 @@ int fuser_mirror_unlink(struct fuse_session *se, void *user_data,
int fuser_mirror_flush(struct fuse_session *se, void *user_data,
struct fuse_in_header *in_hdr, struct fuse_file_info fi,
struct fuse_out_header *out_hdr,
void *completion_context)
void *completion_context, uint16_t device_id)
{
(void) in_hdr;

Expand All @@ -925,7 +926,7 @@ int fuser_mirror_flush(struct fuse_session *se, void *user_data,
int fuser_mirror_flock(struct fuse_session *se, void *user_data,
struct fuse_in_header *in_hdr, struct fuse_file_info fi, int op,
struct fuse_out_header *out_hdr,
void *completion_context)
void *completion_context, uint16_t device_id)
{
(void) in_hdr;

Expand All @@ -939,7 +940,7 @@ int fuser_mirror_flock(struct fuse_session *se, void *user_data,
int fuser_mirror_fallocate(struct fuse_session *se, void *user_data,
struct fuse_in_header *in_hdr, struct fuse_fallocate_in *in_fallocate,
struct fuse_out_header *out_hdr,
void *completion_context)
void *completion_context, uint16_t device_id)
{
int res = fallocate64(in_fallocate->fh, in_fallocate->mode, in_fallocate->offset, in_fallocate->length);

Expand Down
1 change: 1 addition & 0 deletions dpfs_aio/mirror_impl.h
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ enum fuser_rw_cb_op {
struct fuser_rw_cb_data {
enum fuser_rw_cb_op op;
void *completion_context;
uint16_t device_id;
struct fuse_in_header *in_hdr;
struct fuse_out_header *out_hdr;
union {
Expand Down
Loading

0 comments on commit ee7865b

Please sign in to comment.