Desynchronizing throttled communication connections

By desynchronizing the throttling times of individual connections using a mathematical transform, the system addresses burstiness issues, enhancing server efficiency and maintaining consistent workload distribution.

WO2025174363A1PCT designated stage Publication Date: 2025-08-21HITACHI VANTARA LLC
View PDF 5 Cites 0 Cited by

Patent Information

Application Number
PCT/US2024/015700
Authority / Receiving Office
WO · WO
Patent Type
Applications
Current Assignee / Owner
Filing Date
2024-02-14
Publication Date
2025-08-21

AI Technical Summary

Technical Problem

Existing network communication systems experience burstiness due to synchronized throttling of connections at the start of each sample period, leading to inefficient server utilization.

Method used

Implementing a mathematical transform to desynchronize the throttling times of individual connections by converting connection identifiers into unique synchronization times, allowing each connection to have its own unique sample period start and end time, thereby reducing burstiness.

Benefits of technology

This approach reduces burstiness and improves server utilization by ensuring that connections are not all unthrottled simultaneously, maintaining a consistent workload and preventing sudden spikes in activity.

✦ Generated by Eureka AI based on patent content.

Smart Images

  • Figure US2024015700_21082025_PF_FP_ABST
    Figure US2024015700_21082025_PF_FP_ABST
Patent Text Reader

Abstract

In some examples, a computing device receives a request corresponding to a communication connection. The computing device determines a connection number corresponding to the communication connection. The computing device determines a sample period start time and / or stop time based at least on a function of the connection number. Furthermore, the computing device performs at least one action to cease throttling the communication connection based at least on the sample period start time and / or stop time.
Need to check novelty before this filing date? Find Prior Art

Description

DESYNCHRONIZING THROTTLED COMMUNICATION CONNECTIONSTECHNICAL FIELD

[0001] This disclosure relates generally to managing electronic communications, such as managing a number of requests that may be received by a computing device.BACKGROUND

[0002] A network-attached file server may have many network communication connections, such as Transmission Control Protocol / Internet Protocol (TCP / IP) connections or the like. TCP / IP is part of the Internet protocol suite of communication protocols used for communication over the Internet and similar computer networks. The Internet protocol suite provides end-to-end data communication capability, and specifies how data should be packetized, addressed, transmitted, routed, and received.

[0003] To avoid overwhelming a file server, some communication connections may be “throttled” such as by limiting the number of operations per second, bytes per second, and the like. For instance, when a connection exceeds its limit during any sample period, the server may throttle that connection, such as by refusing further requests for that connection for a remaining time of the sample period. At the start of the next sample period, the connection may be unthrottled and new requests are then freely accepted. However, this arrangement can lead to burstiness because at the start of the next sample period all the throttled connections may be unthrottled at the same time, which can result in the server receiving a huge number of new requests that have been waiting while the respective connections for those requests were throttled off. In some cases, this burstiness may be worse for achieving efficient server utilization than would be the case if no throttling at all were used.SUMMARY

[0004] Some implementations herein include a computing device that receives a request corresponding to a communication connection. The computing device determines a connection number corresponding to the communication connection. The computing device determines a sample period start time and / or stop time based at least on a function of the connection number.Furthermore, the computing device performs at least one action to cease throttling the communication connection based at least on the sample period start time and / or stop time.BRIEF DESCRIPTION OF THE DRAWINGS

[0005] The detailed description is set forth with reference to the accompanying figures. In the figures, the left-most digit(s) of a reference number identifies the figure in which the reference number first appears. The use of the same reference numbers in different figures indicates similar or identical items or features.

[0006] FIG. 1 illustrates an example architecture of a system in which desynchronization of throttled connections may be implemented according to some of the examples herein.

[0007] FIG. 2 illustrates an example logical and hardware configuration of at least a portion of the hardware communication interface according to some implementations.

[0008] FIG. 3 illustrates an example of using logic gates to convert a connection number into a microsecond time according to some implementations.

[0009] FIG. 4 illustrates a continuation of the example of using logic gates to convert a connection number into a microsecond time according to some implementations.

[0010] FIG. 5 is a flow diagram illustrating an example process for converting a connection number to a microsecond time according to some implementations.

[0011] FIG. 6 illustrates an example of using logic gates to convert a microsecond time into a connection number according to some implementations.

[0012] FIG. 7 illustrates a continuation of the example of using logic gates to convert a microsecond time into a connection number according to some implementations.

[0013] FIG. 8 is a flow diagram illustrating an example process for converting a current microsecond time to a connection number according to some implementations.DESCRIPTION OF THE EMBODIMENTS

[0014] Some implementations herein include techniques and arrangements for desynchronizing the times at which connections to a computing device such as a server are throttled off and on, so that the connections are not all synchronized to the same sample period. The desynchronization techniques employed herein may reduce burstiness of connections, resulting in better server utilization.

[0015] Some examples herein may achieve desynchronization of connections using a novel mathematical transform for transforming individual connection identifiers into corresponding synchronization times. The mathematical transform herein may be two-way and may be used to convert in both directions, e.g., (1) convert from a unique connection identifier to a corresponding time, so that the server can tell when a sample period is starting and ending for the particular connection, and (2) convert the current time to a corresponding unique connection identifier so that the server can determine whether a connection is ending its sample period, and, if so, identify which connection is to be unthrottled. For instance, there may be a threshold number of requests that may be permitted for each communication connection during the sample period, and if that threshold is exceeded, the communication connection may be throttled until the end of the sample period. For example, throttling may include at least one of delaying receipt of requests or delaying processing of requests received from the throttled communication connection. In some cases, the server may send an instruction to the computing device corresponding to the throttled connection to instruct the computing device to delay sending any more requests to the server.

[0016] Examples herein include an advantage that each connection can have its own unique sample period start time and end time so that all connections are desynchronized from each other. Another advantage is that states of the connections do not need to be stored in a memory or the like in order to determine the sample period start and end time to be used for each connection. An additional advantage is that implementations herein may be implemented very easily in hardware, such as in a hardware communication interface that includes a large number of logic gates and / or other types of electronic logic circuits that are configured to perform the operations described herein.

[0017] The implementations herein solve the problem that occurs when a server unthrottles all of its connections concurrently at the start of a new sample period, which can generate a large burst of activity as each connection is able to start sending requests again, including requests that may have built up while the connections were throttled off. If all connections are synchronized to the same sample period start and end time, there will be a huge burst of activity at the start of each new sample period, since the connections that have been throttled off are then allowed to send requests to the server again. The aim of throttling connections is to avoid overwhelming the server. However, throttling connections synchronized to the same sample period start and end time can have the opposite of the desired effect. Such synchronized throttling introduces high bursts ofactivity followed by periods of no activity. This arrangement may be worse for the server than not implementing any throttling.

[0018] For discussion purposes, some example implementations are described in the environment of one or more service computing devices in communication with one or more client devices and one or more storages. However, implementations herein are not limited to the particular computing system examples provided, and may be extended to other types of computing systems, other types of client-server environments, other types of storage environments, other hardware configurations, other system architectures, and so forth, as will be apparent to those of skill in the art in light of the disclosure herein. Additionally, in some examples herein, a sample period of one second is described as an example, however, implementations herein are not limited to any particular sample period.

[0019] FIG. 1 illustrates an example architecture of a system 100 in which desynchronization of throttled connections may be implemented according to some of the examples herein. The system 100 includes one or more service computing device(s) 102 able to communicate with one or more storages 108 over one or more storage networks 110. The service computing device(s) 102 may provide processing capacity and storage access to a plurality of client devices 114 able to communicate over one or more client-side networks 112. In the case of multiple service computing devices 102, the service computing devices 102 may typically be connected to each other through a private network, high-speed interconnects, and / or other suitable high-speed networking technology (not shown in FIG. 1). For example, the system 100 may allow external access through various front-end protocols that may run on the service computing device(s) 102. In some cases, the form of access may be through TCP / IP protocols and / or other standard protocols and / or proprietary protocols. For instance, while some examples herein are described in the environment of TCP / IP protocol, the examples described herein may be employed with various other protocols that may be used for communication over one or more networks.

[0020] As illustrated in FIG. 1, the service computing device(s) 102 may be in communication with, or otherwise coupled to the storage(s) 108 through the one or more storage networks 110. Further, the service computing device(s) 102 may be able to communicate over the one or more client-side networks 112 with the one or more client devices 114, such as user devices or other devices that may access the service computing device(s) 102. For example, the client devices 114 may each establish connections with the service computing device(s) 102 and, through theconnections, may send requests 115 to the service computing device(s) 102. In response, the service computing device(s) 102 may provide replies 117 or perform other actions such as, in the illustrated example, storing or retrieving data. Thus, in some cases, the service computing device(s) 102 may store and manage data for the client devices 114, but the examples herein are not limited to any particular use case.

[0021] In some examples, the service computing device(s) 102 may include a plurality of physical servers or other types of computing devices that may be embodied in any number of ways. For instance, in the case of a server, the modules, programs, other functional components, and a portion of data storage may be implemented on the servers, such as in a cluster of servers, e.g., at a server farm or data center, a cloud-hosted computing service, and so forth, although other computer architectures may additionally or alternatively be used. In the illustrated example, each service computing device 102 includes, or may have associated therewith, one or more processors 116, one or more communication interfaces 118, and one or more computer-readable media 120. Further, while a description of one service computing device 102 is provided, the other service computing device(s) 102, if included, may have the same or similar hardware and software configurations and components, or, in other examples, different hardware and / or software configurations..

[0022] Each processor 116 may be a single processing unit or a number of processing units, and may include single or multiple computing units or multiple processing cores. The processor(s) 116 can be implemented as one or more central processing units, microprocessors, microcomputers, microcontrollers, system-on-chip processors, digital signal processors, state machines, logic circuitries, and / or any devices that manipulate signals based on operational instructions. For instance, the processor(s) 116 may be one or more hardware processors and / or logic circuits of any suitable type specifically programmed or configured to execute the algorithms and processes described herein. The processor(s) 116 can be configured to fetch and execute computer-readable instructions stored in the computer-readable media 120, which can program the processor(s) 116 to perform the functions described herein.

[0023] The computer-readable media 120 may include volatile and nonvolatile memory and / or removable and non-removable media implemented in any type of technology for storage of information such as computer-readable instructions, data structures, program modules, or other data. For example, the computer-readable media 120 may include, but is not limited to, RAM,ROM, EEPROM, flash memory or other memory technology, optical storage, solid state storage, magnetic tape, magnetic disk storage, RAID storage systems, storage arrays, network attached storage, storage area networks, cloud storage, or any other medium that can be used to store the desired information and that can be accessed by a computing device. Depending on the configuration of the service computing device 102, the computer-readable media 120 may be a tangible non-transitory medium to the extent that, when mentioned, non-transitory computer- readable media exclude media such as energy, carrier signals, electromagnetic waves, and / or signals per se. In some cases, the computer-readable media 120 may be at the same location as the service computing device 102, while in other examples, the computer-readable media 120 may be separate or partially remote from the service computing device 102.

[0024] The computer-readable media 120 may be used to store any number of functional components that are executable by the processor(s) 116. In many implementations, these functional components comprise instructions, modules, or programs that are executable by the processor(s) 116 and that, when executed, specifically program the processor(s) 116 to perform the actions attributed herein to the service computing device 102. Functional components stored in the computer-readable media 120 may include a service application 122, an operating system (OS) 124, a filesystem manager program 126, and a communication manager program 128, each of which may include one or more computer programs, applications, executable code, computer- readable instructions, or portions thereof. For example, the filesystem manager program 126 and / or the communication manager program 128 may be modules of the OS 124, modules of the service application 122, or may run independently on top of the OS 124. As discussed additionally below, the communication manager program 128 may interact with the communication interfaces 118 to facilitate the connection throttling described herein. Additionally, the filesystem manager program 126 may manage a filesystem 127 that is used for organizing the data stored on the storages 108.

[0025] Furthermore, the service application 122 may be executed by the processors(s) 116 for performing various data processing and communication tasks, such as for interacting with the client devices 114, storing data for the client devices 114 in the storage(s) 108, and / or for providing the client devices 114 with access to the data stored in the storage(s) 108. For instance, the service application 122 may configure the service computing device(s) 102 to act as a file server, and to provide one or more services that may include namespace management, process management, extent allocation management, lock management, replication / data movement sessionmanagement, and load balancing. Additionally, the OS 124 may control and manage various functions of the service computing device 102.

[0026] In addition, the computer-readable media 120 may store data and data structures used for performing the functions and services described herein. For example, the computer-readable media 120 may store data, metadata, data structures, and / or other information used by the software filesystem manager 126, the service application 122, and / or the OS 124. The service computing device 102 may also include or maintain other functional components and data, which may include programs, drivers, etc., and other data used or generated by the functional components. Further, the service computing device 102 may include many other logical, programmatic, and physical components, of which those described above are merely examples that are related to the discussion herein.

[0027] The communication interface(s) 118 may include one or more interfaces and hardware components for enabling communication with various other devices, such as over the network(s) 110 and 112. The communication interfaces in this example include at least one software communication interface 129 and at least one hardware communication interface 130. As discussed additionally below, the hardware communication interface 130 includes a plurality of logic circuits that may be configured to perform the various functions discussed herein for managing throttling of connections with client devices 114. The communication interfaces 118 may include, or may couple to, one or more ports that provide connection to other service computing device(s) 102 and / or to the storage network(s) 110 for communicating with the storage(s) 108, and / or to the client-side network(s) 112 for communication with the client devices 114. Accordingly, the communication interface(s) 118 may enable communication through one or more of a LAN (local area network), WAN (wide area network), the Internet, cable networks, cellular networks, wireless networks (e.g., Wi-Fi) and wired networks (e.g., Fibre Channel, fiber optic, Ethernet), direct connections, as well as close-range communications such as BLUETOOTH®, and the like, as additionally enumerated elsewhere herein.

[0028] The storage network(s) 110 and client-side network(s) 112 may include any suitable communication technology, including a WAN, such as the Internet; a LAN, such as an intranet; a wireless network, such as a cellular network, a local wireless network, such as Wi-Fi, and / or a short-range wireless communications, such as BLUETOOTH®; a wired network including Fibre Channel, fiber optics, Ethernet, or any other such network, a direct wired connection, or anycombination thereof. As one example, the storage network(s) 110 may employ Fibre Channel technology or other suitable storage networking technology. In addition, as an example, the client- side network(s) 112 may include the Internet, a LAN, a WAN or combination thereof. However, implementations herein are not limited to any particular networking technologies. Thus, the networks 110 and 112 may include wired and / or wireless communication technologies. In addition, the networks 110 and / or 112 may include a storage support network that enables external administrative access to the service computing device(s) 102 via a management computer system, such as may be implemented using one of the client devices 114 or other suitable computing device. Components used for the networks 110 and 112 can depend at least in part upon the type of network, the environment selected, desired performance, and the like. For instance, one or more of the networks 110 and / or 112 may include forwarding devices, such as switches or sets of switches. Further, in some examples, some or all of the networks 110, 112 may be the same network.

[0029] Each client device 114 may be any suitable type of computing device such as a desktop, workstation, server, laptop, tablet computing device, mobile device, smart phone, wearable computing device, or any other type of computing device able to send data over a network. For instance, the client devices 114 may generate data or otherwise provide data that is sent to the service computing device(s) 102 for data storage, backup storage, long term remote storage, or any other sort of data storage. In some cases, the client device(s) 114 may include hardware configurations similar to that described for the service computing device 102, but with different data and functional components to enable the client device(s) 114 to perform the various functions discussed herein. In some cases, a user may be associated with a respective client device 114, such as through a user account, user login credentials, or the like.

[0030] Each client device 114(1)-114(M) may access one or more of the service computing device(s) 102 through a respective instance of a client application 131(1)-131(M), such as a browser or other application executed on the client device 114. For instance, the client application 131 may provide a graphic user interface (GUI), a command line interface, and / or may employ an application programming interface (API) for communicating with the service application 122 on a service computing device(s) 102. Accordingly, each of the client devices may establish a connection with the service computing devices 102 for sending the requests 115 and receiving the replies 117. Furthermore, while one example of a client-server configuration is described herein,numerous other possible variations and applications for the computing system 100 herein will be apparent to those of skill in the art having the benefit of the disclosure herein.

[0031] The storage(s) 108 may provide storage capacity for the service computing device(s) 102 for storage of data, such as file data or other object data, and which may include data content and metadata about the content. The storage(s) 108 may include storage arrays such as network- attached storage (NAS) systems, storage area network (SAN) systems, or storage virtualization systems. Further, the storage(s) 108 may be co-located with one or more of the service computing device(s) 102, or may be remotely located or otherwise external to the service computing device(s) 102.

[0032] In the illustrated example, the storage(s) 108 includes one or more storage computing devices referred to as storage controller(s) 132, which may include one or more servers or any other suitable computing devices, such as any of the examples discussed above with respect to the service computing device(s) 102. The storage controller(s) 132 may each include one or more processors 134, one or more computer-readable media 136, and one or more communication interfaces 138. For example, the processor(s) 134 may correspond to any of the examples discussed above with respect to the processors 116, the computer-readable media 136 may correspond to any of the examples discussed above with respect to the computer-readable media 120, and the communication interfaces 138 may correspond to any of the examples discussed above with respect to the communication interfaces 118.

[0033] Further, the computer-readable media 136 of the storage controller 132 may be used to store any number of functional components that are executable by the processor(s) 134. In many implementations, these functional components comprise instructions, modules, or programs that are executable by the processor(s) 134 and that, when executed, specifically program the processor(s) 134 to perform the actions attributed herein to the storage controller 132. Functional components stored in the computer-readable media 136 may include a storage management program 140 and an OS 142, each of which may include one or more computer programs, applications, executable code, computer-readable instructions, or portions thereof. For example, the storage management program 140 may control or otherwise manage the storage of the data in a plurality of storage devices 144 coupled to the storage controller 132. The OS 142 may control and manage various functions of the storage controller 132.

[0034] In addition, the storage devices 144 may, in some cases, include one or more arrays 146(1)-146(L) of physical storage devices 148. For instance, the storage controller 132 may control one or more arrays 146, such as for configuring the arrays in a RAID (redundant array of independent disks) configuration, JBOD (just a bunch of disks) configuration, or any other desired storage configuration. The storage controller 132 may present logical units based on the physical devices to the service computing device(s) 102, and may manage the data stored on the underlying physical devices 148. The physical devices 148 may be any type of storage device, such as hard disk drives, solid state devices, optical devices, magnetic tape, and so forth, or combinations thereof. In some examples, the storage(s) 108 may include thin-provisioning capability configured to provide on-demand storage capacity, may include failover protection, automated replication, backup, archiving, or the like. Alternatively, in other examples, one or more of the service computing device(s) 102 may act as the storage controller, and the storage controller 132 may be eliminated.

[0035] In the illustrated example, the service computing device(s) 102 and storage(s) 108 are configured to act as a data storage system 150 for the client devices 114. However, the connection throttling techniques described herein may be applied on numerous other types of computer systems. The service application 122 on the service computing device(s) 102 may be executed to receive and store data from the client devices 114 on the storage(s) 108 and / or subsequently retrieve the data from the storage(s) 108 and provide the data to the client devices 114.

[0036] As mentioned above, one or more of the service computing devices 102 includes the hardware communication interface 130 which may include a plurality of logic circuits, such as field-programmable gate arrays (FPGAs) including at least some FPGAs configured as flip-flops (also sometimes referred to as registers), and which are capable of indicating a binary bit value (i.e., a “0” or a “1” value). In some cases, the FPGA(s) may be configured using a hardware description language (HDL) to perform the operations described herein. In some examples, the FPGA(s) may contain an array of programmable logic blocks that are configured by the HDL to perform at least a portion of the operations discussed herein in cooperation with the communication manager program 128.

[0037] In the examples herein, the hardware communication interface 130 may be configured to perform desynchronized throttling of connections with the client devices 114 to even out the processing load on the service computing devices 102. Thus, in some examples, each connectioncan have its own unique sample period start time and end time so that all connections are desynchronized from each other. The hardware communication interface 130 may perform the desynchronization of connections using a mathematical transform for transforming individual connection identifying numbers into corresponding synchronization times. As one example, suppose that the sample period for throttling in some implementations herein is one second, and that each second is divided into microseconds such that each microsecond has a value between 0 and 999,999 (which may be expressed with 20 bits in binary). Additionally, while a sample period of one second is used in this example, the sample period may be longer or shorter and does not need to be one second. Additionally, the time unit does not need to be one microsecond, and there can be more or fewer TCP connections, with the foregoing being just examples provided for discussion purposes.

[0038] Additionally, in some examples herein, there may be 65536 connections, with each connection assigned a unique connection number between 0 and 65535 (16 bits in base 2). However, implementations here are not limited to any particular number of connections. Accordingly, the number of connections may be larger or smaller in other examples.

[0039] Based on the above assumptions, examples herein employ a technique that uses logic circuits to track the one-second sample period start and end time, in microseconds, staggered at a length of time of approximately 1,000,000 microseconds divided by 65536 connections which enables approximately 15 microsecond intervals between sample period start times for connections. In hardware terms, 15 microseconds is a reasonably long time.

[0040] Additionally, if two connections are opened at the same time, then they may be assigned adjacent connection identification numbers. Also, while the two connections were opened at the same time, the transform employed herein may spread them as far as possible apart. So the transform starts by reversing the order of the bits in the connection number. This has the effect of making the least significant bits, the most significant bits, as discussed additionally below, e.g., with respect to FIGS 3-5. In this way, two connection numbers that only differ in their bottom bits are spread far apart. In addition, since the intervals are approximately 15 microseconds apart, the bit-swapped connection number may be multiplied by 15. However, since transform is a two-way process, it would then be necessary to divide by 15, which is possible in hardware, but to make the operation simpler in hardware terms, a better divisor would be 16, since multiplication and divisionof number 16 may be perform with a simple shifting of bits. So next the transform multiplies the bit-reversed connection number by 16.

[0041] One issue to be addressed is that the maximum connection number of 65535 multiplied by 16 = 1,048,560 microseconds, which is more than the 1,000,000 microseconds in a second. So the transform herein takes this into consideration to cope with values that fall outside of the 1,000,000 microseconds in a second range. For example, there are only (1,048,560 - 1,000,000) / 16 = 3,035 values that fall outside of the acceptable range, out of 65,536, which is approximately four percent. Since the bit-reversed connection number is multiplied by 16, the bottom 4 bits of the result will always be 0. So the transform herein may encode this wrapping of values outside of the acceptable range by setting one of the bottom bits that should normally be “0” to “1”. So the transform herein sets bit 3 (the 4th Least Significant Bit) to “1” in order to denote a wrapped value. This setting of bit 3 to a “1” for four percent of the connections means that eight percent of the connections have their sample period start and end eight microseconds away from other connections, while 92 percent of connections start and end 16 microseconds away from other connections. Thus, the sample period start and end times (corresponding to at least a throttling stop time) for the communication connection are effectively desynchronized.

[0042] Furthermore, the mathematical transform herein may be used to convert information in both directions, e.g., convert from a unique connection number to a corresponding time, and convert the current time to a corresponding unique connection identifier. Thus, the server can determine whether a particular connection is ending its sample period, and, if so, identify which connection is to be unthrottled. Accordingly, individual connections may each have sample period start and stop times that are different from the sample period start and stop times of the other connections of a plurality of connections. Consequently, as discussed additionally below, the techniques and arrangements herein may improve the efficiency of operation of the service computing device(s) 102 for processing requests 115 received from the client devices 114.

[0043] In addition, the computer system 100 is not limited to the particular configuration illustrated in FIG. 1. This configuration is included for the purposes of illustration only. V arious examples herein utilize a variety of hardware components, software components, and combinations of hardware and software components that are configured to perform the processes and functions described herein. For example, some or all of the service computing device(s) 102 may include virtual machines operating on the one or more hardware processors 116 or portionsthereof. Numerous other hardware and software configurations will be apparent to those of skill in the art having the benefit of the disclosure herein. Thus, the scope of the examples disclosed herein is not limited to a particular set of computing hardware, software, or a combination thereof.

[0044] FIG. 2 illustrates an example logical and hardware configuration of at least a portion of the hardware communication interface 130 according to some implementations. For instance, the logical and hardware configuration in this example includes the operations performed for each connection between the service computing device 102 and a respective client device 114 (not shown in FIG. 2). The example logical and hardware configuration of FIG. 2 is divided into three areas, namely a received packet processing logic and hardware 202, TCP header processing logic and hardware 204 (which includes the throttle processing logic and hardware 206), and transmit packet processing logic and hardware 208, each of which is discussed additionally below.

[0045] In this example, suppose at 210, the hardware communication interface 130 receives communications from the network. Blocks 212-220 describe operations and hardware for dealing with received packets. At 212, logic gates receive and copy the data into the next free buffer 213. For example, the logic gates at 212 that receive packets from the network and copy the data into buffers 213 have access to free buffers 213. The logic gates at 213 allocate a free buffer 213 for a received network packet and copy the data into the allocated buffer 213.

[0046] Logic gates at 214 check that the packet is properly formed (e.g., has a good checksum and is of the correct length, etc.). If the packet is bad, then the logic gates at 214 send a “bad packet” signal to block 220 and the logic gates at 220 free up the buffer 213 corresponding to the bad packet.

[0047] The logic gates at 216 check whether the packet address in the packet matches one of the addresses of the service computing device 102. For example, the logic gates at 216 may check the packet address in comparison to server addresses in an address RAM 217 to determine if there is a match. If there is not a match, then the logic gates at 216 send a “bad packet” signal to block 220 and the logic gates at 220 free up the buffer 213 corresponding to the bad packet. In some examples, the address RAM 217 may contain all of the addresses that belong to the service computing device 102.

[0048] The logic gates at 218 parse (decode) the TCP header in the packet. If the packet does not have a TCP header or if the TCP header makes no sense, then the logic gates at 218 send a “bad packet” signal to block 220 and the logic gates at 220 free up the buffer 213 correspondingto the bad packet. Furthermore, in addition to being configured to free up the buffer 213 when a bad packet is detected, the logic gates at 220 may also receive requests from the rest of the system as indicated at 219 when the rest of the system has finished with the data in a good packet.

[0049] The logic gates at 222 gates access a connection RAM 221 with all of the connection details in it and try to find a matching connection in the connection RAM 221 based on the TCP header information. If the connection corresponding to the TCP header of the current packet is in the connection RAM 221, then the logic gates at 222 are able to determine the connection number from the connection RAM 221. If the logic gates at 222 are not able to locate the connection in the connection RAM 221, then the logic gates at 222 may allocate a free connection number and add the connection number to the connection RAM 221 in association with the TCP header information. Either way, from this point on, the connection can be referenced according to its connection number by the rest of the system at 223.

[0050] Blocks 224-232 are examples of the throttle processing logic and hardware according to some implementations herein. These blocks of logic circuits convert from the connection number into a microsecond time and vice versa. Additional details are discussed below with respect to FIGS. 3-8.

[0051] The logic gates at 224 receive the connection number from the logic gates at 222 and convert the connection number into a microsecond time. The converted microsecond time indicates the start / end time of the sample period for the particular connection. Details of the conversion are discussed below with respect to FIGS. 3 to 5.

[0052] The logic gates at 226 count the number of seconds since the service computing device 102 booted up. For example, the logic gates at 226 may receive a one second pulse 227 every second, such as from a processor clock or the like, and may increment a counter for each received pulse.

[0053] Similarly, the logic gates at 228 count the microsecond time within a current second. For example, the logic gates at 228 may receive a one microsecond pulse 229, such as from the CPU clock, every microsecond and may increment a counter based on the received microsecond pulse.

[0054] The logic gates at 230 may receive the microsecond time determined at 224 for the connection corresponding to the connection number determined at 222, and compare the microsecond time determined at 224 with the current second and microsecond to determinewhether a new sample period for the particular connection has started. Based on the comparison, the logic gates at 230 may determine whether the packet indicates that this connection has sent too many requests during the current sample period. As one example, a user-configurable request threshold may be compared with a tracker for each connection for each sample period. For instance, at the start of a new sample period for a new connection, the tracker for that connection may be set to “0”. As each request from that connection is received, the tracker is incremented. When the tracker’s value is greater than the request threshold, the connection is throttled. In some examples, new requests might still be optionally received and processed, and the tracker incremented more, but receiving and processing the new requests is now optional since the connection has exceeded its request threshold for the current sample period. In a typical use case, the requests over the request threshold are not received or processed while throttling is in effect. Subsequently, in some examples, when the first request is received in the next sample period for the connection, or any sample period after that (as there may not be requests in all sample periods), the tracker for the connection may be reset to “1” (to count the new request as the first request in the new sample period). In any event, if the comparison of the request threshold with the tracker for the particular connection indicates that the particular connection has exceeded the request threshold for the current sample period for the particular connection, then the logic gates at 230 send a signal to the logic gates at 234 (included in the transmit packet processing logic and hardware 208) to cause the logic gates at 234 to initiate the sending of a TCP packet to throttle the particular connection.

[0055] The logic gates at 232 (operating independently of the logic gates at 230) receive the current microsecond time from the logic gates at 228 and convert the current microsecond time into a connection number. This connection number may or may not correspond to an actual connection. However, if there is a connection that corresponds to this connection number, then the generation of this connection number by the gates at 232 indicates that the sample period for this connection has ended, and if the connection was throttled, it is time to send a TCP packet to unthrottled the connection corresponding to the connection number generated by the logic gates at 232 based on the current microsecond time. Details of converting the current microsecond time into a connection number are discussed additionally below with respect to FIGS. 6-8.

[0056] In the case that the logic gates at 230 determine that too many requests from the connection have been received during the current sample period, the logic gates at 234 receive theconnection number of the connection that has been determined to have sent too many requests. The logic gates at 234 access a route RAM 233 that contains the routes for all of the connections according to connection number. The logic gates at 234 look up the connection in the route RAM 233 to find the route for sending a packet to throttle the corresponding connection.

[0057] Additionally, the logic gates at 232 send the connection number determined by converting the current microsecond time into a connection number to the logic gates at 234. The logic gates at 234 look up the received connection number to determine whether the connection corresponding to the received connection number has been throttled. If so, the logic gates at 234 prepare a packet to send to the corresponding connection to unthrottle the connection. Additionally, as indicated at 235, the logic gates at 234 may also receive requests from the rest of the system for sending other packets unrelated to throttling.

[0058] The logic gates at 236 form TCP headers, append any data, and send packets to the network. For example, the logic gates and 236 may receive a packet to be sent to a connection to throttle the connection, may generate a TCP header based on the route for that connection, and as indicated at 237, may transmit the packet out over the network. Similarly, the logic gates at 236 may receive a packet to be sent to a connection to unthrottle the connection, may generate a TCP header based on the route for that connection, and may transmit the packet out over the network. Additionally, the logic gates at 236 may also generate TCP headers for packets received from the rest of the system at 235.

[0059] FIG. 3 illustrates an example 300 of using logic gates to convert a connection number into a microsecond time according to some implementations. In this example, at least some of the logic gates include a plurality of flip-flops (also referred to as “registers”), each of which are capable of holding a value of a bit as either a “1” or a “0”. For example, each flip-flop may be constructed from a plurality of gates as is known in the art. Furthermore, while flip-flops are described as one example of logic circuits that may be used in some implementations herein, other types of logic circuits may additionally or alternatively be used.

[0060] In the example of FIG. 3, as illustrated at 302, 16 flip-flops may receive and hold the connection number for a particular connection for which a request is been received as discussed above e.g., with respect to FIG. 2 for example, the illustrated portion of FIG. 3 may correspond at least in part to the logic gates at 224 that receive the connection number from the logic gates at222. For example, the 16 flip-flops enable storage of a 16-bit binary number with a least significant bit (i.e., bit zero) indicated at 304, and a most significant bit (i.e., bit 15) indicated at 306.

[0061] As mentioned above, to provide separation between closely received connections the order of the bits in the connection numbers may be swapped as indicated at 308. For instance, swapping of order of bits may entail placing the value of the most significant bit into the location of the least significant bit, as indicated by the arrow 310, the value of bit 14 into the location of bit 1, as indicated by arrow 312, and so forth, until all bits have been swapped (note that not all arrows indicating bit swaps are shown for clarity of illustration). The result is a number 314 corresponding to the reverse of the received connection number.

[0062] At 316, to convert the number 314 resulting from the swapped bits to a 20 bit number that can be corresponded to a microsecond time, the swapped number is multiplied by 16. As mentioned above, multiplying by 16 may be easily accomplished in hardware merely by shifting the number 314 four bits to the left and filling the four empty bottom bits with zeros, as indicated at 318. The multiplication operation results in 20 flip-flops holding a number that represents a microsecond time that can be used as a desynchronized stop time for ceasing throttling the connection corresponding to the received connection number. The 20 flip-flops include a least significant bit 322 corresponding to bit zero, and a most significant bit 324 corresponding to bit 19.

[0063] FIG. 4 illustrates a continuation of the example 300 of using logic gates to convert a connection number into a microsecond time according to some implementations. For example, as discussed above, due to multiplying the reversed number by 16, there may be more microsecond times than 1,000,000, i.e., the maximum connection number of 65535 multiplied by 16 = 1,048,560 microseconds, which is more than the 1,000,000 microseconds in a second. Accordingly, to address this issue, as indicated at 402, a plurality of logic gates (not shown in FIG. 4 for clarity of illustration) may be used to determine whether the result at 320 discussed above is greater than or equal to 1,000,000. If the answer is yes, then a multiplexor, as indicated at 404, selects a path A input. On the other hand, if the answer is no, then the multiplexor at 404 selects the path B input. For instance, when path B is selected no further modification to the number determined at 320 is performed.

[0064] On the other hand, when the value of the number at 320 is greater than or equal to 1,000,000, path A is followed, and as indicated at 406, a plurality of gates may be configured to subtract 1,000,000 from the value determined at 320. In addition, as indicated at 408, to ensure anoffset from other microsecond times determined for other connection numbers, 8 (1000 in base 2) is added to the number calculated at 406 by changing the value of bit 3 from “0” to “1”. As mentioned above this will add 8 microseconds to the microsecond time. The resulting microsecond time is indicated at 410, with the 20 flip-flops holding the microsecond time determined for the connection. This microsecond time value 410 may be passed to the logic gates at 230 as discussed above with respect to FIG. 2 for determination of whether to throttle the corresponding connection.

[0065] FIGS. 5 and 8 are flow diagrams illustrating example processes according to some implementations. The processes are illustrated as collections of blocks in logical flow diagrams, which represent a sequence of operations, some or all of which can be implemented in hardware, software or a combination thereof. In the context of software, the blocks may represent computerexecutable instructions stored on one or more computer-readable media that, when executed by one or more processors, program the processors to perform the recited operations. Generally, computer-executable instructions include routines, programs, objects, components, data structures and the like that perform particular functions or implement particular data types. The order in which the blocks are described should not be construed as a limitation. Any number of the described blocks can be combined in any order and / or in parallel to implement the process, or alternative processes, and not all of the blocks need be executed. For discussion purposes, the processes are described with reference to the environments, systems, and devices described in the examples herein, although the processes may be implemented in a wide variety of other environments, systems, and devices.

[0066] FIG. 5 is a flow diagram illustrating an example process 500 for converting a connection number to a microsecond time according to some implementations. In some examples, the process 500 may be executed at least in part by the logic gates of the hardware communication interface 130 under control of the communication manager program 128 executed by the one or more processors 116 of the service computing device(s) 102, or the like.

[0067] At 502, the logic gates may receive the connection number as a 16-bit number. For instance, as discussed above with respect to FIG. 2, the logic gates at 224 may receive the connection number from the logic gates at 222.

[0068] At 504, the logic gates may swap the order of the bits maintained by the logic gates.

[0069] At 506, the logic gates may multiply the result by 16, such as by shifting the 16 bits four bits to the left and filling the four new bottom bits with zeros to obtain a total of 20 bits.

[0070] At 508, the logic gates may determine whether the value determined at 506 is greater than or equal to 1,000,000. If so, the process goes to 510. If not, the process goes to 514.

[0071] At 510, the logic gates may subtract 1,000,000 from the value determined at 506.

[0072] At 512, the logic gates may add 8 to the value determined at 510. As mentioned above, in some examples, this may be accomplished by changing the value of bit 3 of the 20 flip-flops from “0” to “1”.

[0073] At 514, the result is the microsecond time that the connection's sample period starts and ends in microseconds (0 to 999,999) expressed as 20 bits.

[0074] FIG. 6 illustrates an example 600 of using logic gates to convert a microsecond time into a connection number according to some implementations. The example of FIG. 6 is essentially a reverse of the example 300 discussed above with respect to FIGS. 3 and 4. As indicated at 602, the logic gates may receive and store the current microsecond time and 20 flip-flops, which include a most significant bit 604 at bit 19, and a least significant bit 606 at bit 0.

[0075] At 608, a plurality of logic gates may be used to determine whether the bottom four bits are equal to all zeros. If not, then at 608, these logic gates perform no further action. If so, then at 610, a signal may be sent to a multiplexor as indicated at 612 to cause the multiplexor to select input B for this microsecond time. Concurrently, or sequentially, as indicated at 614, logic gates may check whether the bottom for bits are equal to 1000 in base 2 and the top 16 bits are less than or equal to 3035 in base 10. If both of these conditions are not met, then at 616, no further action is performed by the logic gates. On the other hand, if both of these conditions are met, then at 618, a signal is sent to the multiplexor 612 to select input A.

[0076] When input A has been selected, then at 620, the logic gates may subtract 8 from the number received at 602. For example this may merely entail changing the value in bit 3 from “1” to “0”. Additionally, at 622, the logic gates may add 1,000,000 to the value resulting from 620. At 624 the 20 flip-flops maintain a number based on the processing performed above, and the example 600 is continued in FIG. 7 using the value from 624.

[0077] FIG. 7 illustrates a continuation of the example 600 of using logic gates to convert a microsecond time into a connection number according to some implementations. In the illustrated example, at 702, the logic gates may divide the value determined at 624 by 16. For instance, this may be performed in binary by shifting the top 16 bits four bits to the right, and eliminating the bottom four bits. As indicated at 704, the logic gates may then swap the order of the bits by placingthe value of bit 15 into bit 0, the value of bit 14 into bit 1, and so forth until all the bits have been swapped. In the illustrated example not all bit swaps are shown for the sake of clarity of illustration. At 706, following the swapping of the order the bits, the result is 16 flip-flops holding a connection number whose sample period stop / start time corresponds to the received microsecond time. The connection number may be expressed as a 16 bit binary number including most significant bit 708, and a least significant bit 710. As mentioned above with respect to FIG. 2, the connection number determined at 706 may be provided to the logic gates at 234 to determine a route for sending a packet to unthrottle a connection corresponding to the connection number.

[0078] FIG. 8 is a flow diagram illustrating an example process 800 for converting a current microsecond time to a connection number according to some implementations. In some examples, the process 800 may be executed at least in part by the logic gates of the hardware communication interface 130 under control of the communication manager program 128 executed by the one or more processors 116 of the service computing device(s) 102, or the like. For instance, the process 800 may be executed at least in part by the logic gates at 232 of FIG. 2 discussed above.

[0079] At 802, the logic gates may receive the current microsecond time, e.g., as a 20 bit binary number. For instance, the logic gates may receive the current microsecond time from the logic gates at 228 of FIG. 2.

[0080] At 804, the logic gates may determine whether the bottom four bits are all zero values. If so, the process goes to 814. If not, the process goes to 806.

[0081] At 806, when the bottom four bits are not all zero values, the logic gates may determine whether the bottom four bits are equal to “1000” in base 2 and the top 16 bits are less than or equal to “3035” in base 10. If so, the process goes to 810. If not, the process goes to 808.

[0082] At 808, if the requirements of block 806 are not met, this indicates that no connection’s sample period is starting or ending at the current microsecond time.

[0083] At 810, the logic gates subtract 8 (“1000” in base 2) from the current microsecond time.

[0084] At 812, the logic gates add 1,000,000 to the current microsecond time. As will be apparent, the processing performed at 810 and 812 is the reverse of the subtraction of 1,000,000 and the addition of 8 at 510 and 512, respectively, of FIG. 5.

[0085] At 814, the logic gates divide the result by 16. For example, this may be performed in hardware by shifting the top 16 bits four bits to the right, which eliminates the bottom four bits so that 16 bits remain.

[0086] At 816, the logic gates swap the order of the bits, i.e., by placing the value of bit 15 in the location of bit 0, placing the value of bit 14 in the location of bit 1, and so forth.

[0087] At 818, the result is the connection number whose sample period starts and stops at the current microsecond, and which is expressed as a value between zero and 65,535 as 16 bits in base 2. As mentioned above, the connection number may be used to determine a route to which to send a packet to cease throttling the corresponding communication connection.

[0088] The example processes described herein are only examples of processes provided for discussion purposes. Numerous other variations will be apparent to those of skill in the art in light of the disclosure herein. Further, while the disclosure herein sets forth several examples of suitable frameworks, architectures and environments for executing the processes, the implementations herein are not limited to the particular examples shown and discussed. Furthermore, this disclosure provides various example implementations, as described and as illustrated in the drawings. However, this disclosure is not limited to the implementations described and illustrated herein, but can extend to other implementations, as would be known or as would become known to those skilled in the art.

[0089] Various instructions, methods, and techniques described herein may be considered in the general context of computer-executable instructions, such as computer programs and applications stored on computer-readable media, and executed by the processor(s) herein. Generally, the terms program and application may be used interchangeably, and may include instructions, routines, modules, objects, components, data structures, executable code, etc., for performing particular tasks or implementing particular data types. These programs, applications, and the like, may be executed as native code or may be downloaded and executed, such as in a virtual machine or other just-in-time compilation execution environment. Typically, the functionality of the programs and applications may be combined or distributed as desired in various implementations. An implementation of these programs, applications, and techniques may be stored on computer storage media or transmitted across some form of communication media.

[0090] Although the subject matter has been described in language specific to structural features and / or methodological acts, it is to be understood that the subject matter defined in the appended claims is not necessarily limited to the specific features or acts described. Rather, the specific features and acts are disclosed as example forms of implementing the claims.

Claims

CLAIMS1. A system comprising: at least one computing device configured to perform operations comprising: receiving a request corresponding to a communication connection; determining a connection number corresponding to the communication connection; determining a sample period start time and / or stop time based at least on a function of the connection number; and performing at least one action to cease throttling the communication connection based at least on the sample period start time and / or stop time.

2. The system as recited in claim 1 , wherein the operation of determining the sample period start time and / or stop time based at least on the function of the connection number comprises converting the connection number to a time indicative of the sample period start time and / or stop time.

3. The system as recited in claim 2, wherein the operation of converting the connection number to the time indicative of the sample period start time and / or stop time comprises using a plurality of logic circuits to convert the connection number to the time indicative of the sample period start time and / or stop time.

4. The system as recited in claim 1 , wherein the operation of performing at least one action to cease throttling the communication connection based at least on the sample period start time and / or stop time further comprises: determining that a packet received from the communication connection contains more than a threshold number of requests for a specified period; and based at least on determining that the threshold number of requests is exceeded, sending at least one instruction to delay processing of additional requests from the communication connection.

5. The system as recited in claim 1, wherein the communication connection is a first connection, the request is a first request, and the sample period start time and / or stop time is a firstsample period start time and / or stop time, and wherein the computing device receives a second request from a second connection, the operations further comprising: determining based on a connection number for the second connection a second sample period start time and / or stop time that is different from the first sample period start time and / or stop time; and performing at least one action to cease throttling the second connection based at least on the second sample period start time and / or stop time.

6. The system as recited in claim 1 , wherein a difference between the first sample period stop time and the second sample period stop time is greater than seven microseconds.

7. The system as recited in claim 1, wherein using the plurality of logic gates to convert the connection number to a number representative of the sample period start time and / or stop time further comprises: representing the connection number as a plurality of bits; and swapping an order of values of at least some of the bits in the plurality of bits.

8. The system as recited in claim 1, the operations further comprising: receiving an indication of a current time determined based at least on a pulse received from a clock associated with the computing device; converting the current time to another connection number corresponding to another communication connection in communication with the computing device; and sending a communication to the other communication connection corresponding to the other connection number determined by converting the current time.

9. The system as recited in claim 8, the operations further comprising: based at least on the other connection number determined from the current time, determining a route for the communication to the other communication connection; and generating a header for the communication to the other communication connection based at least on the route.

10. The system as recited in claim 8, wherein converting the current time to the other connection number corresponding to the other communication connection in communication with the computing device comprises using a plurality of logic gates to receive the current time and convert the current time into the other connection number that corresponds to the other communication connection.

11. The system as recited in claim 1 , wherein the communication connection is a transmission control protocol connection.

12. A method comprising: receiving, by at least one computing device, a request corresponding to a communication connection; determining a connection number corresponding to the communication connection; determining a sample period start time and / or stop time based at least on a function of the connection number; and performing at least one action to cease throttling the communication connection based at least on the sample period start time and / or stop time.

13. The method as recited in claim 12, wherein determining the sample period start time and / or stop time based at least on the function of the connection number comprises converting the connection number to a time indicative of the sample period start time and / or stop time.

14. One or more non-transitory computer-readable media storing instructions executable by one or more processors to configure the one or more processors to perform operations comprising: receiving a request corresponding to a communication connection; determining a connection number corresponding to the communication connection; determining a sample period start time and / or stop time based at least on a function of the connection number; and performing at least one action to cease throttling the communication connection based at least on the sample period start time and / or stop time.

15. The one or more non-transitory computer-readable media as recited in claim 14, wherein the operation of determining the sample period start time and / or stop time based at least on the function of the connection number comprises converting the connection number to a time indicative of the sample period start time and / or stop time.

Citation Information

Patent Citations

  • Large scale compute instance launching

    US10761875B1

  • System and method for routing data on a packet network

    US20130135993A1

  • Read-throttled input / output scheduler

    US20130254324A1

  • Uniform communication protocols for communication between controllers and accessories

    US20180176112A1

  • Device-Assisted Services for Protecting Network Capacity

    US20210067359A1