Abstract:
A method of modifying a priority queue configuration of a network switch is described. The method comprises configuring a priority queue configuration, monitoring a network parameter, and adjusting the priority queue configuration based on the monitored network parameter.

Description:
BACKGROUND 
       [0001]    Prior approaches for network devices use fixed queue depths. At startup time, the network device executes instructions to configure each of a set of priority queues with a predetermined number of bytes of storage, i.e., a set allocation of memory is obtained at startup for operation of the network device. 
         [0002]    If the allocated memory storage, i.e., a priority queue of the network device, is not used because the network traffic at the network device is not segmented into all eight (“8”) priority levels, the unused allocated memory space is unavailable to priority queues. 
     
    
     
       DESCRIPTION OF THE DRAWINGS 
         [0003]    One or more embodiments are illustrated by way of example, and not by limitation, in the figures of the accompanying drawings, wherein elements having the same reference numeral designations represent like elements throughout and wherein: 
           [0004]      FIG. 1  is a high-level block diagram of a network in which an embodiment may be used to advantage; 
           [0005]      FIG. 2  is a high-level functional block diagram of a network switch according to an embodiment; 
           [0006]      FIG. 3  is a functional block diagram of a memory according to an embodiment; 
           [0007]      FIG. 4  is a high-level process flow diagram of a method according to an embodiment; 
           [0008]      FIG. 5  is a high-level process flow diagram of another method according to another embodiment; and 
           [0009]      FIGS. 6   a - 6   c  are block diagrams of a state of priority queues according to an embodiment. 
       
    
    
     DETAILED DESCRIPTION 
       [0010]      FIG. 1  depicts a high-level block diagram of a network switch  100  communicatively coupled with a network device  102 , e.g., a computer system, or other networkable processing device, another network switch  104 , and a network  106 , e.g., an interconnected network of network-connected devices. Network switch  104 , in turn, is communicatively coupled with another network device  108 . Network switch may be a communication switch, hub, router, or other device for routing network traffic. For clarity and ease of explanation, a single network device  102 , a single network switch  104 , and a single network  106  are depicted as communicatively coupled with network switch  100 . In at least some embodiments, network switch  100  may be communicatively coupled with one or more of each of network device  102 , network switch  104 , and network  106 . 
         [0011]    Network switch  100  routes or forwards received traffic, comprising one or more packets of information, from an input port to an output port. For example, network switch  100  routes traffic, destined for network device  108 , received from network device  102  to network switch  104  for delivery to the destination network device. In at least some embodiments, network switch  100  routes or forwards traffic received from network device  102 , network switch  104 , and network  106  to one or more of the network device, the other network switch, and the network. 
         [0012]      FIG. 2  depicts a high-level functional block diagram of network switch  100  in conjunction with which an embodiment may be implemented. Network switch  100  comprises a processor  200  for executing instructions, a memory  202  for storing information and a set of instructions for execution by the processor, and a network interface  204  for transmitting and receiving network traffic. Network switch  100  further comprises a bus  206  communicatively coupling processor  200 , memory  202 , and network interface  204 . In at least some embodiments, memory  202  may be a volatile storage device, e.g., a random access memory (RAM) or other dynamic storage device, or a non-volatile storage device, e.g., a read only memory (ROM) or other static storage device, coupled to bus  206 . According to an embodiment, network switch  100  operates in response to processor  200  executing sequences of instructions contained in memory  202  or received from network interface  204 . Such instructions may be read into memory  202  from another readable medium, e.g., a computer-readable medium. In at least some embodiments, hard-wired circuitry may be used in place of or in combination with instructions to implement one or more embodiments. 
         [0013]    Network switch  100  also comprises network interface  204  coupled to bus  206 . Network interface  204  provides two-way data communication. In at least some embodiments, network interface  204  may be a wired and/or a wireless communication link. In at least some embodiments, network switch  100  comprises one or more network interfaces  204 . For clarity and ease of explanation, only a single network interface  204  is described in conjunction with network switch  100 . In at least some embodiments, network switch  100  comprises a network interface  204  corresponding to each port of the network switch. 
         [0014]      FIG. 3  depicts a functional block diagram of a portion of memory  202  of network switch  100  according to an embodiment. Memory  202  comprises a queue controller  300 , i.e., a set of executable instructions which, when executed by processor  200 , cause operation of network switch  100  according to an embodiment. 
         [0015]    Memory  202  further comprises a first priority queue  302  and a second priority queue  304  for storing one or more received packets of network traffic, based on a priority level of the traffic, prior to the network switch transmitting the packet. In at least some embodiments, memory  202  comprises more than two priority queues. In at least one embodiment, memory  202  comprises eight (“8”) priority queues. 
         [0016]    In at least some embodiments, network switch  100  comprises a set of input traffic priority queues and a set of output traffic priority queues. As packets are received by network switch  100 , the packets comprise an attribute such as a priority tag enabling the network switch to determine the packet priority, e.g., low latency traffic, bulk traffic, etc. After receipt and determination of the priority of the packets, network switch  100  stores the received packets in an input priority queue and then stages the packet to traverse the switch fabric and transfers the packet to an output priority queue. In at least some embodiments, a shared internal or external memory is used for storing one or more input and output priority queues. In at least some embodiments, the priority queues are configured at switch  100  startup. In at least some embodiments, network switch  100  applies the present embodiments in order to dynamically adjust the maximum depth of the priority queues to provide an improved a customer performance per traffic class with respect to unmodified priority queue depths. 
         [0017]    For clarity and ease of explanation, two priority queues are described in conjunction with memory  202 . In a given embodiment, first priority queue  302  is assigned a higher priority value than second priority queue  304 . For example, network switch  202  transmits a packet enqueued to first priority queue  302  prior to transmitting a packet from the second priority queue  304 . 
         [0018]    Queue controller  300  controls one or more parameters, e.g., the size (or depth) of each priority queue, of first priority queue  302  and second priority queue  304 . Each priority queue comprises a number of storage slots in which processor  200  stores received traffic, e.g., network packets, prior to transmission. The number of storage slots, e.g., memory space, allocated to a particular priority queue is referred to as a priority queue depth. In at least some embodiments, queue controller  300  determines the depth of a particular priority queue in order to optimize network switch  100  performance based on a particular priority level needed. For example, network traffic at a particular priority level indicating bulk transfer of data uses a deeper priority queue depth than, for example, a real time application. Based thereon, queue controller  300  configures the priority queue storing bulk transfer priority level traffic to have a greater maximum queue depth than the priority queue storing real time priority level traffic for transmission. In at least some embodiments, queue controller  300  configures the priority queue depth of each priority queue  302 ,  304  in order to balance the particular traffic and delivery needs of network switch  100 . 
         [0019]    In at least some embodiments, queue controller  300  may set a minimum priority queue depth. In at least some embodiments, queue controller  300  may set a minimum and a maximum priority queue depth. 
         [0020]    In at least some embodiments, queue controller  300  is arranged to configure the depth of the priority queues  302 ,  304  on at least one of a per port basis, a per user basis, and a per switch basis. For example, queue controller  300  configures the priority queue depth for a priority queue corresponding to a particular port of network switch  100 . In at least some embodiments, queue controller  300  configures the priority queue depth for a priority queue corresponding to a particular user connected to network switch  100 . For example, queue controller  300  may assign a particular number of priority queues per user. 
         [0021]    In at least some embodiments, queue controller  300  configures the priority queue depth for a priority queue corresponding to a particular flow of communication between two connected entities, e.g., from an application executed by network device  102  to another application executed by another network device connected to network switch  100 . In a particular embodiment, the per flow configuration may be based on a 5-tuple of information comprising, for example, an internet protocol (IP) source address/destination address (SA/DA), the communication protocol used, and the level four networking layer source port and destination port. 
         [0022]    In at least some embodiments, queue controller  300  configures the priority queue depth for a priority queue corresponding to a particular stream of communication, e.g., based on a hash of fields for discriminating the network traffic, e.g., the above-mentioned 5-tuple. 
         [0023]    Memory  202  further comprises one or more queue configurations  306  which correspond to a particular set of one or more parameters for each of first priority queue  302  and second priority queue  304 . For example, queue controller  300 , in at least some embodiments, may store one or more particular parameters of one or each of first priority queue  302  and second priority queue  304  for reuse at a future time. Additionally, in at least some embodiments, queue controller  300  may select from one or more predetermined set of parameters, e.g., a particular predetermined queue configuration, to apply to one or a combination of the priority queues  302 ,  304 . In at least some embodiments, queue controller  300  does not store queue configuration  306 . 
         [0024]    Memory  202  further comprises one or more network parameters  308  upon which queue controller  300  may modify a particular priority queue configuration. In at least some embodiments, network parameters  308  may comprise one or more traffic priorities, time samples, a history of previous priority levels, network resources available, etc. In at least some embodiments, network parameters  308  may comprise a history of queue latency, a queue fill percentage peak and/or average value, a packet drop rate, packet arrival rate, packet sizes, and/or queue overfill rate or duration. In at least some embodiments directed to adjusting maximum priority queue depth with respect to bulk traffic transfer, larger queue depths may be used in contrast to real-time network transfers. In at least some embodiments directed to adjusting maximum priority queue depth with respect to real-time applications, low latency and low jitter which correspond to smaller maximum priority queue depths may be used in contrast to bulk traffic transfers. 
         [0025]      FIG. 4  depicts a high-level process flow diagram of at least a portion  400  of a method of operation of queue controller  300  according to an embodiment. The flow begins at initialize queue configuration functionality  402  wherein queue controller  300  configures first priority queue  302  and second priority queue  304  according to a nominal or default queue depth. In at least some embodiments, execution of queue controller  300  by processor  200  causes the processor to configure first priority queue  302  and second priority queue  304  according to queue configuration  306 . 
         [0026]    The flow proceeds to monitor network parameter functionality  404  wherein execution of queue controller  300  causes processor  200  to read one or more network parameters  308  and determine whether to modify the configuration of either or both of first priority queue  302  and second priority queue  304 . If the result of the determination is negative (“NO MOD”), the flow returns to monitor network parameter functionality  404  and execution of queue controller  300  causes processor  200  to continue to monitor the one or more network parameters. 
         [0027]    If the result of the determination is positive (“MODIFY”), the flow proceeds to adjust queue config functionality  406  wherein execution of queue controller  300  causes processor  200  to modify the configuration of either or both of first priority queue  302  and second priority queue  304 . For example, queue controller  300  may increase and/or decrease the depth of one or both of the priority queues  302 ,  304 . The flow then proceeds to return to monitor network parameter functionality  404 . 
         [0028]      FIG. 5  depicts a high-level process flow diagram of at least a portion  500  of another method of operation of queue controller  300  according to another embodiment. Similar to the  FIG. 4  embodiment, the flow proceeds as described above with respect to functionality  402 ,  404 , and  406 .  FIG. 5  differs, however, in that after adjusting the configuration of a priority queue  302 ,  304 , the flow proceeds to store queue config functionality  502  wherein queue controller  300  stores the new queue configuration in queue configuration  306 . After completion of store queue config functionality  502 , the flow proceeds to return to monitor network parameter functionality  404 . 
         [0029]    In at least some embodiments, a user connecting to network switch  100  may be provided with an option of one or more selections on which dynamic queue depth algorithm to prioritize. For example, the user may be provided with one or more algorithmic selection possibilities having differing goals (such as minimum latency/best effort throughput and/or best effort latency/optimal throughput, etc.) 
         [0030]      FIGS. 6   a - 6   c  depict block diagrams of states of first and second priority queues  302 ,  304 . In particular,  FIG. 6   a  depicts first and second priority queues  302 ,  304  each comprising an equal number of storage slots  600 , i.e., the first and second priority queues comprise the same priority queue depth. In the  FIG. 6   a  state, first and second priority queues  302 ,  304  each comprise five (“5”) storage slots  600 . In at least some embodiments,  FIG. 6   a  depicts an initial, nominal state of first and second priority queues  302 ,  304 , e.g., at system startup. 
         [0031]      FIG. 6   b  depicts first priority queue  302  comprising a fewer number of storage slots  600  with respect to second priority queue  304 . For example, according to an embodiment, queue controller  300  may adjust ( FIG. 4 ,  406 ) the allocation of storage slots  600  as between first and second priority queues  302 ,  304  in order to assign second priority queue  304  a greater priority queue depth based on one or more network parameters  308 . 
         [0032]      FIG. 6   c  depicts first priority queue  302  comprising a greater number of storage slots  600  with respect to second priority queue  304 . For example, according to an embodiment, queue controller  300  may adjust ( FIG. 4 ,  406 ) the allocation of storage slots  600  as between the first and second priority queues  302 ,  304  in order to assign first priority queue  302  a greater priority queue depth based on one or more network parameters  308 .