hyperv: Enable sendbuf mechanism on the send path
We send packets using a copy-free mechanism (this is the Guest to Host transport via VMBUS). While this is obviously optimal for large packets, it may not be optimal for small packets. Hyper-V host supports a second mechanism for sending packets that is "copy based". We implement that mechanism in this patch. In this version of the patch I have addressed a comment from David Miller. With this patch (and all of the other offload and VRSS patches), we are now able to almost saturate a 10G interface between Linux VMs on Hyper-V on different hosts - close to 9 Gbps as measured via iperf. Signed-off-by: K. Y. Srinivasan <kys@microsoft.com> Reviewed-by: Haiyang Zhang <haiyangz@microsoft.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
cc80ee1360
commit
c25aaf814a
@@ -140,6 +140,8 @@ struct hv_netvsc_packet {
|
||||
void *send_completion_ctx;
|
||||
void (*send_completion)(void *context);
|
||||
|
||||
u32 send_buf_index;
|
||||
|
||||
/* This points to the memory after page_buf */
|
||||
struct rndis_message *rndis_msg;
|
||||
|
||||
@@ -582,6 +584,9 @@ struct nvsp_message {
|
||||
|
||||
#define NETVSC_RECEIVE_BUFFER_SIZE (1024*1024*16) /* 16MB */
|
||||
#define NETVSC_RECEIVE_BUFFER_SIZE_LEGACY (1024*1024*15) /* 15MB */
|
||||
#define NETVSC_SEND_BUFFER_SIZE (1024 * 1024) /* 1MB */
|
||||
#define NETVSC_INVALID_INDEX -1
|
||||
|
||||
|
||||
#define NETVSC_RECEIVE_BUFFER_ID 0xcafe
|
||||
|
||||
@@ -607,6 +612,15 @@ struct netvsc_device {
|
||||
u32 recv_section_cnt;
|
||||
struct nvsp_1_receive_buffer_section *recv_section;
|
||||
|
||||
/* Send buffer allocated by us */
|
||||
void *send_buf;
|
||||
u32 send_buf_size;
|
||||
u32 send_buf_gpadl_handle;
|
||||
u32 send_section_cnt;
|
||||
u32 send_section_size;
|
||||
unsigned long *send_section_map;
|
||||
int map_words;
|
||||
|
||||
/* Used for NetVSP initialization protocol */
|
||||
struct completion channel_init_wait;
|
||||
struct nvsp_message channel_init_pkt;
|
||||
|
Reference in New Issue
Block a user