Hyper-V storage via VMBus

Hello,

I’m interested to understand how the inter partition communication for synthetic devices working, so I started to understand the architecture of hyper-v and VMBus.

The confusing point for me is that the shared memory(SIM page) between child and root partition is really limited and transferring the actual data doesn’t seems efficient through that shared memory!

Am I getting something wrong here?
How the actual data are transferred over vmbus?

thanks,
samuel

The shared memory is used for setting up what are essentially
scatter-gather list for cross partition transfers, but I have no idea if
the details are exposed and or documented.

Mark Roddy

On Wed, Oct 5, 2016 at 11:06 AM, wrote:

> Hello,
>
> I’m interested to understand how the inter partition communication for
> synthetic devices working, so I started to understand the architecture of
> hyper-v and VMBus.
>
> The confusing point for me is that the shared memory(SIM page) between
> child and root partition is really limited and transferring the actual data
> doesn’t seems efficient through that shared memory!
>
> Am I getting something wrong here?
> How the actual data are transferred over vmbus?
>
> thanks,
> samuel
>
> —
> NTDEV is sponsored by OSR
>
> Visit the list online at: http:> showlists.cfm?list=ntdev>
>
> MONTHLY seminars on crash dump analysis, WDF, Windows internals and
> software drivers!
> Details at http:
>
> To unsubscribe, visit the List Server section of OSR Online at <
> http://www.osronline.com/page.cfm?name=ListServer&gt;
></http:></http:>

“cross partition transfers” can I take this as there is no actual disk data transfer over vmbus, its just request and then the operation below is like the cross partition transfer?

I assume the Linux synthetic disk driver for Hyper-V is open source, and would have a lot of details about VMBus.

Jan

From: on behalf of Mark Roddy
Reply-To: Windows List
Date: Wednesday, October 5, 2016 at 8:21 AM
To: Windows List
Subject: Re: [ntdev] Hyper-V storage via VMBus

The shared memory is used for setting up what are essentially scatter-gather list for cross partition transfers, but I have no idea if the details are exposed and or documented.

Mark Roddy

On Wed, Oct 5, 2016 at 11:06 AM, > wrote:
Hello,

I’m interested to understand how the inter partition communication for synthetic devices working, so I started to understand the architecture of hyper-v and VMBus.

The confusing point for me is that the shared memory(SIM page) between child and root partition is really limited and transferring the actual data doesn’t seems efficient through that shared memory!

Am I getting something wrong here?
How the actual data are transferred over vmbus?

thanks,
samuel

For synthetic iSCSI controller storvsc.sys - Virtualization Service Client in guest OS and storvsp.sys - Virtualization Service Provider in host OS. It looks like communications can be using RingBuffer. When Storvsc creates vmbus channel it calls (through vmbkmcl.sys) IoAllocateMdl and then MmProbeAndLockPages, which updates pfn array in MDL. This PFN array goes to host OS through Hyper-V Message (winhv!WinHvPostMessage). In host OS vmbusr!ChMapGpadlView converts guest pfn array to host and creates MDL, which contains updated pfn array. Both guest pfn array and host pfn array describe same physical memory.
Guest driver can write data in that buffer and send signal (winhv!HvSignalEvent) to host os, which can read this buffer.

*synthetic SCSI controller