目录
1. 规范
1.1 简介
1.2 配置ivshmem PCI设备
1.3 ivshmem Guest PCI设备接口
1.4 PCI BARs规范
BAR0
BAR1
BAR2
2. 应用场景
2.1 共享内存
2.2 中断事件通知机制
3. Ivshmem PCI设备工作机制
3.1 PCI BAR0寄存器
4. 设计与实现
4.1 ivshmem-server
4.2 ivshmem client与server通信协议
4.3 ivshmem client与client通信协议
虚拟机间共享内存设备ivshmem (Inter-VM shared memory device)设计用于共享运行不同客户机的多个QEMU进程以及与宿主机之间的内存区域。为了让所有的Guest虚拟机都能访问共享内存区域,QEMU将该设备建模为一个PCI设备,将共享内存作为PCI的BAR空间。
ivshmem设备可以直接使用宿主机上的共享内存对象(内存映射的文件、内存设备、内存大页等),也可以从一个ivshmem server获取共享内存。当使用ivshmem server时,该设备可以与共享内存对象的多个对端建立中断通信机制。
目前支持两种基础的配置方式:
-device ivshmem-plain,memdev=HMB,...
使用内存设备HMB作为ivshmem设备的共享内存区域。
-device ivshmem-doorbell,chardev=CHR,vectors=N,...
该场景必须有一个宿主机上的ivshmem server,ivshmem设备会连接到unix socket字符设备的该server上。ivshmem server会为每一个ivshmem设备分配一个唯一的ID(0-65535)。中断使用MSI-X(message-signaled)机制,vector=N用于配置MSI-X使用的vectors数量。
Ivshmem PCI设备有2个或3个BAR寄存器。
设备寄存器(256B的MMIO)
MSI-X表和PBA(ivshmem-doorbell)
用作映射的共享内存对象
共享宿主机上的内存,使用BAR2。使用场景示例:memic( http://dpdk.org/browse/memnic)。
使用BAR0和BAR1提供内存共享两端的事件通知机制(基于中断),Guest需要写kernel驱动以支持中断的处理。
当配置中断时,中断的多端之间共享eventfd对象,利用eventfd对象(ivshmem-server管理)完成事件的通知机制。
偏移 |
大小 |
访问权限 |
重置值 |
功能 |
0 |
4 |
rw |
0 |
中断掩码 (Interrupt Mask) bit 0: peer interrupt (rev 0) reserved (rev 1) bit 1..31: reserved |
4 |
4 |
rw |
0 |
中断状态 (Interrupt Status) Bit 0: peer interrupt (rev 0) Bit 1..31: reserved |
8 |
4 |
read-only |
0 或 ID |
IVPosition |
12 |
4 |
write-only |
N/A |
Doorbell Bit 0 .. 15: vector Bit 16 .. 31: peer ID |
16 |
240 |
none |
N/A |
reserved |
Server监听在一个Unix socket上,每一个连接到server的client,server都会:
目前,配置中断机制的ivshmem设备必须连接到一个外部的ivshmem-server上(QEMU有一个示例实现)。连接是client到server单向的,消息传送是server到client单向的。每个消息由一个8字节的小端有符号数字组成,同时可能附带一个SCM_RIGHTS的句柄(传送eventfd句柄)。
配置中断通知机制的client(ivshmem共享内存的客户端设备),会收到其他client(peers)的共享eventfd句柄,主要用于中断通知其他peers。同样,也通过eventfd句柄接收到其他peers的中断通知。
关于作者:
犇叔,浙江大学计算机科学与技术专业,研究生毕业,而立有余。先后在华为、阿里巴巴和字节跳动,从事技术研发工作,资深研发专家。主要研究领域包括虚拟化、分布式技术和存储系统(包括CPU与计算、GPU异构计算、分布式块存储、分布式数据库等领域)、高性能RDMA网络协议和数据中心应用、Linux内核等方向。
专业方向爱好:数学、科学技术应用
关注犇叔,期望为您带来更多科研领域的知识和产业应用。
内容坚持原创,坚持干货有料。坚持长期创作,关注犇叔不迷路
转载请附带本文连接,标注转载。