• Haiyang Zhang's avatar
    Drivers: hv: vmbus: Fix duplicate CPU assignments within a device · 7c9ff3de
    Haiyang Zhang authored
    The vmbus module uses a rotational algorithm to assign target CPUs to
    a device's channels. Depending on the timing of different device's channel
    offers, different channels of a device may be assigned to the same CPU.
    
    For example on a VM with 2 CPUs, if NIC A and B's channels are offered
    in the following order, NIC A will have both channels on CPU0, and
    NIC B will have both channels on CPU1 -- see below. This kind of
    assignment causes RSS load that is spreading across different channels
    to end up on the same CPU.
    
    Timing of channel offers:
    NIC A channel 0
    NIC B channel 0
    NIC A channel 1
    NIC B channel 1
    
    VMBUS ID 14: Class_ID = {f8615163-df3e-46c5-913f-f2d2f965ed0e} - Synthetic network adapter
            Device_ID = {cab064cd-1f31-47d5-a8b4-9d57e320cccd}
            Sysfs path: /sys/bus/vmbus/devices/cab064cd-1f31-47d5-a8b4-9d57e320cccd
            Rel_ID=14, target_cpu=0
            Rel_ID=17, target_cpu=0
    
    VMBUS ID 16: Class_ID = {f8615163-df3e-46c5-913f...
    7c9ff3de
channel_mgmt.c 44.8 KB