So once again, when it comes to full virtualization, data transfer is implicit. So normally, you know that in an operating system, if you're doing an I/O operation from a user space, you may have to copy it in the kernel space in order to do a dma out onto the network or the disk and so on, right? And this is an operating system activity. But in a fully virtualized setup, it thinks that it can do it itself, but when it tries to do that, it'll result in a trap and the data transfer will be emulated by the hypervisor. But on the other hand, in a para virtualized setup, and Zen is a good example of that, we have explicit opportunity to innovate because it explicitly communicating something to the hypervisor. And so, this is where there's opportunity for improving performance. So for instance, if you take Zen, they have a particular data structure called I/O rings. And using this data structure, this can be a communication mechanism between the guest operating system and Zen. So Zen is here, and I guess maybe up here, and and they can use this data structure for communication between the guest and the Zen. And let me show you how this data structure is used. This can be anything that the guest operating system wants to do, and it produces a request and it puts it into this into this slot. This is just a data structure, and the contents of this data structure is something that is negotiated between the guest operating system and Zen. And it might say well, this data structure is for me to tell you any time I do a network activity, for instance. So when I want to send a packet on a network, I'm going to put that request into this buffer. And by the way, what I'm going to do is not copy, but put a pointer into my guest operating systems indicating where the network packet resides so that you can avoid the copying overhead. So giving some performance advantage of that. And so, this is the way I will fill up these requests into this data structure. And on the other side, these are all the new requests. And on the other side, Zen has to take these requests and process them. And so, Zen becomes a consumer for the requests that are produced by the guest operating system, and it takes each of these requests and processes them, whatever needs to be done. And once that request processing is done, it's going to produce responses, Zen is going to produce responses, and cue them up in this data structure. And once it is queued up, the consumer, in this case, the guest operating system, can come and take these responses and do whatever it wants with it. So this is where you see that the responses may be queuing up here, but the consumer, meaning the guest operating system, may have said don't bother me, I'll come take it when I am ready. So there's an opportunity in a para virtualized environment for the guest operating system to be in more control over what goes on in terms of event notification between the hypervisor and the guest.