The presently disclosed subject matter relates to computing device resource allocation. More particularly, the presently disclosed subject matter relates to systems and methods for initializing computing device bus lanes during boot.
In computer systems, a bus is a communication system that transfers data between components of a computing device. A local input/output (I/O) bus transfers data between a peripheral component and a computing device. Various types of I/O buses include peripheral components interconnect (PCI), accelerated graphics port (AGP), industry standard architecture (ISA), universal serial bus (USB), micro channel architecture (MCA), enhanced ISA (EISA), and video electronics standards association (VESA).
A PCI express (PCIe) bus is an implementation of a PCI computer bus according to a set of specifications promulgated by the PCI Special Interest Group. The PCIe bus uses PCI programming and software concepts, but is based on serial bus architecture as opposed to the parallel bus architecture of the conventional PCI. This physical layer of the PCIe computer bus includes a network of serial interconnections extending from a PCI host bridge or a switch to each peripheral component, which may be referred to as an adapter. A connection between the host bridge or the switch to an adapter is referred to as a “link”. The link includes a collection of one or more lanes used for data communication. Each lane is a set of two unidirectional low voltage differential signaling pairs of transmission pathways such as, for example, traces along a motherboard. Since transmitting data and receiving data are implemented using separate differential pairs, each lane allows for full-duplex serial data communication.
The number of lanes used for communication is fixed at boot time. This requires the maximum number of lanes for a device to be instantiated at boot and remain active. Rebooting the computing device to reallocate the lanes can require a significant amount of time, particularly in server environments. Examples include a PCIe bus training and a network serializer/deseriealizer (SerDes) based port. Each of these examples may provide a x4 or x8 type of connection between two endpoints, and is negotiated to the maximum supported bandwidth on system start.
In view of the foregoing, there is a need for improved systems and techniques for managing computing bus lanes.
This Summary is provided to introduce a selection of concepts in a simplified form that are further described below in the Detailed Description. This Summary is not intended to identify key features or essential features of the claimed subject matter, nor is it intended to be used to limit the scope of the claimed subject matter.
Disclosed herein are systems and methods for initializing computing device bus lanes during boot. According to an aspect, a method may be implemented at a processing module configured to operate when a computing device is not booted. The method includes determining, prior to the computing device being booted, a number of lanes for communication via a bus by the computing device. The method also includes initializing, during boot of the computing device, the lanes of the bus according to the determined number of lanes.
The foregoing summary, as well as the following detailed description of various embodiments, is better understood when read in conjunction with the appended drawings. For the purposes of illustration, there is shown in the drawings example embodiments; however, the presently disclosed subject matter is not limited to the specific methods and instrumentalities disclosed. In the drawings:
The presently disclosed subject matter is described with specificity to meet statutory requirements. However, the description itself is not intended to limit the scope of this patent. Rather, the inventors have contemplated that the claimed subject matter might also be embodied in other ways, to include different steps or elements similar to the ones described in this document, in conjunction with other present or future technologies.
As referred to herein, the term “computing device” should be broadly construed. It can include any type of device including hardware, software, firmware, the like, and combinations thereof. A computing device may include one or more processors and memory or other suitable non-transitory, computer readable storage medium having computer readable program code for implementing methods in accordance with embodiments of the present disclosure. A computing device may be a server or any other type of computing device. For example, a computing device can be any type of conventional computer such as a laptop computer or a tablet computer.
As referred to herein, the term “user interface” is generally a system by which users interact with a computing device. A user interface can include an input for allowing users to manipulate a computing device, and can include an output for allowing the computing device to present information and/or data, indicate the effects of the user's manipulation, etc. An example of a user interface on a computing device includes a graphical user interface (GUI) that allows users to interact with programs or applications in more ways than typing. A GUI typically can offer display objects, and visual indicators, as opposed to text-based interfaces, typed command labels or text navigation to represent information and actions available to a user. For example, a user interface can be a display window or display object, which is selectable by a user of a computing device for interaction. In another example, the user can use any other suitable user interface of a computing device, such as a keypad, to select the display icon or display object. For example, the user can use a track ball or arrow keys for moving a cursor to highlight and select the display object.
As used herein, the term “memory” is generally a storage device of a computing device. Examples include, but are not limited to, Read Only Memory (ROM), Random Access Memory (RAM), or Non-Volatile Random Access Memory (NVRAM).
As used herein, the term “bus adapter” is generally an electronic device configured to connect a components of computing device to a bus so that data may be transferred between the components via the bus. More generally, an adapter may be any electronic device that connects a component to another component.
The server 104 includes an expansion bus 116. In this example, the expansion bus 116 is a PCIe bus but may alternatively be any other suitable type of bus. The expansion bus 116 may include shared lines such that a PCI host and a connected device each share a common set of address/data/signal lines. The expansion bus 116 may include multiple lanes. Each lane may include two differential signaling pairs. The first differential signaling pair can be configured to receive data, while the other differential signaling pair can be configured to transmit data. Each lane may include four wires or signal traces.
The lanes of a PCIe bus can each provide bandwidth to a device that is connected to the PCIe bus. As such, low-speed peripherals such as an 802.11 Wi-Fi adapter may utilize fewer lanes, which high-speed peripherals such as a graphics adapter may utilize more lanes. Thus, the PCIe bus represents a flexible interconnect between devices, such as a processor and a peripheral device, as the PCIe bus can couple devices that require varying bandwidths. The number of lanes utilized to facilitate data communications between two devices can be expressed with an “x” prefix, such that x16 represents a sixteen lane connection, which x2 represents a two lane connection.
RAM 110 may store an operating system for managing hardware, software, and other resources of the server 104. The operating system may also provide various services for computer programs residing on the server 104.
The server 104 includes a disk drive adapter 118 operatively connected through expansion bus 116 and bus adapter 114 to the processor(s) 108 and other components of the server 104. Disk drive adapter 114 can connect non-volatile data storage, such as disk drive 120, to the server 104. The server 104 may include one or more I/O adapters 122. I/O adapters 122 may implement user-oriented input/output through, for example, software drivers and computer hardware for controlling output to displays, as well as user input from user interfaces 124, such as keyboards, mice, and the like.
The server 104 may include a communications adapter 126 for data communications with other servers or computing devices, such as computing device 128. The communications adapter 126 may also provide for data communications with network switches, routers, and the like. The communications adapter 126 may also provide for data communications with a communications network 130. Such data communications may be conducted serially through RS-232 connections, through external buses such as a universal serial bus (USB), through data communications networks such as IP data communications networks, and the like. Communications adapters can implement the hardware level of data communications through which one computing devices sends data to another computing device, directly or through a communications network. Example adapters that can allocate lanes in a bus include modems for wired dial-up communications, Ethernet adapters for wired data network communications, and 802.11 adapters for wireless data network communications.
In accordance with embodiments, the resource allocation module 102 may be implemented by the BMC 106 or another other component configured to operate when a computing device is not booted. The resource allocation module 102 may be implemented by any suitable hardware, software, firmware, or combinations thereof. In embodiments, the resource allocation module 102 may be configured to determine, prior to the server 104 being booted, a number of lanes for communication via the expansion bus 116. During boot of the server 104, the resource allocation module 102 may initialize lanes of the bus according to the determined number of lanes.
Referring to
In an example, the resource allocation module 102 may determine the numbers of lanes as being the maximum number of lanes needed for communication between the components, such as the processor 204 and the component 206 shown in
The method of
The method of
Referring to
The method of
With continuing reference to
The method of
In accordance with embodiments, the resource allocation module may control a minimum or maximum number of lanes available between computing device components. The minimum may be 1 lane, and the maximum number may be based on the physical structure of the system (as mentioned in previous comments). The resource allocation device may monitor traffic usage by collecting information from the endpoints (for example gathering statistics from the device to determine traffic rates).
In an example use scenario, the presently disclosed subject matter may be used in RAID applications. In this example, at boot all of its supported lanes may be initialized. If only low demand storage requests are being made, the resource allocation module may deactivate unneeded lanes. The deactivated lanes may be subsequently reactivated if a large read or write operation is started. The lanes may be deactivated again when the operation is completed.
Aspects of the present subject matter are described herein with reference to flowchart illustrations and/or block diagrams of methods, apparatus (systems), and computer program products according to embodiments of the subject matter. It will be understood that each block of the flowchart illustrations and/or block diagrams, and combinations of blocks in the flowchart illustrations and/or block diagrams, can be implemented by computer readable program instructions.
The flowchart and block diagrams in the Figures illustrate the architecture, functionality, and operation of possible implementations of systems, methods, and computer program products according to various embodiments of the present subject matter. In this regard, each block in the flowchart or block diagrams may represent a module, segment, or portion of instructions, which comprises one or more executable instructions for implementing the specified logical function(s). In some alternative implementations, the functions noted in the block may occur out of the order noted in the figures. For example, two blocks shown in succession may, in fact, be executed substantially concurrently, or the blocks may sometimes be executed in the reverse order, depending upon the functionality involved. It will also be noted that each block of the block diagrams and/or flowchart illustration, and combinations of blocks in the block diagrams and/or flowchart illustration, can be implemented by special purpose hardware-based systems that perform the specified functions or acts or carry out combinations of special purpose hardware and computer instructions.
While the embodiments have been described in connection with the various embodiments of the various figures, it is to be understood that other similar embodiments may be used or modifications and additions may be made to the described embodiment for performing the same function without deviating therefrom. Therefore, the disclosed embodiments should not be limited to any single embodiment, but rather should be construed in breadth and scope in accordance with the appended claims.