qemu 共享内存设备——ivshmem

文章目录

    • 背景
    • 简单使用
    • 参考

背景

vshmem是QEMU提供的一种宿主机与虚拟机之间或多个虚拟机之间共享内存的特殊设备。它有两种形式:

  • ivshmem-plain: 简单的共享内存区域
  • ivshmem-doorbel: 除了共享内存,还能提供基于中断的通信机制

这种设备在虚拟机内部表现为PCI设备,共享的内存区域则以PCI BAR的形式存在。ivshmem PCI设备提供3个BAR:

  • BAR0: 设备寄存器
  • BAR1: MSI-X表
  • BAR2: 共享内存区域

简单的共享内存场景只使用BAR2。如果需要基于中断实现额外通信,需要用到BAR0和BAR1。

只考虑共享内存这个场景,是如何做到内存共享的呢?在不同的虚拟机(这些虚拟机会共享内存)内,ivshmem device的BAR2地址(GPA)可能不同,但是对应的HPA是一样的,hypervisor会为不同虚拟机的ivshmem device的BAR2内存区域建立EPT映射,因此就达到共享内存的目的!
即:

  • GPA1->HPA1
  • GPA2→HPA1

简单使用

  1. qemu启动参数添加:-device ivshmem-plain,memdev=ivshmem -object memory-backend-file,id=ivshmem,share=on,mem-path=/dev/shm/shm1,size=16M

  2. 启动虚拟机,可以看到:
    在这里插入图片描述

  3. 虚机内使用测试程序:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/mman.h>
#include <assert.h>
 
#define SHM_SIZE (16 * 1024 * 1024)
 
int main(int argc, char **argv) {
    char *p;
    int fd;
    int i;
 
    fd = open("/sys/bus/pci/devices/0000:00:04.0/resource2", O_RDWR);
    assert(fd != -1);
 
    p = mmap(0, SHM_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
    assert(p != NULL);
 
    for (i = 0; i < 8; i++) {
        printf("%c", p[i]);
    }
 
    munmap(p, SHM_SIZE);
    close(fd);
 
    return 0;
}
  1. Host 内向共享内存写入:echo “SIGN_01” > /dev/shm/shm1

  2. guest内运行程序:

$ sudo ./a.out
SIGN_01

参考

  • Inter-VM Shared Memory device

  • https://github.com/henning-schild-work/ivshmem-guest-code

  • vshmem内存共享设备

  • QEMU虚拟机内识别ivshmem设备

  • QEMU tutorial:How to use ivshmem-plain

  • Notes about ivshmem

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

dolphinscheduler服务注册中心源码解析(三)RPC提供者服务整合注册中心注册服务实现源码

RPC提供者服务整合注册中心注册服务实现源码 1.概述2.源码解读思路3.实现2.1.应用服务的RPC服务接口定义2.1.1.MasterServer应用中提供的RPC接口服务2.1.2.WorkerServer应用中提供的RPC接口服务2.2.应用服务的RPC服务接口实现2.2.1.MasterServer应用中提供的RPC接口服务实现类2…

若依的RBAC权限控制框架

若依权限管理框架 Spring Security介绍 Spring Security是spring的权限控制框架&#xff0c;主分为 认证 和 授权认证&#xff1a;是否能进入&#xff08;登录&#xff09;授权&#xff1a;是否有权限访问对应的资源&#xff08;controller能否访问&#xff09; Spring Securit…

Scala_【1】概述

第一章 语言特点环境搭建(Windows)idea编写scalaHelloWorld注意事项 Scala是一门以Java虚拟机&#xff08;JVM&#xff09;为运行环境并将面向对象和函数式编程的最佳特性结合在一起的静态类型编程语言 语言特点 Scala是一门多范式的编程语言&#xff0c;Scala支持面向对象和函…

sqoop抽数报错Every derived table must have its own alias

sqoop抽数报错Every derived table must have its own alias 报错如下&#xff1a; ERROR manager.SqlManager: Error executing statement: java.sql.SQLSyntaxErrorException: Every derived table must have its own alias 修改前脚本&#xff1a; –query "select * …

大小鼠智能热板仪 智能冷板仪~根据实验需求和方向选择“冷”or“热”

冷板仪的工作原理 SS-I5IO56IO48O 冷板仪主要通过提供一个可调节温度的冷板&#xff08;通常为金属地板&#xff09;&#xff0c;其温度设定在低温范围内&#xff08;如5℃&#xff09;&#xff0c;用于模拟冷刺激引起的疼痛反应。实验时&#xff0c;动物被放置在冷板上&…

VMware vCenter保姆级安装部署(VMware VCenter Nanny Level Installation and Deployment)

VMware vCenter保姆级安装部署教程 VMware vCenter‌是由VMware开发的一款虚拟化管理平台&#xff0c;主要用于管理和监控虚拟化环境中的虚拟机、主机和存储资源。它提供了一个集中控制的平台&#xff0c;简化了虚拟化基础设施的管理工作&#xff0c;提高了资源利用率和灵活性…

WebGIS实战开源项目:智慧机场三维可视化(学习笔记)

From&#xff1a;新中地 1.简介 智慧机场解决方案&#xff0c;基于数字化大平台&#xff0c;融合AI、大数据、IoT、视频云、云计算等技术&#xff0c;围绕机场“运控、安防、服务”三大业务领域&#xff0c;构建“出行一张脸”及“运行一张图”两大场景化解决方案。 https://…

玩转OCR | 探索腾讯云智能结构化识别新境界

&#x1f4dd;个人主页&#x1f339;&#xff1a;Eternity._ &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339; ❀ 玩转OCR 腾讯云智能结构化识别产品介绍服务应用产品特征行业案例总结 腾讯云智能结构化识别 腾讯云智能结构化OCR产品分为基础版与高级版&am…

【论文阅读笔记】Scalable, Detailed and Mask-Free Universal Photometric Stereo

【论文阅读笔记】Scalable, Detailed and Mask-Free Universal Photometric Stereo 前言摘要引言Task 相关工作方法SDM-UniPS预处理尺度不变的空间光特征编码器像素采样变压器的非局部交互 PS-Mix数据集 实验结果训练细节评估和时间&#xff1a; 消融实验定向照明下的评估没有对…

自动控制系统综合与LabVIEW实现

自动控制系统综合是为了优化系统性能&#xff0c;确保其可靠性、稳定性和灵活性。常用方法包括动态性能优化、稳态误差分析、鲁棒性设计等。结合LabVIEW&#xff0c;可以通过图形化编程、高效数据采集与处理来实现系统综合。本文将阐述具体方法&#xff0c;并结合硬件选型提供实…

VUE 3.0 如何新建项目 详细教程 附环境搭建 推荐

本人新入手一台电脑&#xff0c;需要安装各种环境配置&#xff0c;顺便把过程记录一下&#xff0c;方便自己以后查看&#xff0c;也欢迎大家参考交流。 目录 一、环境搭建&#xff1a; 1.Node.js安装 2.国内淘宝镜像设置 3.安装vue 环境 二、新建vue项目 1.vue脚手架新建…

牛客网刷题 ——C语言初阶——BC114 小乐乐排电梯

1.牛客网 &#xff1a;BC114 小乐乐排电梯 题目描述&#xff1a; 小乐乐学校教学楼的电梯前排了很多人&#xff0c;他的前面有n个人在等电梯。电梯每次可以乘坐12人&#xff0c;每次上下需要的时间为4分钟&#xff08;上需要2分钟&#xff0c;下需要2分钟&#xff09;。请帮助…

UE5 渲染管线 学习笔记

兰伯特 SSS为散射的意思 带Bias的可以根据距离自动切换mip的卷积值 而带Level的值mipmaps的定值 #define A8_SAMPLE_MASK .a 这样应该就很好理解了 这个只采样a通道 带Level的参考上面的 朝左上和右下进行模糊 带Bias参考上面 随机数 4D 3D 2D 1D

‘vite‘ 不是内部或外部命令,也不是可运行的程序

报错&#xff1a;执行 npm run dev时&#xff0c;提示’vite’ 不是内部或外部命令&#xff0c;也不是可运行的程序 解决&#xff1a;执行 npm install -g vite 报错&#xff1a;导入vite后再次执行npm run dev&#xff0c;报错failed to load config from E:\eclipseWP\test1…

gitlab克隆仓库报错fatal: unable to access ‘仓库地址xxxxxxxx‘

首次克隆仓库&#xff0c;失效了&#xff0c;上网查方法&#xff0c;都说是网络代理的问题&#xff0c;各种清理网络代理后都无效&#xff0c;去问同事&#xff1a; 先前都是直接复制的网页url当做远端url&#xff0c;或者点击按钮‘使用http克隆’ 这次对于我来说有效的远端u…

apisix docker 安装

git clone https://github.com/apache/apisix-docker.git cd apisix-docker/example nano docker-compose 主要修改这里ETCD_ADVERTISE_CLIENT_URLS: "http://192.168.31.160:2379" docker compose -p docker-apisix up -d#安装apisix-dashboard docker pull apache/…

相机雷达外参标定综述“Automatic targetless LiDAR–camera calibration: a survey“

相机雷达外参标定综述--Automatic targetless LiDAR–camera calibration: a survey 前言1 Introduction2 Background3 Automatic targetless LiDAR–camera calibration3.1 Information theory based method(信息论方法)3.1.1 Pairs of point cloud and image attributes(属性…

第13篇 冒泡排序__ARM C语言<二>

Q&#xff1a;如何设计ARM C语言程序对数组进行降序排列&#xff1f; A&#xff1a;基本原理也和Nois II C语言程序一样&#xff1a;通过不断的比较和交换数组中的数据元素&#xff0c;最终使得最大的数据“冒泡”排到到数组最末&#xff0c;并逐步缩小待排序的范围直到所有数…

Pytorch | 利用AI-FGTM针对CIFAR10上的ResNet分类器进行对抗攻击

Pytorch | 利用AI-FGTM针对CIFAR10上的ResNet分类器进行对抗攻击 CIFAR数据集AI-FGTM介绍算法流程初始化迭代更新&#xff08; t 0 t 0 t0 到 T − 1 T - 1 T−1&#xff09;迭代完成 AI-FGTM代码实现AI-FGTM算法实现攻击效果 代码汇总aifgtm.pytrain.pyadvtest.py 之前已经…

C++程序启动报错和启动失败的常见原因分析与排查经验总结

目录 1、概述 2、程序启动报错的原因分析与排查方法 2.1、程序启动时报找不到依赖的dll库 2.1.1、找不到C/C运行时库 2.1.2、找不到依赖的业务库 2.2、程序启动时报在依赖的dll库中找不到接口 2.3、程序启动时报0xC000007B错误码 3、程序启动不了&#xff08;启动失败&…