# Patent

## Title
Managing processor frequencies

## Abstract

Power can be conserved by managing the frequencies at which a processor operates to process data packets. For example, a pair of frequencies can be selected from among at least three candidate frequencies based on a power consumption associated with the pair of frequencies being less than another power consumption associated with another pair of frequencies selected from the at least three candidate frequencies. A clock rate of the processor can be set to a lower frequency in the selected pair of frequencies based on a number of data packets in a data buffer being below a threshold number of data packets. The clock rate of the processor can be set to a higher frequency in the selected pair of frequencies based on the number of data packets in the data buffer meeting or exceeding the threshold number of data packets.

## Background
TECHNICAL FIELD
The present disclosure relates generally to power conservation. More specifically, but not by way of limitation, this disclosure relates to conserving power by managing processor frequencies.
BACKGROUND
Computing devices can transmit data packets through a network to communicate with one another. A network-hardware component (e.g., router, hub, switch, etc.) that forms at least a portion of the physical infrastructure behind the network can process the data packets and route the data packets to their destinations. Typically, the network-hardware component will receive the data packets and add the data packets to a queue, such as a data buffer. A processor of the network-hardware component will then analyze the data packets in the queue before routing the data packets to their destinations. The amount of time it takes the processor to analyze the data packets in the queue can depend on a clock rate of the processor. For example, if the clock rate of the processor is higher, such as 2.6 Gigahertz (GHz), the processor can typically process data packets in the queue faster than if the clock rate is lower, such as 1.8 GHz.
The amount of time the processor takes to process the data packets in the queue can affect the latency of the network. For example, if the processor takes longer to process the data packets in the queue, the latency of the network generally increases. Conversely, if the processor takes less time to process the data packets in the queue, the latency of the network generally decreases. Thus, to reduce the latency of the network, the clock rate of the processor often is maintained at a higher frequency so that the processor can process the data packets more quickly.



BRIEF DESCRIPTION OF THE DRAWINGS
FIG. 1 is a block diagram of an example of a system for managing processor frequencies according to some aspects.
FIG. 2 is a block diagram of an example of a receiving computing device for managing processor frequencies according to some aspects.
FIG. 3 is a flow chart showing an example of a process for managing processor frequencies according to some aspects.
FIG. 4 is a flow chart showing an example of a process for determining information associated with a pair of frequencies according to some aspects.
FIG. 5 is a flow chart showing an example of a process for determining an amount of power consumed by a pair of frequencies according to some aspects.



DETAILED DESCRIPTION
There can be disadvantages to maintaining the clock rate of a processor at a higher frequency when attempting to reduce network latency. For example, the processor may consume significantly more power (e.g., 50% more power) when operating at a higher frequency than when operating at a lower frequency. As a particular example, the processor may consume 235 watts (W) of power when operating at 2.5 GHz, whereas the processor may only consume 160 W of power when operating at 1.8 GHz.
Some examples of the present disclosure overcome one or more of the abovementioned issues by repeatedly switching the clock rate of the processor between different frequencies, rather than maintaining the clock rate of the processor a single, high frequency. The frequencies can be selected, and the timing for switching between the frequencies can be determined, so as to respect network latency requirements and reduce the amount of power consumed by the processor. This may result in data packets being communicated through the network within an acceptable latency period and in a more power-efficient manner.
In one particular example, multiple computing devices can transmit data packets through a network to a network-hardware component, such as a router. The network-hardware component can store the data packets in a queue and monitor the number of data packets in the queue. If the number of data packets in the queue is less than a threshold, the processor can operate at a lower frequency (e.g., 1.2 GHz), in which data packets are processed at a slower rate than they are received. This may cause the queue to fill with data packets. If the number of data packets in the queue meets or exceeds the threshold, the processor can switch to operating a higher frequency (e.g., 2.6 GHz), in which data packets are processed at a faster speed than they are received. This may drain the data packets from the queue. The processor can operate at the higher frequency until the queue is empty (or until the number of data packets in the queue falls below another threshold). Based on the queue being empty (or reaching the other threshold), the processor can then switch back to operating at the lower frequency, thereby allowing the queue to fill again and reducing power consumption. The processor can continue to repeat this process, switching between the lower frequency and the higher frequency.
The lower frequency and the higher frequency can be selected from among multiple clock rates at which the processor can operate. For example, the processor may be able to operate at the following clock rates: 1.2 GHz, 1.4 GHz, 1.6 GHz, 1.8 GHz, 2.0 GHZ, 2.2 GHz, 2.4 GHz, and 2.6 GHz. The processor can form multiple pairs of frequencies from these clock rates. For example, the processor can form a first pair of frequencies that includes the frequencies 1.2 GHz and 2.6 GHz. The processor can form a second pair of frequencies that includes the frequencies 1.4 GHz and 2.4 GHz. The processor can then determine the amount of power that the processor would consume using each pair of frequencies, as discussed in greater detail below. The processor can select the pair of frequencies associated with the lowest amount of power consumption for use as the lower frequency and the higher frequency. This process may enable the processor to select the optimal pair of frequencies that results in the lowest amount of power consumption from among all of the pairs of frequencies.
In some examples, the processor can determine the threshold number of data packets for the data buffer based on a latency requirement, thereby helping to ensure that the latency requirement is met. The latency requirement can be, for example, a maximum amount of latency that the network, a computing device, an application, or any combination of these can tolerate. For example, the processor can receive user input indicating that the maximum latency that the network can tolerate is 20,000 nanoseconds (ns). The processor can also receive user input indicating that the amount of time it takes the processor to analyze a single data packet when operating at the higher frequency is 111.688 ns. The processor can divide the maximum latency (20,000 ns) by the amount of time it takes the processor to analyze a single data packet (111.688 ns) to determine that the threshold is to be 179 data packets.
These illustrative examples are given to introduce the reader to the general subject matter discussed here and are not intended to limit the scope of the disclosed concepts. The following sections describe various additional features and examples with reference to the drawings in which like numerals indicate like elements but, like the illustrative examples, should not be used to limit the present disclosure.
FIG. 1 is a block diagram of an example of a system 100 for managing processor frequencies according to some aspects. The system 100 includes a network 104 in which sending computing devices 102a-b are transmitting data packets 106a-b to a receiving computing device 102c. The receiving computing device 102c can receive the data packets 106a-b and add the data packets 106a-b to a data buffer 110 (e.g., a queue). In this example, the receiving computing device 102c is a network-hardware component (e.g., a router) that receives the data packets 106a-b from the sending computing devices 102a-b, processes the data packets 106a-b, and transmits the data packets 106a-b to a further computing device via another network connection.
The receiving computing device 102c includes a processor that can operate at two or more frequencies. For example, the processor can operate a lower frequency to process at least some of the data packets in the data buffer 110 and a higher frequency to process at least some of the data packets in the data buffer 110. In some examples, the processor can operate at the lower frequency until a number of data packets in the data buffer 110 meets or exceeds a threshold 112, at which point the processor can switch to operating at the higher frequency. The processor can operate at the higher frequency to drain the data packets from the data buffer. In some examples, the processor can continue to operate at the higher frequency until the number of data packets in the data buffer 110 falls below another threshold 114 or the data buffer 110 becomes completely empty, at which point the processor can switch back to operating at the lower frequency.
In some examples, the system 100, or a portion of the system 100, can have a latency requirement. For example, the network 104, a sending computing device 102a, the receiving computing device 102c, a software application 108 (e.g., a game, a utility application, a back-up application for backing up user data, an operating system, etc.), or any combination of these may only be able to tolerate up to a certain amount of latency. As discussed in greater detail below, the receiving computing device 102c can determine the low frequency, the high frequency, the threshold 112, the other threshold 114, or any combination of these based on the latency requirement.
In some examples, the receiving computing device 102c may be operating under a particular condition, such as a heavy data-packet load in which the receiving computing device 102c is receiving a high volume of data packets 106a-b, a light data-packet load in which the receiving computing device 102c is receiving a low volume of data packets 106a-b, a heavy processing load in which the receiving computing device 102c is processing a high volume of information, a light processing load in which the receiving computing device 102c is processing a low volume of information, etc. Additionally or alternatively, the receiving computing device 102c may be in a particular state, such as a standby mode, a network-security mode, a high-data transfer mode, a shutdown mode, a boot-up mode, etc. The receiving computing device 102c can determine the low frequency, the high frequency, the threshold 112, the other threshold 114, or any combination of these based on the condition and/or state associated with the computing device 102. For example, the receiving computing device 102c can determine one pair of frequencies to use when the receiving computing device 102c has a heavier processing load, and another pair of frequencies to use when the receiving computing device 102c has a lighter processing load.
The network 104 can include any number and combination of sub-networks. The network 104 can be wired, wireless networks, or any combination of these. Examples of the network 104 can include a local area network (LAN), a wide area network (WAN), the Internet, a cloud-computing environment, a cloud federation, a telecommunication network, a cellular network, or any combination of these.
The network 104 can also include any number and combination of computing devices 102a-c. Examples of the computing devices 102a-c can be desktop computers, laptop computers, servers, network-hardware components, mobile phones, or any combination of these. For example, the sending computing devices 102a-b can both be servers. The receiving computing device 102c can be a router for receiving the data packets 106a-b from the servers, processing the data packets 106a-b using at least two different clock frequencies, and transmitting the processed data packets to a destination.
One example of a block diagram of the receiving computing device 102c is shown in FIG. 2. As shown in FIG. 2, the receiving computing device 102c can include a processor 202 and a memory 204. In some examples, the processor 202 and memory 204 can be integrated into a single computing device. In other examples, the processor 202 and memory 204 can be distributed among two or more computing devices.
The processor 202 can execute one or more operations for managing processor frequencies. The processor 202 can execute instructions 206 stored in the memory 204 to perform the operations. The processor 202 can include one processor or multiple processors. Non-limiting examples of the processor 202 include a Field-Programmable Gate Array (FPGA), an application-specific integrated circuit (ASIC), a microprocessor, etc. In one example, the processor 202 is an Intel® Xeon® processor.
The processor 202 can be communicatively coupled to the memory 204 via a bus. The memory 204 can be non-volatile and may include any type of memory device that retains stored information when powered off. Non-limiting examples of the memory 204 include electrically erasable and programmable read-only memory (EEPROM), flash memory, or any other type of non-volatile memory. In some examples, at least some of the memory 204 can include a medium from which the processor 202 can read the instructions 206. A computer-readable medium can include electronic, optical, magnetic, or other storage devices capable of providing the processor 202 with computer-readable instructions or other program code. Non-limiting examples of a computer-readable medium include magnetic disk(s), memory chip(s), ROM, random-access memory (RAM), an ASIC, a configured processor, optical storage, or any other medium from which a computer processor can read instructions. The instructions 206 can include processor-specific instructions generated by a compiler or an interpreter from code written in any suitable computer-programming language, such as C, C++, C#, etc.
The memory 204 can store two or more candidate frequencies 210 at which the processor 202 can operate. For example, the memory 204 can store a first frequency, which may be 1.2 GHz; a second frequency, which may be 2.2 GHz; and a third frequency, which may be 1.8 GHz. In some examples, a user may have determined the candidate frequencies 210 from the processor's manual and preprogrammed the computing device 102 with the candidate frequencies 210.
The processor 202 can select at least one pair of frequencies 212 from among the candidate frequencies 210 to use to process the data packets in the data buffer 110. For example, the processor 202 can select a pair of frequencies 212 to use when the processor 202 is operating in a first state and another pair of frequencies to use when the processor 202 is operating in a second state. When the processor 202 is operating in the first state, the processor 202 can switch a clock rate 208 of the processor 202 between a lower frequency 214 in the pair of frequencies 212 and a higher frequency 216 in the pair of frequencies 212 based on the amount of data packets in the data buffer 110. And, when the processor 202 is operating in the second state, the processor 202 can switch the clock rate 208 of the processor 202 between another lower frequency in the other pair of frequencies and another higher frequency in the other pair of frequencies based on the amount of data packets in the data buffer 110. This may reduce the amount of power consumed by the processor 202 to process the data packets in the data buffer 110.
In some examples, the processor 202 can implement one or more of the abovementioned features by performing some or all of the steps described below with respect to FIG. 3. Some examples can include more, fewer, or different steps than the steps depicted in FIG. 3. The steps of FIG. 3 are described with reference to components described above with regard to FIGS. 1-2.
In block 302, the processor 202 selects, from among at least three candidate frequencies 210, a pair of frequencies 212 based on a power consumption associated with the pair of frequencies 212 being less than another power consumption associated with another pair of frequencies selected from the at least three candidate frequencies 210.
In some examples, the processor 202 can select the pair of frequencies 212 at least in part by forming multiple pairs of frequencies from among the candidate frequencies 210. For example, the processor 202 can determine every possible pair of frequencies among the candidate frequencies 210. As another example, the processor 202 can determine several of the highest-frequency candidates and several of the lowest-frequency candidates and use these frequencies to form the multiple pairs of frequencies. As still another example, the processor 202 can select the highest-frequency candidate and multiple lower-frequency candidates. The processor 202 can then form multiple pairs of frequencies that all have the selected highest-frequency candidate and at least one of the lower-frequency candidates. As yet another example, the processor 202 can select the lowest-frequency candidate and multiple higher-frequency candidates. The processor 202 can then form multiple pairs of frequencies that all have the selected lowest-frequency candidate and at least one of the higher-frequency candidates. The processor 202 can use any number and combination of techniques to form multiple pairs of frequencies from among the candidate frequencies 210.
After forming the multiple pairs of frequencies, the processor 202 can determine how much power the processor 202 would consume using each pair of frequencies. For example, the processor 202 can determine how much power the processor 202 would consume using each pair of frequencies by performing some or all of the steps shown in FIGS. 4-5. The processor 202 can then determine which pair of frequencies is associated with the lowest amount of power consumption and select that pair of frequencies.
In block 304, the processor 202 sets a clock rate 208 of the processor 202 to a lower frequency 214 in the selected pair of frequencies 212 based on a number of data packets in a data buffer 110 being below a threshold 112. The threshold 112 can be predetermined using some or all of the steps shown in FIG. 4.
For example, the processor 202 can monitor the number of data packets in the data buffer 110 to determine if the number of data packets in the data buffer 110 is below the threshold 112. If so, the processor 202 can update a value for a memory location of a local memory (of the processor 202) to indicate that the clock rate 208 is to be the lower frequency 214. The processor 202 may access the memory location and operate at the lower frequency 214 indicated by the memory location.
In block 306, the processor 202 sets the clock rate 208 of the processor 202 to a higher frequency 216 in the selected pair of frequencies 212 based on a number of data packets in a data buffer 110 meeting or exceeding the threshold 112. For example, the processor 202 can monitor the number of data packets in the data buffer 110 to determine if the number of data packets in the data buffer 110 meets or exceeds the threshold 112. If so, the processor 202 can update the value for the memory location in the local memory to indicate that the clock rate 208 is to be the higher frequency 216. The processor 202 may access the memory location and operate at the higher frequency 216 indicated by the memory location.
In some examples, the processor 202 can operate at the higher frequency 216 until the data buffer 110 is empty (or until the number of data packets in the data buffer 110 falls below another threshold 114). Based on the data buffer 110 being empty (or reaching the other threshold 114), the processor 202 can then switch back to operating at the lower frequency 214, thereby allowing the data buffer 110 to fill again and reducing power consumption. The processor 202 can continue to repeat this process, switching between the lower frequency 214 and the higher frequency 216.
FIG. 4 is a flow chart showing an example of a process for determining information associated with a pair of frequencies according to some aspects. Some examples can include more, fewer, or different steps than the steps depicted in FIG. 4. The steps of FIG. 4 are described with reference to components described above with regard to FIGS. 1-2.
In block 402, the processor 202 forms a pair of frequencies that includes a lower frequency 214 and a higher frequency 216. For example, the processor 202 can randomly select two different frequencies from among the candidate frequencies 210, and treat the two different frequencies as the pair of frequencies. And, inherently, one of the frequencies will be lower than the other. In other examples, the processor 202 can form the pair of frequencies using any of the methods discussed above with respect to block 302 of FIG. 3.
In block 404, the processor 202 determines a threshold number of data packets, such as threshold 112, associated with the pair of frequencies. The processor 202 can determine the threshold 112 based on a latency constraint and the higher frequency 216. For example, the processor 202 can receive, as user input, a latency constraint indicating that the maximum-latency period that a software application 108 can tolerate is 20,000 nanoseconds (ns). The user may be able to obtain this information based on a manual, readme file, or other data provided by a manufacturer of the software application 108. The processor 202 can also receive, as user input, the amount of time it takes the processor 202 to process a single data packet while operating at the higher frequency 216. For example, the processor 202 can receive user input indicating that the amount of time it takes the processor 202 to analyze a single data packet is 129.063 ns when the processor 202 is operating at 2.1 GHz. The user may be able to obtain this information from a manual for the processor 202. The processor 202 can then determine the amount of data packets the processor 202 can process while respecting the latency constraint. For example, the processor 202 can divide the maximum-latency period by the amount of time it takes the processor 202 to process the single data packet when the processor 202 is operating at the higher frequency 216. The result can indicate the amount of data packets the processor 202 can process within the maximum-latency period while operating at the higher frequency 216. The processor 202 can use this amount of data packets as the threshold 112.
In block 406, the processor 202 determines an amount of power consumed by the processor 202 when using the pair of frequencies. In some examples, the processor 202 can perform some or all of the steps shown in FIG. 5 to determine the power consumed by the processor 202 using the pair of frequencies. And some examples can perform more, fewer, or different steps than the steps depicted in FIG. 5.
Turning now to FIG. 5, in block 502 the processor 202 determines a fill rate at which data packets fill the data buffer 110. For example, if the network 104 has a bandwidth of 10 gigabits per second (Gbit/s) and uses 64-byte data packets, the fill rate can be determined by dividing 10 Gbit/s by (64 bytes*8 bits/byte), which results in a theoretical maximum packet rate of 1,953, 125 packets/s. As another example, if the network 104 has a bandwidth of 10 Gbit/s and uses 1500-byte data packets, the fill rate can be determined by dividing 10 Gbit/s by (1500 bytes*8 bits/byte), which results in a theoretical maximum packet rate of 83,333 packets/s. The processor 202 can perform these calculations to determine the fill rate, or can receive the fill rate as user input.
In block 504, the processor 202 determines a first drain rate associated with a lower frequency 214 and a second drain rate associated with a higher frequency 216. A drain rate can be determined via the following equation:




  
    Drain
    ⁢
    
      
    
    ⁢
    rate
  
  =
  
    1
    ProcessingTimePerPacket
  




where ProcessingTimePerPacket is the amount of time it takes the processor 202 to process a single data packet when operating at a particular frequency. For example, the processor 202 can determine that the rate at which the processor 202 can process a single data packet when operating at the lower frequency 214 is 146.813 ns/packet. For instance, a user can provide this information as user input. The processor 202 can then determine that the first drain rate is 6.811*106 packets/s by calculating the inverse of 146.813 ns/packet. The processor 202 can also determine that the rate at which the processor 202 can process a single data packet when operating at the higher frequency 216 is 111.688 ns/packet. For instance, the user can also provide this information as user input. The processor 202 can then determine that the second drain rate is 8.95*10^6 packets/s by calculating the inverse of 111.688 ns/packet.

In block 506, the processor 202 determines a first change rate associated with the lower frequency 214 based on the first drain rate and the fill rate, and a second change rate associated with the higher frequency 216 based on the second drain rate and the fill rate. A change rate can be a rate at which the data buffer 110 grows or shrinks when the processor 202 is operating at a particular frequency. The processor 202 can determine a change rate associated with a particular frequency by subtracting the drain rate associated with the particular frequency from the fill rate. For example, the processor 202 can determine that the first change rate associated with the lower frequency 214 is 1.001*106 packets/s by subtracting the first drain rate from the fill rate. The processor 202 can determine that the second change rate associated with the higher frequency 216 is 1.140*106 packets/s by subtracting the second drain rate from the fill rate.
In block 508, the processor 202 determines a fill time associated with the lower frequency 214 and a drain time associate with the higher frequency 216. The fill time can be the amount of time it takes the data buffer 110 to meet or exceed the threshold 112 when the processor 202 is operating at the lower frequency 214. The drain time can be the amount of time it takes the data buffer 110 to drain to below the other threshold 114 when the processor 202 is operating at the higher frequency 216. In some examples, the processor 202 can determine the fill time by dividing the threshold 112 by the first change rate associated with the lower frequency 214. For example, if the threshold 112 is 179 data packets, the processor 202 can determine that the fill time is 0.0017882 seconds by dividing 179 packets by 1.001*106 packets/s. The processor 202 can determine the drain time by dividing the threshold 112 by the second change rate associated with the higher frequency 216. For example, if the threshold 112 is 179 data packets, the processor 202 can determine that the drain time is 0.0001570 seconds by dividing 179 packets by 1.140*106 packets/s.
In block 510, the processor 202 determines a first amount of power associated with the lower frequency 214 and a second amount of power associated with the higher frequency 216. The first amount of power can be an amount of power consumed by the processor 202 when operating at the lower frequency 214, and the second amount of power can be an amount of power consumed by the processor 202 when operating at the higher frequency 216. An example of the first amount of power can be 160 W and an example of the second amount of power can be 235 W.
In some examples, the processor 202 can receive the first amount of power, the second amount of power, or both as user input. For example, a user can determine the first amount of power and the second amount of power using a manual provided by a manufacturer of the processor 202. As another example, the user can determine the first amount of power and the second amount of power by testing the power consumption of the processor 202 using one or more meters (e.g., a voltmeter, an ammeter, a power meter, or any combination of these). In either example, the user can then provide the first amount of power and the second amount of power as input to the processor 202.
In block 512, the processor 202 determines the power consumed using the lower frequency and the higher frequency based on the fill time, the first amount of power associated with the lower frequency 214, the drain time, the second amount of power associated with the higher frequency 216, or any combination of these. In some examples, the processor 202 can use the following equation to determine the power consumed using the lower frequency 214 and the higher frequency 216 during one cycle of processing (e.g., filling the data buffer 110 to the threshold 112 using the lower frequency 214 and then draining the data buffer 110 to below the other threshold 114 using the higher frequency 216):

Total power consumed=fillTime*powerLower+drainTime*powerHigher

where fillTime is the fill time determined in block 508, powerLower is the first amount of power determined in block 510, drainTime is the drain time determined in block 508, and powerHigher is the second amount of power determined in block 510. In one particular example, the fillTime is 0.00178876 seconds, the powerLower is 160 W, the drainTime is 0.00015693 seconds, and the powerHigher is 235 W. In such an example, the Total power consumed by the processor 202 during a single cycle of processing is 0.3231 W.

In some examples, the processor 202 can repeat some or all of the steps of FIGS. 4-5 to determine a respective threshold number of data packets associated with each pair of frequencies, a respective amount of power consumed using each pair of frequencies, or both of these. The processor 202 may then form a database that includes some or all of this information. In some examples, the processor 202 can use the database to compare the respective amounts of power consumed using each pair of frequencies to determine which pair of frequencies results in the least amount of power consumption. The processor 202 can then select that pair of frequencies (and the associated threshold 112) for use in the process of FIG. 3.
Although the examples described above include the processor 202 switching between two frequencies (a lower frequency 214 and a higher frequency 216), in other examples, the processor 202 can switch between three or more frequencies. For example, the processor 202 can begin at a first frequency, switch to a second frequency based on the number of data packets in the data buffer 110 meeting or exceeding a first threshold, and switch to a third frequency based on the number of data packets in the data buffer 110 meeting or exceeding a second threshold. The processor 202 can switch between any number and combination of frequencies based on any number and combination of thresholds. This may further reduce the total power consumed by the processor 202 to process the data packets in the data buffer 110.
The foregoing description of certain examples, including illustrated examples, has been presented only for the purpose of illustration and description and is not intended to be exhaustive or to limit the disclosure to the precise forms disclosed. Numerous modifications, adaptations, and uses thereof will be apparent to those skilled in the art without departing from the scope of the disclosure.

## Claims

1. A method comprising:
determining, by a processor, (i) a first estimate of an amount of power consumed by the processor in using a first pair of frequencies to fill and drain a data buffer and (ii) a second estimate of the amount of power consumed by the processor in using a second pair of frequencies to fill and drain the data buffer;
selecting, by the processor, the first pair of frequencies based on determining that the first estimate is less than the second estimate; and
based on selecting the first pair of frequencies:
setting, by the processor, a clock rate of the processor to a lower frequency in the first pair of frequencies based on a number of data packets in a data buffer being below a threshold number of data packets; and
setting, by the processor, the clock rate of the processor to a higher frequency in the first pair of frequencies based on the number of data packets in the data buffer meeting or exceeding the threshold number of data packets.

2. The method of claim 1, wherein the threshold number of data packets is a first threshold number of data packets, and further comprising:
after setting the clock rate of the processor to the higher frequency, maintaining the clock rate of the processor at the higher frequency until the number of data packets in the data buffer is below a second threshold number of data packets; and
based on the number of data packets in the data buffer being below the second threshold number of data packets, switching the clock rate of the processor back to the lower frequency.

3. The method of claim 2, further comprising determining the first estimate of the amount of power consumed by the processor based on (i) a first amount of power consumed by the processor at the lower frequency; (ii) a fill time in which the processor operates at the lower frequency until the number of data packets in the data buffer meets or exceeds the first threshold number of data packets; (iii) a second amount of power consumed by the processor at the higher frequency; and (iv) a drain time in which the processor operates at the higher frequency until the number of data packets in the data buffer is below the second threshold number of data packets.

4. The method of claim 3, wherein the drain time is a first amount of time for draining the data buffer from a full state comprising the threshold number of data packets to an empty state comprising no data packets, and the fill time is a second amount of time for filling the data buffer from the empty state to the full state.

5. The method of claim 3, further comprising determining the fill time by:
determining a rate at which the number of data packets in the data buffer increases by subtracting a drain rate at which data packets are removed from the data buffer when the processor is operating at the lower frequency from a fill rate at which data packets are added to the data buffer; and
determining the fill time by dividing the threshold number of data packets by the rate.

6. The method of claim 3, further comprising determining the drain time by:
determining a rate at which the number of data packets in the data buffer decreases by subtracting a drain rate at which data packets are removed from the data buffer when the processor is operating at the higher frequency from a fill rate at which data packets are added to the data buffer; and
determining the drain time by dividing the threshold number of data packets by the rate.

7. The method of claim 1, further comprising determining the threshold number of data packets by:
receiving a maximum-latency period indicating a maximum amount of latency allowable by a software application;
determining an amount of latency associated with processing a single data packet at the higher frequency;
dividing the maximum-latency period by the amount of latency associated with the single data packet to determine an amount of data packets that the processor processes within the maximum-latency period; and
using the amount of data packets as the threshold number of data packets.

8. The method of claim 1, further comprising:
prior to selecting the first pair of frequencies, determining that the processor is in a particular mode of operation among a plurality of possible modes of operation; and
selecting the first pair of frequencies based at least in part on determining that the processor is in the particular mode of operation.

9. The method of claim 8, wherein the particular mode of operation comprises a standby mode, a network security mode, a high-data transfer mode, a shutdown mode, or a boot-up mode.

10. The method of claim 1, wherein the first estimate is of the amount of power consumed the processor in using the first pair of frequencies to implement a fill-drain cycle that includes (i) the processor operating at the lower frequency to enable the data buffer to fill to the threshold number of data packets, and (ii) the processor operating at the higher frequency to drain the data buffer to below another threshold number of data packets.

11. A non-transitory computer readable medium comprising program code that is executable by a processor to cause the processor to:
determine (i) a first estimate of an amount of power consumed by the processor in using a first pair of frequencies to fill and drain a data buffer and (ii) a second estimate of the amount of power consumed by the processor in using a second pair of frequencies to fill and drain the data buffer;
select the first pair of frequencies based on determining that the first estimate is less than the second estimate; and
based on selecting the first pair of frequencies:
set a clock rate of the processor to a lower frequency in the first pair of frequencies based on a number of data packets in a data buffer being below a threshold number of data packets; and
set the clock rate of the processor to a higher frequency in the first pair of frequencies based on the number of data packets in the data buffer meeting or exceeding the threshold number of data packets.

12. The non-transitory computer readable medium of claim 11, wherein the threshold number of data packets is a first threshold number of data packets, and further comprising program code that is executable by the processor to cause the processor to:
after setting the clock rate of the processor to the higher frequency, maintain the clock rate of the processor at the higher frequency until the number of data packets in the data buffer is below a second threshold number of data packets; and
based on the number of data packets in the data buffer being below the second threshold number of data packets, switch the clock rate of the processor back to the lower frequency.

13. The non-transitory computer readable medium of claim 12, further comprising program code that is executable by the processor to cause the processor to:
determine the first estimate of the amount of power consumed by the processor based on (i) a first amount of power consumed by the processor at the lower frequency; (ii) a fill time in which the processor operates at the lower frequency until the number of data packets in the data buffer meets or exceeds the first threshold number of data packets; (iii) a second amount of power consumed by the processor at the higher frequency; and (iv) a drain time in which the processor operates at the higher frequency until the number of data packets in the data buffer is below the second threshold number of data packets.

14. The non-transitory computer readable medium of claim 13, wherein the drain time is a first amount of time for draining the data buffer from a full state comprising the threshold number of data packets to an empty state comprising no data packets, and the fill time is a second amount of time for filling the data buffer from the empty state to the full state.

15. The non-transitory computer readable medium of claim 13, further comprising program code that is executable by the processor to cause the processor to determine the fill time by:
determining a rate at which the number of data packets in the data buffer increases by subtracting a drain rate at which data packets are removed from the data buffer when the processor is operating at the lower frequency from a fill rate at which data packets are added to the data buffer; and
determining the fill time by dividing the threshold number of data packets by the rate.

16. The non-transitory computer readable medium of claim 13, further comprising program code that is executable by the processor to cause the processor to determine the drain time by:
determining a rate at which the number of data packets in the data buffer decreases by subtracting a drain rate at which data packets are removed from the data buffer when the processor is operating at the higher frequency from a fill rate at which data packets are added to the data buffer; and
determining the drain time by dividing the threshold number of data packets by the rate.

17. The non-transitory computer readable medium of claim 11, further comprising program code that is executable by the processor to cause the processor to determine the threshold number of data packets by:
receiving a maximum-latency period indicating a maximum amount of latency allowable by a software application;
determining an amount of latency associated with processing a single data packet at the higher frequency;
dividing the maximum-latency period by the amount of latency associated with the single data packet to determine an amount of data packets that the processor processes within the maximum-latency period; and
using the amount of data packets as the threshold number of data packets.

18. A system comprising:
a processor; and
a memory on which instructions executable by the processor are stored to cause the processor to:
determine (i) a first estimate of an amount of power consumed by the processor in using a first pair of frequencies to fill and drain a data buffer and (ii) a second estimate of the amount of power consumed by the processor in using a second pair of frequencies to fill and drain the data buffer;
select the first pair of frequencies based on determining that the first estimate is less than the second estimate; and
based on selecting the first pair of frequencies:
set a clock rate of the processor to a lower frequency in the first pair of frequencies based on a number of data packets in a data buffer being below a threshold number of data packets; and
set the clock rate of the processor to a higher frequency in the first pair of frequencies based on the number of data packets in the data buffer meeting or exceeding the threshold number of data packets.

19. The system of claim 18, wherein the threshold number of data packets is a first threshold number of data packets, and-wherein the memory further comprises instructions that are executable by the processor to cause the processor to:
after setting the clock rate of the processor to the higher frequency, maintain the clock rate of the processor at the higher frequency until the number of data packets in the data buffer is below a second threshold number of data packets; and
based on the number of data packets in the data buffer being below the second threshold number of data packets, switch the clock rate of the processor back to the lower frequency.

20. The system of claim 19, wherein the memory further comprises instructions that are executable by the processor to cause the processor to:
determine the first estimate of the amount of power consumed by the processor based on (i) a first amount of power consumed by the processor at the lower frequency; (ii) a fill time in which the processor operates at the lower frequency until the number of data packets in the data buffer meets or exceeds the first threshold number of data packets; (iii) a second amount of power consumed by the processor at the higher frequency; and (iv) a drain time in which the processor operates at the higher frequency until the number of data packets in the data buffer is below the second threshold number of data packets.

21. The system of claim 20, wherein the drain time is a first amount of time for draining the data buffer from a full state comprising the threshold number of data packets to an empty state comprising no data packets, and the fill time is a second amount of time for filling the data buffer from the empty state to the full state.