浅析SPDK技术:vhost

news2024/10/7 18:32:09

文章目录

    • SPDK vhost工作机制
    • SPDK vhost实现
      • SPDK vhost设备管理结构
      • vhost_dev_register:注册vhost设备
        • new_connection:新建连接会话
        • start_device:启动设备会话
    • SPDK vhost-blk实现
      • rpc_vhost_create_blk_controller:创建vhost-blk设备
        • vhost_blk_start:新建会话
      • vdev_worker:vhost-blk轮询任务
      • blk_request_complte_cb:blk IO完成
    • QEMU配置使用SPDK vhost
      • 启动SPDK vhost应用
      • 配置SPDK
        • vhost-scsi配置
        • vhost-blk配置
    • 相关参考

SPDK vhost工作机制

在这里插入图片描述

SPDK vhost 作为虚拟机存储的后端,以进程的形式在宿主机上运行,通过轮询的方式从共享的 Ring Buffer 中得到虚拟机中的 IO 请求,并进行处理,最后将处理完的数据同样通过 Ring Buffer 的方式通知虚拟机。整个过程不需要锁的保护,没有中断引入的开销,效率极高。这里面主要涉及到下面几个部分:

  • 虚拟机中的存储前端驱动:根据具体使用的协议不同而不同,可能为 virtio blk,virtio scsi,或直接使用原生的 NVMe driver,主要负责接收 IO 请求,并将请求保存到 Ring Buffer 中,等待后端的处理。另一方面,前端驱动还需要处理后端的完成通知;
  • 共享的 Ring Buffer:虚拟机中的前端驱动与宿主中的存储后端共享的内存,用来在两者之间传输数据,命令和执行结果;
  • SPDK vhost 后端:虚拟机存储的后端实现,真正处理 IO 请求的核心逻辑,通过用户态的存储驱动实现高效的 IO 操作。

SPDK vhost实现

SPDK vhost的软件结构示意如下:
在这里插入图片描述

SPDK vhost设备管理结构

所有类型的SPDK vhost设备统一链入到g_vhost_devies链表中进行管理,包括vhost-blk和vhost-scsi设备,关联的数据结构如下:
在这里插入图片描述

这里:

  • spdk_vhost_dev保存了vhost设备的通用信息,对于类型相关的数据则由vhost-blk或vhost-scsi扩展进行实现;
  • 对于每个vhost设备,可以支持建立多个session,由spdk_vhost_session结构描述,通常对于每个访问vhost-dev的VM都会建立一个session;
  • spdk_vhost_dev_backend结构保存了会话管理的相关处理回调函数。

vhost_dev_register:注册vhost设备

在这里插入图片描述

new_connection:新建连接会话

在这里插入图片描述

start_device:启动设备会话

在这里插入图片描述

SPDK vhost-blk实现

rpc_vhost_create_blk_controller:创建vhost-blk设备

在这里插入图片描述

vhost_blk_start:新建会话

在这里插入图片描述

vdev_worker:vhost-blk轮询任务

在这里插入图片描述

blk_request_complte_cb:blk IO完成

在这里插入图片描述

QEMU配置使用SPDK vhost

启动SPDK vhost应用

首先,配置SPDK使用的大页内存:

HUGEMEM=4096 scripts/setup.sh

接下来,启动SPDK自带的vhost应用程序

build/bin/vhost -S /var/tmp -m 0x3

配置SPDK

创建SPDK bdev设备

scripts/rpc.py bdev_malloc_create 64 512 -b Malloc0
vhost-scsi配置

首先,创建vhost-scsi控制器

scripts/rpc.py vhost_create_scsi_controller --cpumask 0x1 vhost.0

添加SPDK bdev设备到创建的vhost-scsi控制器中

scripts/rpc.py vhost_scsi_controller_add_target vhost.0 0 Malloc0
vhost-blk配置
scripts/rpc.py vhost_create_blk_controller --cpumask 0x1 vhost.1 Malloc0

相关参考

  • Storage Performance Development Kit

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1456173.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Feign 第一次调用为什么会很慢?

前言 首先要了解 Feign 是如何进行远程调用的,这里面包括,注册中心、负载均衡、FeignClient 之间的关系,微服务通过不论是 eureka、nacos 也好注册到服务端,Feign 是靠 Ribbon 做负载的,而 Ribbon 需要拿到注册中心的…

融智学应用场景实训实操文化基因系统工程实践指南讲座音频

俗话说,听君一席话胜读十年书。戴上耳机闭目倾听(语言哲学和语言科学基础之上的融智学): “融智学应用场景实训实操文化基因系统工程实践指南讲座音频”(一共七章)随之便会发现,原来汉字汉语暨…

卫星热平衡试验与太阳光模拟器

卫星热模型是一种用于研究卫星的热特性的模型。卫星在太空中接收到的太阳辐射会导致其表面温度的变化,而表面温度的变化会影响卫星的热传导和热辐射,进而影响其冷却和热平衡。 卫星热模型一般涉及以下几个方面的内容: 1. 热辐射模型&#xf…

Midjourney风格一致功能解读及使用方法

Midjourneys再次迎来更新,本次新增“风格一致”功能!用户期待已久的风格模仿功能终于实现了! --sref 虽然目前只是测试功能,但已经相当强大了,这篇文章我将带大家先睹为快! 别忘了,这个功能目前…

C语言第二十七弹---内存函数

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】 内存函数 1、memcpy 使用和模拟实现 2、memmove 使用和模拟实现 3、memset 函数的使用 4、memcmp 函数的使用 总结 前面两弹讲解了字符函数和字符串函数&…

【千帆平台】使用千帆大模型平台创建自定义模型调用API,贺岁灵感模型,文本对话

欢迎来到《小5讲堂》 大家好,我是全栈小5。 这是《千帆平台》系列文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点的理解和…

【技能树学习】Markdown入门——练习题解析

文章目录 前言1 MarkDown介绍2 段落及强调3 标题4 链接5 图片6 列表7 分割线及引用8 代码块9 表格 前言 本篇文章给出了CSDN Git入门技能树中部分的练习题解析,包括分支管理,Git标签,在Mac和Windows上使用GitVSCode的步骤。强调了git cherry…

深圳市金航标电子有限公司,获得多项发明专利,国家高新技术企业

深圳市金航标电子有限公司,获得多项发明专利,国家高新技术企业,“中国卫星导航定位协会”、“广东连接器协会”会员。技术团队来自清华大学和电子科技大学,已取得ISO9001认证和欧盟标准RoHS、REACH认证。“金航标,连接世界”&…

VSCode无法连接远程服务器的两种解决方法

文章目录 VSCode Terminal 报错解决方式1解决方式2you are connected to an OS version that is unsupported by Visual Studio Code解决方法 VSCode Terminal 报错 直接在terminal或cmd中使用ssh命令可以连接服务器,但是在vscode中存在报错,最后一行为…

KNN算法总结

概述 邻近算法,或者说K最邻近(KNN,K-NearestNeighbor)分类算法是数据挖掘分类技术中最简单的方法之一。所谓K最近邻,就是K个最近的邻居的意思,说的是每个样本都可以用它最接近的K个邻近值来代表。近邻算法…

备战蓝桥杯---动态规划(入门3之子串问题)

本专题再介绍几种经典的字串问题。 这是一个两个不重叠字串和的问题,我们只要去枚举分界点c即可,我们不妨让c作为右区间的左边界,然后求[1,c)上的单个字串和并用max数组维护。对于右边,我们只要反向求单个字串和然后选左边界为c的…

真怕了,冻雨天气没有雪地胎怎么活

文 | AUTO芯球 作者 | 王秦 南方过年太苦了 刚暖和2天 又开启冻雨模式 过年前的冰冻阴影还没过去啊 这车都不敢开出去了啊 冰冻天气,雪天行车是一件很考验技术和运气的事情啊, 因为什么? 滑,对吧。 那么有哪些装备可以让…

如何找回丢失照片? 7 种免费照片恢复方法分享

照片可以勾起回忆,让我们想起与最亲近的人一起度过的时光,这就是为什么仅仅丢失一张重要照片就会让人感觉完全毁灭性的——几乎就像你失去了记忆本身一样。好消息是,大多数丢失或意外删除的照片都可以使用照片恢复软件恢复,而且我…

做外贸的你是如何看待2024?

说到2024年的市场行情,有人说会比2023年要好很多。也有人说可能还不如去年,竞争可能会更加的激烈。 而且从各个博主的观点看来,俄罗斯市场似乎成了一个比较热门的话题,有人说今年我们大家应该主攻俄罗斯市场,现在俄罗斯…

云原生之容器管理工具Portainer

1. 简介 前面文章我们讲Docker、Docker Compose和Docker Swarm都是在Linux系统上手工命令行去操作,在第一次安装的时候可以命令行,以后运维和CICD流程操作中,如果还要命令行去各个节点操作,操作就麻烦了,工作效…

Rabbitmq入门与应用(四)-RabbitMQ常见模式

RabbitMQ常见Queue模式 简单模式 点对点模式,一个生产者一个消费者 生产者将消息发送到队列,消费者从队列中获取消息,队列是存储消息的缓冲区。 查看管理端效果 序列化解决方案 基于java序列化基于Json Bean public MessageConverter mess…

CPU是如何工作的?什么是冯·诺依曼架构和哈弗架构?

《嵌入式工程师自我修养/C语言》系列——CPU是如何工作的?什么是冯诺依曼架构和哈弗架构? 一、CPU内部结构及工作原理1.1 CPU的结构1.2 CPU工作流程举例 二、计算机体系结构2.1 冯诺依曼架构2.2 哈弗架构 三、总结 快速学习嵌入式开发其他基础知识&#…

塔罗星卜算大全系统源码带完整的安装代码包以及安装部署教程

塔罗星卜算大全系统源码是一款结合古老塔罗牌智慧与现代技术的占卜工具。它旨在为广大塔罗爱好者提供一个全面、便捷、高效的在线占卜平台。通过这款系统,用户可以轻松进行塔罗占卜,获取个性化的解读和建议。 以下是部分代码示例: 系统特色功…

【零基础学习CAPL】——CAN报文的发送(面板中直接修改信号值进行发送)

🙋‍♂️【零基础学习CAPL】系列💁‍♂️点击跳转 文章目录 1.概述2.面板创建3.系统变量创建4.系统变量与Panel值绑定4.CAPL实现5.效果6.全量脚本1.概述 在前面文章”【零基础学习CAPL】——CAN报文的发送(按下按钮同时周期性发送)“中对于发送报文中的信号是在脚本中固…

Spring Boot 笔记 027 添加文章分类

1.1.1 添加分类 <!-- 添加分类弹窗 --> <el-dialog v-model"dialogVisible" title"添加弹层" width"30%"><el-form :model"categoryModel" :rules"rules" label-width"100px" style"padding…