A method of operating a system comprising a plurality of interface queues (110, 112,... 126) and a plurality of cores (132, 134, 136), wherein the cores are divided into two classes of cores of a high frequency and cores of a low frequency, said method comprising: assigning a packet processing thread to each core (132, 134, 136) and each core (132, 134, 136) to one or more interface queues (110, 112,... 126); initializing a bitmask (144, 146, 149) for each core (132, 134, 136), each bitmask comprising a number of bits equal to a number of the interface queues (110, 112,... 126), a bit in the bitmask being associated with an interface queue; for each of the interface queues (110, 112,... 126), monitoring either an input or an output data packet transfer rate at the interface queue (110, 112,... 126); for each of the interface queues (110, 112,... 126), based at least in part on a comparison of the data packet transfer rate at the interface queue (110, 112,... 126) to a threshold, assigning the interface queue (110, 112,... 126) from a core (132, 134) of high frequency to a core of low frequency, or assigning the interface queue (110, 112,... 126) from a core of low frequency to a core of high frequency, wherein assigning the interface queue (110, 112,... 126) from the core (132, 134) of high frequency to the core of low frequency comprises disabling the bit associated with the interface queue (110, 112,... 126) in the bitmask of the core (132, 134) of high frequency and enabling the bit associated with the interface queue (110, 112,... 126) in the bitmask of the core of low frequency, or assigning the interface queue (110, 112,... 126) from the core of low frequency to the core (132, 134) of high frequency comprises disabling the bit associated with the interface queue (110, 112,... 126) in the bitmask of the core of low frequency and enabling the bit associated with the interface queue (110, 112,... 126) in the bitmask of the core (132, 134) of high frequency. assigning a packet processing thread to each core (132, 134, 136) and each core (132, 134, 136) to one or more interface queues (110, 112,... 126); initializing a bitmask (144, 146, 149) for each core (132, 134, 136), each bitmask comprising a number of bits equal to a number of the interface queues (110, 112,... 126), a bit in the bitmask being associated with an interface queue; for each of the interface queues (110, 112,... 126), monitoring either an input or an output data packet transfer rate at the interface queue (110, 112,... 126); for each of the interface queues (110, 112,... 126), based at least in part on a comparison of the data packet transfer rate at the interface queue (110, 112,... 126) to a threshold, assigning the interface queue (110, 112,... 126) from a core (132, 134) of high frequency to a core of low frequency, or assigning the interface queue (110, 112,... 126) from a core of low frequency to a core of high frequency, wherein assigning the interface queue (110, 112,... 126) from the core (132, 134) of high frequency to the core of low frequency comprises disabling the bit associated with the interface queue (110, 112,... 126) in the bitmask of the core (132, 134) of high frequency and enabling the bit associated with the interface queue (110, 112,... 126) in the bitmask of the core of low frequency, or assigning the interface queue (110, 112,... 126) from the core of low frequency to the core (132, 134) of high frequency comprises disabling the bit associated with the interface queue (110, 112,... 126) in the bitmask of the core of low frequency and enabling the bit associated with the interface queue (110, 112,... 126) in the bitmask of the core (132, 134) of high frequency.