computing-offload/qtfs/README.md
Yikun Jiang a68570b5d9 Add computing offloading code
1. Add computing offloading code
2. Add script.md
3. Add virsh_demo.xml

Change-Id: Id9ef883e2f0eb727eb5448b9d1c47767f46b1021
Signed-off-by: Yikun Jiang <yikunkero@gmail.com>
2023-10-23 19:29:57 +08:00

5.8 KiB
Raw Blame History

qtfs

介绍

qtfs是一个共享文件系统项目可部署在host-dpu的硬件架构上也可以部署在host-vm或同一台host的vm-vm之间通过vsock建立安全通信通道。以客户端服务器的模式工作使客户端能通过qtfs访问服务端的指定文件系统就像访问本地文件系统一样。

qtfs的特性

  • 支持挂载点传播;
  • 支持proc、sys、cgroup等特殊文件系统的共享
  • 客户端对qtfs目录下文件的操作都被转移到服务端文件读写可共享
  • 支持在客户端对服务端的文件系统进行远程挂载;
  • 可以定制化处理特殊文件;
  • 支持远端fifo、unix-socket等并且支持epoll使客户端和服务端像本地通信一样使用这些文件
  • 基于host-dpu架构时底层通信方式可以支持PCIe性能大大优于网络
  • 内核模块形式开发,无需对内核进行侵入式修改。

软件架构

软件大体框架图:

输入图片说明

安装教程

目录说明:

  • rexec跨主机二进制生命周期管理组件在该目录下编译rexec和rexec_server。
  • ipc: 跨主机unix domain socket协同组件在该目录下编译udsproxyd二进制和libudsproxy.so库。
  • qtfs: 客户端内核模块相关代码直接在该目录下编译客户端ko。
  • qtfs_server: 服务端内核模块相关代码直接在该目录下编译服务端ko和相关程序。
  • qtinfo: 诊断工具支持查询文件系统的工作状态以及修改log级别等。
  • demotestdoc: 测试程序、演示程序以及项目资料等。
  • 根目录: 是客户端与服务端都能用到的公共模块代码。

VSOCK通信模式

如有DPU硬件支持通过vsock与host通信可选择此方法。 如果没有硬件也可以选择host-vm作为qtfs的client与server进行模拟测试通信通道为vsock

1. 启动vm时为vm配置vsock通道vm可参考如下配置将vsock段加在devices配置内
	<devices>
	  ...
	  <vsock model='virtio'>
	    <cid auto='no' address='10'/>
	    <alias name='vsock0'/>
	    <address type='pci' domain='0x0000' bus='0x05' slot='0x00' function='0x0'/>
	  </vsock>
	  ...
    </devices>
2. 要求内核版本在5.10或更高版本。
3. 安装内核开发包yum install kernel-devel json-c-devel。

服务端安装:

1. cd qtfs_server
2. make clean && make -j
3. insmod qtfs_server.ko qtfs_server_vsock_cid=2 qtfs_server_vsock_port=12345 qtfs_log_level=WARN
4. 配置白名单将qtfs/config/qtfs/whitelist文件拷贝至/etc/qtfs/下请手动配置需要的白名单选项至少需要配置一个Mount白名单才能启动后续服务。
5. nohup ./engine 16 1 2 12121 10 12121 2>&1 &
Tips: 这里的cid需要根据配置决定如果host作为server端则cid固定配置为2如果vm作为server端则需要配置为前面xml中的cid字段本例中为10。

客户端安装:

1. cd qtfs
2. make clean && make -j
3. insmod qtfs.ko qtfs_server_vsock_cid=2 qtfs_server_vsock_port=12345 qtfs_log_level=WARN
4. cd ../ipc/
5. make clean && make && make install
6. nohup udsproxyd 1 10 12121 2 12121 2>&1 &
Tips这里插入ko的cid和port配置为与server端一致即可udsproxyd的cid+port与server端交换位置。

其他注意事项:

1. udsproxyd目前也支持vsock和测试模式两种使用vsock模式时不能带UDS_TEST_MODE=1进行编译。
2. 如果vsock不通需要检查host是否插入了vhost_vsock内核模块modprobe vhost_vsock。

测试模式,仅用于测试环境:

找两台服务器(或虚拟机)配置内核编译环境:

1. 要求内核版本在5.10或更高版本。
2. 安装内核开发包yum install kernel-devel。
3. 假设host服务器ip为192.168.10.10dpu为192.168.10.11

服务端安装:

1. cd qtfs_server
2. make clean && make -j QTFS_TEST_MODE=1
3.指定测试服务端的ipip a a ip_server(例192.168.10.10)/port dev network例:ens32防止机器重启造成的ip变更问题方便测试
4. insmod qtfs_server.ko qtfs_server_ip=x.x.x.x qtfs_server_port=12345 qtfs_log_level=WARN
5. 配置白名单将qtfs/config/qtfs/whitelist文件拷贝至/etc/qtfs/下请手动配置需要的白名单选项至少需要配置一个Mount白名单才能启动后续服务。
6. nohup ./engine 16 1 192.168.10.10 12121 192.168.10.11 12121 2>&1 &
Tips: 该模式暴露网络端口,有可能造成安全隐患,仅能用于功能验证测试,勿用于实际生产环境。

客户端安装:

1. cd qtfs
2. make clean && make -j QTFS_TEST_MODE=1
3.指定测试用户端的ipip a a ip_client(例192.168.10.11)/port dev network例:ens32防止机器重启造成的ip变更问题方便测试
3. insmod qtfs.ko qtfs_server_ip=x.x.x.x qtfs_server_port=12345 qtfs_log_level=WARN
4. cd ../ipc/
5. make clean && make && make install
6. nohup udsproxyd 1 192.168.10.11 12121 192.168.10.10 12121 2>&1 &
Tips: 该模式暴露网络端口,有可能造成安全隐患,仅能用于功能验证测试,勿用于实际生产环境。

使用说明

安装完成后,客户端通过挂载把服务端的文件系统让客户端可见,例如:

mount -t qtfs /home /root/mnt/

客户端进入"/root/mnt"后便可查看到server端/home目录下的所有文件以及对其进行相关操作。此操作受到白名单的控制需要挂载路径在server端白名单的Mount列表或者在其子目录下且后续的查看或读写操作都需要开放对应的白名单项才能进行。 Tips若完成测试环境的配置后无法通过服务端访问所挂载的客户端文件可检查是否由防火墙的阻断导致。