• Nick Richardson's avatar
    pktgen: Add imix distribution bins · 90149031
    Nick Richardson authored
    In order to represent the distribution of imix packet sizes, a
    pre-computed data structure is used. It features 100 (IMIX_PRECISION)
    "bins". Contiguous ranges of these bins represent the respective
    packet size of each imix entry. This is done to avoid the overhead of
    selecting the correct imix packet size based on the corresponding weights.
    
    Example:
    imix_weights 40,7 576,4 1500,1
    total_weight = 7 + 4 + 1 = 12
    
    pkt_size 40 occurs 7/total_weight = 58% of the time
    pkt_size 576 occurs 4/total_weight = 33% of the time
    pkt_size 1500 occurs 1/total_weight = 9% of the time
    
    We generate a random number between 0-100 and select the corresponding
    packet size based on the specified weights.
    Eg. random number = 358723895 % 100 = 65
    Selects the packet size corresponding to index:65 in the pre-computed
    imix_distribution array.
    An example of the  pre-computed array is below:
    
    The imix_distribution will look like the following:
    0        ->  0 (index of imix_entry.size == 40)
    1        ->  0 (index of imix_entry.size == 40)
    2        ->  0 (index of imix_entry.size == 40)
    [...]    ->  0 (index of imix_entry.size == 40)
    57       ->  0 (index of imix_entry.size == 40)
    58       ->  1 (index of imix_entry.size == 576)
    [...]    ->  1 (index of imix_entry.size == 576)
    90       ->  1 (index of imix_entry.size == 576)
    91       ->  2 (index of imix_entry.size == 1500)
    [...]    ->  2 (index of imix_entry.size == 1500)
    99       ->  2 (index of imix_entry.size == 1500)
    
    Create and use "bin" representation of the imix distribution.
    Signed-off-by: default avatarNick Richardson <richardsonnick@google.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    90149031
pktgen.c 98.4 KB