• Sunil Muthuswamy's avatar
    hv_sock: perf: loop in send() to maximize bandwidth · 14a1eaa8
    Sunil Muthuswamy authored
    Currently, the hv_sock send() iterates once over the buffer, puts data into
    the VMBUS channel and returns. It doesn't maximize on the case when there
    is a simultaneous reader draining data from the channel. In such a case,
    the send() can maximize the bandwidth (and consequently minimize the cpu
    cycles) by iterating until the channel is found to be full.
    
    Perf data:
    Total Data Transfer: 10GB/iteration
    Single threaded reader/writer, Linux hvsocket writer with Windows hvsocket
    reader
    Packet size: 64KB
    CPU sys time was captured using the 'time' command for the writer to send
    10GB of data.
    'Send Buffer Loop' is with the patch applied.
    The values below are over 10 iterations.
    
    |--------------------------------------------------------|
    |        |        Current        |   Send Buffer Loop    |
    |--------------------------------------------------------|
    |        | Throughput | CPU sys  | Throughput | CPU sys  |
    |        | (MB/s)     | time (s) | (MB/s)     | time (s) |
    |--------------------------------------------------------|
    | Min    |     407    |   7.048  |    401     |  5.958   |
    |--------------------------------------------------------|
    | Max    |     455    |   7.563  |    542     |  6.993   |
    |--------------------------------------------------------|
    | Avg    |     440    |   7.411  |    451     |  6.639   |
    |--------------------------------------------------------|
    | Median |     446    |   7.417  |    447     |  6.761   |
    |--------------------------------------------------------|
    
    Observation:
    1. The avg throughput doesn't really change much with this change for this
    scenario. This is most probably because the bottleneck on throughput is
    somewhere else.
    2. The average system (or kernel) cpu time goes down by 10%+ with this
    change, for the same amount of data transfer.
    Signed-off-by: default avatarSunil Muthuswamy <sunilmut@microsoft.com>
    Reviewed-by: default avatarDexuan Cui <decui@microsoft.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    14a1eaa8
hyperv_transport.c 25.5 KB