On 2018/11/15 17:36, Yan Vugenfirer wrote:
> 
> 
>> On 15 Nov 2018, at 05:56, jiangyiwen <[email protected]> wrote:
>>
>> Hi Stefan, Michael, Jason and everyone,
>>
>> Several days ago, I discussed with jason about "Vsock over Virtio-net".
>> This idea has two advantages:
>> First, it can use many great features of virtio-net, like batching,
>> mergeable rx buffer and multiqueue, etc.
>> Second, it can reduce many duplicate codes and make it easy to be
>> maintained.
> 
> I would like to add that from Windows guest support perspective it makes more 
> sense.
> To support vsock we most probably need NDIS protocol driver and if it will be 
> binded to NDIS miniport driver (the driver that currently handles virtio-net 
> in Windows) it will make our life much easier. Otherwise we need to “plug” 
> into NIDS on one hand, and handle transport outside of NDIS on other hand or 
> in some strange way by creating mini port driver that is not really NIC 
> miniport driver.
> 
> Best regards,
> Yan.

Sorry, I am not familiar with windows vsock driver, if vsock
is integrated in virtio-net, it can make windows vsock more
easier, then it should be a more suitable solution.

Thanks.

>>
>> Before the implement, I want to discuss with everyone again, and
>> want to know everyone's suggestions.
>>
>> After the discussion, based on this point I will try to implement
>> this idea, but I am not familiar with the virtio-net, that is a
>> pity. :(
>>
>> -------------------------Simple idea------------------------------
>>
>> 1. The packet layout will become as follows:
>>
>> +---------------------------------+
>> |        Virtio-net header        |
>> |(struct virtio_net_hdr_mrg_rxbuf)|
>> +---------------------------------+
>> |          Vsock header           |
>> |    (struct virtio_vsock_hdr)    |
>> +---------------------------------+
>> |             payload             |
>> |      (until end of packet)      |
>> +---------------------------------+
>>
>> 2. The Guest->Host basic code flow as follow:
>>                            +------------+
>>                            |   Client   |
>>                            +------------+
>>                                  |
>>                                  |
>> +------------------------------------------------------------------+
>> |VSOCK Core Module                                                 |
>> |ops->sendmsg; (vsock_stream_sendmsg)                              |
>> |  -> alloc_skb; /* it will packet a skb buffer, and include vsock |
>> |                 * hdr and payload */                             |
>> |  -> dev_queue_xmit(); /* it will call start_xmit(virtio-net.c) */|
>> |vsock hdr and payload, and then call                              |
>> +------------------------------------------------------------------+
>>                                  |
>>                                  |
>> +------------------------------------------------------------------+
>> |Virtio-net Module                                                 |
>> |start_xmit                                                        |
>> |  -> add virtio_net_hdr and pack sg in ring desc, notify Host     |
>> +------------------------------------------------------------------+
>>                                  |
>>                                  |
>> +------------------------------------------------------------------+
>> |Vhost-net Module                                                  |
>> |handle_tx                                                         |
>> |  -> get tx buffer, skip virtio_net_hdr and call Vsock function.  |
>> | /* This point has some differences, vhost-net use ->sendmsg to   |
>> |  * forward information, however vsock only need to notify server |
>> |  * that data ready. */                                           |
>> +------------------------------------------------------------------+
>>                                  |
>>                                  |
>> +------------------------------------------------------------------+
>> |VSOCK Core Module                                                 |
>> |alloc_pkt, copy skb data to pkt.                                  |
>> |add pkt to rx_queue and notify server to get data.                |
>> +------------------------------------------------------------------+
>>
>> 3. To Host->Guest
>> I have a problem and difficult, mainly I know about virtio-net a little),
>> because I have been doing work related with storage and file system.
>>
>> The problem as follows:
>> we should monitor all of socket of vsock in handle_rx, when there are
>> data coming, and copy data to vq desc. Vhost-net use ->recvmsg to
>> get data, it is different with socket. To vsock, I think host will
>> not call ->recvmsg when it need to send message to guest. To net,
>> vhost-net only as forwarding layer.
>>
> 
> 
> .
> 


_______________________________________________
Virtualization mailing list
[email protected]
https://lists.linuxfoundation.org/mailman/listinfo/virtualization

Reply via email to