Abstract:
A computer system and method for remotely allocating memory space in a memory of a remote computing device comprising a local IOP which remotely allocates memory space, for use by the local IOP, in a memory of a remote computing device. The local IOP detects a condition requiring a remote memory allocation and sends a remote allocate message to the remote computing device. The local IOP also performs an internal memory allocation in response to a remote allocate message initiated and sent by the remote computing device. The memory is partitioned to allocate distinct portions of memory for use by the IOP and the remote computing device. An allocation verification table contains data pertaining to the authorization of remote computing devices to allocate memory in the local IOP. The local IOP checks the allocation verification table to verify that the remote computing device is authorized to allocate memory. A communication network interface effectuates communication, across a communication network, between the local IOP and remote computing devices, The communication network interface sends remote allocate messages to the remote computing devices and receives remote allocate messages from the remote computing device.

Description:
FIELD OF THE INVENTION 
     The present invention pertains in general to memory allocation in an Input/Output Processor, and more particularly, but not by way of limitation, to a method and apparatus for Peer Service Users connected to a Peripheral Component Interface bus to allocate memory space on both an Input/Output Processor where the Peer Service Users reside and on a remote Input/Output Processor. 
     BACKGROUND OF THE INVENTION 
     Computer systems have achieved wide usage in modern society. During operation, a computer system processes and stores data at a speed and at a level of accuracy many times that which can be performed manually. Successive generations of computer systems have permitted ever-increasing amounts of data to be processed at ever-increasing rates. 
     Computer systems are sometimes operated as stand-alone devices or connected together by way of network connections, typically together with a network server, to form a computer network. When networked together, communication between the separate computer systems is possible. Files and other data, stored or generated at one computer system, can be transferred to another computer system. 
     A conventional computer system typically includes one or more Central Processing Units (CPUs) capable of executing algorithms forming applications and a computer main memory. Peripheral devices, both those embedded together with a CPU or constructed to be separate therefrom, also typically form portions of a conventional computer system. Computer peripheral devices include, for instance, video graphics adapters, Local Area Network (LAN) interfaces, Small Computer System Interface (SCSI) bus adapters, and mass storage devices, such as disk drive assemblies. 
     A computer system further typically includes computer buses which permit the communication of data between various portions of the computer system. For example, a host bus, a memory bus, at least one high-speed bus, a local peripheral expansion bus, and one or more additional peripheral buses form portions of a typical computer system. 
     A peripheral bus is formed, for instance, of an SCSI bus, an Extension to Industry Standard Architecture (EISA) bus, an Industry Standard Architecture (ISA) bus, or a Peripheral Component Interface (PCI) bus. The peripheral bus forms a communication path to and from a peripheral device connected thereto. The computer system CPU, or a plurality of CPUs in a multi-processor system, communicates with a computer peripheral device by way of a computer bus, such as one or more of the computer buses noted above. 
     A computer peripheral, depending upon its data transfer speed requirements, is connected to an appropriate peripheral bus, typically by way of a bus bridge that detects required actions, arbitrates, and translates both data and addresses between the various buses. 
     A computer peripheral device forming a portion of a single computer system might well be supplied by a manufacturer other than the manufacturer of the computer CPU. If the computer system contains more than one peripheral device, the peripheral devices might also be supplied by different manufacturers. Furthermore, the computer system may be operable pursuant to any of several different operating systems. The various combinations of computer peripheral devices and computer operating systems of which a computer system might be formed quickly becomes quite large. 
     Software drivers are typically required for each computer peripheral device to effectuate its operation. A software driver must be specifically tailored to operate in conjunction with the particular operating system operating on the computer. A multiplicity of software drivers might have to be created for a single computer peripheral to ensure that a computer peripheral device is operable together with any of the different operating systems. 
     The complexity resulting from such a requirement has led, at least in part, to the development of an Intelligent Input/Output (I 2  O) standard specification. The I 2  O standard specification sets forth, inter alia, standards for an I/O device driver architecture that is independent of both the specific peripheral device being controlled and the operating system of the computer system to which the device driver is to be installed. 
     In the I 2  O standard specification, the portion of the driver that is responsible for managing the peripheral device is logically separated from the specific implementation details of the operating system with which is to be installed. Because of this, the part of the driver that manages the peripheral device is portable across different computer and operating systems. The I 2  O standard specification also generalizes the nature of communication between the host computer system and peripheral hardware; thus, providing processor and bus technology independence. 
     The &#34;split driver&#34; model of the I 2  O specification, described above, allows for peripheral devices to communicate directly between each other using what is referred to as Peer-to-Peer communication. Peer-to-Peer communication allows two or more devices to communicate and transfer data between themselves with little or no involvement by the host CPU. In many instances it would be advantageous if a Peer Service User, operating on a first input/Output (IOP), could allocate memory space in the memory of a second IOP for use in Peer-to-Peer communication. For example, in certain instances, it may be advantageous for a Peer Service User operating on a second IOP to have instant access to data available to a Peer Service User operating on a first IOP. Given the ability to allocate memory space in the memory of a second IOP, the Peer Service User operating on a first IOP could transfer data directly into the memory space it allocated on a second IOP thereby allowing the Peer Service User operating on the second IOP instant access to the data. 
     In a second example, the Peer Service User operating on the first IOP may execute an application which requires more memory space than is presently available in the memory of the first IOP while, at the same time, the second IOP has excess memory capacity. If the Peer Service User operating on the first IOP were given the ability to allocate memory space in the memory of the second IOP, the Peer Service User operating on the first IOP could use Peer-to-Peer data transfers to utilize the additional memory space for use in executing the application. 
     Based upon the foregoing, is should be understood that it would be advantageous for a Peer Service User operating on a local IOP to remotely allocate memory space in the memory of a remote IOP. 
     SUMMARY OF THE INVENTION 
     The present invention comprises a method and apparatus by which a local IOP remotely allocates memory space, for use by the local IOP, in a memory of a remote computing device. The local IOP detects a condition requiring a remote memory allocation and sends a remote allocate message from the local IOP to the remote computing device to initiate a remote allocation operation in the remote computing device. The local IOP also performs an internal memory allocation to allocate memory space in the memory of the local IOP for use by the remote computing device in response to a remote allocate message initiated and sent by the remote computing device. A memory is provided for storing data allocated for use by the local IOP and the remote computing device. The memory is capable of being partitioned to allocate distinct portions of memory for use by the IOP and the remote computing device. 
     An allocation verification table contains data pertaining to the authorization of remote computing devices to allocate memory in the local IOP. Prior to allocating memory space in response to a memory allocation initiated by a remote computing device, the local IOP checks the allocation verification table to verify that the remote computing device is authorized to allocate memory. 
     A communication network interface effectuates communication, across a communication network, between the local IOP and remote computing devices connected to the communication network. The communication network interface sends remote allocate messages, initiated by the local IOP, to the remote computing devices and receives remote allocate messages initiated and sent by the remote computing device. 
    
    
     BRIEF DESCRIPTION OF THE DRAWINGS 
     A more complete understanding of the present invention may be had by reference to the following Detailed Description and appended claims, when taken in conjunction with the accompanying Drawings wherein: 
     FIG. 1 is a functional block diagram of a computer system including a host processor and a plurality of IOPs communicating with one another via a PCI bus; 
     FIG. 2 is a functional block diagram of a Peer-to-Peer software architecture consistent with a preferred embodiment of the present invention; and 
     FIG. 3 is a flow diagram of a method for remotely allocating memory in an IOP consistent with the preferred embodiment of the present invention. 
    
    
     DETAILED DESCRIPTION 
     The present invention performs in accordance with the Intelligent Input/Output (I 2  O) architecture specification. In the following description of the present invention, certain aspects of the I 2  O specification are discussed. For instance, the hardware and software independent architecture centered around a split driver model and Peer-to-Peer communication specified in the I 2  O specification are used and described in connection with the present invention. It is understood that these and other aspects are well known in the industry and that a further, and more detailed, description of the operation of I 2  O technology is available in the Intelligent Input/Output (I 2  O) specification. That specification, to the fullest extent possible, is hereby incorporated by this reference thereto. 
     Referring now to FIG. 1, there is a functional block diagram of a computer system including a host processor and a plurality of IOPs communicating with one another via a PCI bus. The computer system, shown generally at 100, comprises one or more host Central Processing Unit(s) 110 communicating with a Host-to-PCI bridge 120, a memory 140 and a memory controller 130 associated with the memory 140 across a host bus 150. The computer system 100 further comprises a plurality of Input/Output Processors (IOPs) 160, including a first IOP 170 and a second IOP 180, which communicate with one another and the Host-to-PCI bridge 120 across a PCI bus 185. The first IOP 170 includes a first memory 175 which can be partitioned to form a first buffer 290. Likewise, the second IOP 180 includes a second memory 176 which can be partitioned to form a second buffer 291. 
     A host operating system 209 generally controls operation of the computer system 100 and, in particular, controls operation of the host CPUs 110. A first Integrated Real Time Operating System (IRTOS) 270 controls operation of the first IOP 170 while a second IRTOS 271 controls operation of the second IOP 180. The first IRTOS 270 has access to a first buffer table 280 which contains information pertaining to the partitioning and use of the first memory 175 and a allocation verification table 290 which is maintained by the host operating system 209 and contains information pertaining to the authorization of other IOPs 160 to perform remote memory allocation to the memory 175 of the first IOP 170. Likewise, the second IRTOS 271 has access to a second buffer table 281 containing information pertaining to the partitioning and use of the second memory 176 and an allocation verification table 291 which is maintained by the host operating system 209 and contains information pertaining to the authorization of other IOPs 160 to perform remote memory allocation to the memory 176 of the second IOP 180. As will be described, the first buffer table 280 and the second buffer table 281 further contain information pertaining to buffers allocated in the memories of remote IOPs. 
     The first IOP 170 includes a first device 171 and a second device 172. Similarly, the second IOP 180 includes a third device 181 and a fourth device 182. 
     Each of the devices 171, 172, 181 and 182 can be any type of peripheral system device such as, but not limited to, a Local Area Network (LAN) controller, a Small Computer Systems Interface controller (SCSI) or a Redundant Array of Independent Drives controller (RAID). For illustrative purposes, the first device 171 and the third device 181 are designated as LAN controllers which control communication with a first LAN 190 and a second LAN 200 respectively. The first LAN 190 includes a first plurality of LAN devices 195 and the second LAN 200 includes a second plurality of LAN devices 205. Although the first IOP 170 and the second IOP 180 are each depicted as supporting two devices, it is understood that each IOP may support any number and types of devices. 
     Each of the devices 171, 172, 181 and 182 are controlled under the direction of an associated device driver. In accordance with the split driver model of the 120 standard, each device driver is comprised of an Operating System specific Module (OSM) which operates on the host CPUs 110 and a Hardware Device Module (HDM) which operates on the IOP where the associated device resides. For example, the device driver for the first device 171 is comprised of a first OSM 210 operating on the host CPUs 110 and a first HDM 220 operating on the first IOP 170. Likewise, the device drivers for the second device 172, the third device 181 and the fourth device 182 are comprised of OSMs 211, 230 and 231 operating on the host CPUs 110 and HDM 221 operating on the first IOP 170 and HDMs 240 and 241 operating on the second IOP 180 respectively To move data from one of the first plurality of LAN devices 195 to one of the second plurality of LAN devices 205 in a non-I 2  O compliant computer system, routing software operating on the host CPUs 110 first moves data from the first LAN device 195 to the memory 140 across the first LAN 190, through the first IOP 170, across the PCI bus 185, through the Host-to-PCI bridge 120 and across the host bus 150. The routing software operating on the host CPUs 110 then moves the data from the memory 140 to the second LAN device 205 across the host bus 150, through the Host-to-PCI bridge 120, across the PCI bus 185, through the second IOP 180 and across the second LAN 200. Movement of data from the second LAN device 205 to the first LAN device 195 is accomplished by the routing software in the reverse order. Movement of data in this fashion unnecessarily burdens the host CPUs 110 with having to control the entire process, it consumes storage capacity of the memory 140 and it lowers the bandwidth of the host bus 150 and the PCI bus 185. Peer-to-Peer communication, provided by I 2  O technology, simplifies the movement of data and eliminates most of these transactions by allowing direct communication between the IOPs 160 over the PCI bus 185 with minimal control by the host CPUs 110. 
     To effectuate Peer-to-Peer communication one or more IOP Peer Application Downloadable Driver Modules (DDMs) reside and operate on each of the IOPs 160. For instance, a first plurality of IOP Peer Application DDMs 260 operate on the first IOP 170 and a second plurality of IOP Peer Application DDMs 261 operate on the second IOP 180. Generally, each application operating in conjunction with a device on an IOP has an associated IOP Peer Application DDM. The IOP Peer Application DDMs 260 and 261 operate in conjunction with a single Peer-to Peer OSM 250 which operates on the host CPUs 110. The Peer IOP Peer Application DDMs 260 and 261 resident on the respective IOPs 160 operate in conjunction with each other and the Peer-to-Peer OSM 250 to allow two or more IOPs 160 to communicate with, and move data between, each other without involving the host CPUs 110. Specific details as to the operation of Peer-to-Peer communication are well established and are available in the I 2  O specification. 
     As stated in the background, it would be advantageous to allow a Peer Service User on a local IOP to allocate memory space in the memory of a remote IOP. In order to better describe the present invention the following examples and descriptions refer to the first IOP 170, its associated components and functionality as &#34;local&#34; and the second IOP 180, its associated components and functionality as &#34;remote.&#34; These references reflect the particular situation provided in the examples and descriptions wherein, the first IOP 170 allocates memory space in the memory 176 of the second IOP 180. In instances where the second IOP 180 allocates memory space in the memory 175 of the first IOP 170 the &#34;local&#34; and &#34;remote&#34; labels would be reversed. 
     Referring additionally now to FIG. 2, there is illustrated a functional block diagram of a Peer-to-Peer software architecture consistent with a preferred embodiment of the present invention. In addition to the components and functionality described in FIG. 1, each of the IOPs 160 include a data transport layer 300. A first transport agent 310 provides an interface between the first IRTOS 270 and the data transport layer 300 of the first IOP 170. Likewise, a second transport agent 3 11 provides an interface between the second IRTOS 271 and the data transport layer 300 of the second IOP 180. The transport layer 300 of each of the IOPs 160 includes a peer transport for each communication media and protocol supported by the particular IOP. The peer transport effectuates a communication interface between the transport layer of the particular IOP and the communication media. In FIG. 2, a first PCI peer transport 320 supports communication by the first IOP 170 on the PCI bus 185 while a first Ethernet peer transport 322 supports communication by the first IOP 170 on an Ethernet (not shown). Peer transport 324 supports communication by the first IOP 170 on any type of communication media and protocol. Likewise, a second PCI peer transport 330 supports communication by the second IOP 180 on the PCI bus 185 while a second Ethernet peer transport 332 supports communication by the second IOP 180 on the Ethernet (not shown). Peer transport 333 supports communication by the second IOP 180 on any type of communication media and protocol. 
     To effectuate a remote memory allocation, the local IRTOS 270 sends a remote allocate message to the remote IRTOS 271. The remote allocate message includes information identifying both the local IOP 170 and the remote IOP 180, the size of the buffer being allocated and memory parameters such as, but not limited to, type, alignment access attributes and cache properties among others. During the operation of the computer system 100, a need for memory allocation is detected. For instance, the need for memory allocation arises when data, which is to be routed to a LAN device 205 on LAN 200, is received by the first LAN controller 171. In an alternative example, the first and second LAN controllers, 170 and 180 respectively, are programmed to effectuate a continuous interface between the first LAN 190 and the second LAN 200. In this instance, the need for memory allocation arises when the LAN interface application is initiated. In either event, once the local IOP Peer Application DDM 260 determines that memory allocation is required, the local IOP Peer Application DDM 260 directs the local IRTOS 270 to perform a remote memory allocation to acquire a buffer 291 in the remote memory 176 of the remote IOP 180. 
     Before performing a remote memory allocation, a determination is made as to whether a buffer of sufficient size and characteristics has been previously allocated in the remote memory 176 and is currently available. For example, the local IRTOS 270 checks the local buffer table 280 to determine if a buffer of sufficient size and appropriate characteristics has previously been allocated in the remote memory 176 and is currently available. In the event that a buffer has been previously allocated and is currently available no new memory allocation occurs and the previously allocated buffer is used. If, on the other hand, a previously allocated buffer is unavailable or does not exist, the local IRTOS 270 sends a remote allocate message to the remote IRTOS 271. To send a remote allocate message to the remote IRTOS 271, the local IRTOS 270 communicates the remote allocate message to the data transport layer 300 via the local transport agent 310 which effectuates an interface between the local IRTOS 270 and the transport layer 300. The local transport agent 310 receives the remote allocate message and communicates it to the appropriate peer transport. 
     In the case of the example being described, the local transport agent 310 communicates the remote allocate message to peer transport 320 which supports communication on the PCI bus 185. Upon receiving the remote allocate message, the peer transport 320 communicates the remote allocate message across the respective media, using the appropriate protocol, to the corresponding peer transport 330 of the remote IOP 180. The remote peer transport 330 communicates the remote allocate message to the remote transport agent 311 and the remote transport agent 311 communicates the remote allocate message to the remote IRTOS 271. 
     Upon receiving the remote allocate message, the remote IRTOS 271 determines whether the local IOP 170 is authorized to allocate memory space in the memory 176 of the remote IOP 180 by comparing the identity of the local IOP 170 and the identity of the remote IOP 180, contained in the remote allocate message, against data stored in the allocation verification table 291 which is maintained by the host operating system 209. If the memory allocation is authorized, the remote IRTOS 271 determines whether the remote memory 176 has adequate memory to meet the size and characteristics requirements of the memory being allocated by comparing the size of the buffer to be allocated and parameters describing the characteristics of the buffer to be allocated contained in the remote allocate message communicated to the remote IRTOS 271 against memory utilization information contained in the remote buffer table 281. 
     If it is determined that the remote memory allocation is unauthorized or if it is determined that memory space is unavailable, the remote IRTOS 271 returns an unsuccessful reply message to the local IRTOS 270. If, on the other hand, the remote memory allocation is authorized and sufficient memory of appropriate characteristics is available, the remote IRTOS 271 enters data into the remote buffer table 281 to assign the memory space to the local IOP 170 and returns a successful reply message to the local IRTOS 270. The reply message is communicated to the local IRTOS 270 in the reverse order in which the remote allocate message was received Therefore, the remote IRTOS 271 communicates the reply message to the remote transport agent 311, which communicates the reply message to the remote peer transport 330, which communicates the reply message across the PCI bus 185 to the local peer transport 320. The local transport agent communicates the reply message from the transport layer 300 to the local IRTOS 270. 
     In addition to indicating whether the remote memory allocation was successful, the reply message includes an alias which identifies the remote buffer 291 and a scatter gather list. The scatter gather list is commonly known in the industry and contains such parameters as a memory location of the beginning of the remote buffer 291 and the length of the remote buffer 291 among other parameters. If the remote memory allocation was successful, the local IRTOS 270 enters information pertaining to the size, location and characteristics of the remote buffer 291 into the local buffer table 280 as an extension of the local memory 175. 
     As stated earlier, the ongoing example describes the situation wherein the first IOP 170 remotely allocates memory space in the memory 176 of the second IOP 180. Therefore, the first IOP 170, its components and functionality are labeled as &#34;local&#34; while the second IOP 180, its components and functionality are labeled as &#34;remote.&#34; It is understood that any of the IOPs 160 can remotely allocate memory space in the memories of other IOPs 160. Furthermore, an IOP Peer Application DDM, associated with a first device in a particular IOP, can utilize the method of the present invention to allocate memory within the same IOP for use in communication with a second device located in the same IOP thereby effectuating Intra-IOP memory allocation. While this situation does not involve communication over a communication media by the respective peer transports it allows for a common scheme to provide memory allocation. For example, an IOP Peer Application DDM 260 allocates memory space in the memory 175 for use in communication between the first device 171 and the second device 172. 
     Referring additionally now to FIG. 3, there is illustrated a flow diagram of a method for remotely allocating memory in an IOP consistent with the preferred embodiment of the present invention. During the operation of the computer system 100, a need for memory allocation is detected (step 400). Although Peer-to-Peer communication supports a variety of applications, the ongoing example provided in this disclosure describes Peer-to-Peer communication between the first LAN controller 171 and the second LAN controller 181. In this case, the need for memory allocation arises when data, which is to be routed to a LAN device 205 on LAN 200, is received by the first LAN controller 171. In an alternative example, the first and second LAN controllers, 170 and 180 respectively, are programmed to effectuate a continuous interface between the first LAN 190 and the second LAN 200. In this instance, the need for memory allocation arises when the LAN interface application is initiated. In either event, once the local IOP Peer Application DDM 260 determines that memory allocation is required, the local IOP Peer Application DDM 260 directs the local IRTOS 270 to perform a remote memory allocation to acquire a buffer 291 in the remote memory 176 of the remote IOP 180. 
     Before performing a remote memory allocation, a determination is made as to whether a buffer of sufficient size and characteristics has been previously allocated in the remote memory 176 and is currently available (step 410). For example, the local IRTOS 270 checks the local buffer table 280 to determine if a buffer of sufficient size and appropriate characteristics has previously been allocated in the remote memory 176 and is currently available. In the event that a buffer has been previously allocated and is currently available no new memory allocation occurs and the previously allocated buffer is used (step 420). If, on the other hand, a previously allocated buffer is unavailable or does not exist, the local IRTOS 270 sends a remote allocate message to the remote IRTOS 271 (step 430). 
     To send a remote allocate message to the remote IRTOS 271, the local IRTOS 270 communicates the remote allocate message to the data transport layer 300 (step 432). The local transport agent 310 provides an interface between the local IRTOS 270 and the transport layer 300. The local transport agent 310 receives the remote allocate message and communicates it to the appropriate peer transport (step 434). In the case of the ongoing example, the local transport agent 310 communicates the remote allocate message to peer transport 320 which supports communication on the PCI bus 185. Upon receiving the remote allocate message, the peer transport 320 communicates the remote allocate message across the respective media using the appropriate protocol to the corresponding peer transport 330 of the remote IOP 180 (step 436). The remote peer transport 330 communicates the remote allocate message to the remote transport agent 311 (step 440) and the remote transport agent 311 communicates the remote allocate message to the remote IRTOS 271 (step 445). 
     Upon receiving the remote allocate message, the remote IRTOS 271 determines whether the local IOP 170 is authorized to allocate memory space in the memory 176 of the remote IOP 180 (step 448). To make the determination, the remote IRTOS 271 compares the identity of the local IOP 170 and the identity of the remote IOP 180, contained in the remote allocate message, against data stored in the allocation verification table 291 which is maintained by the host operating system 209. If the memory allocation is authorized, the remote IRTOS 281 determines whether the remote memory 176 has adequate memory to meet the size and characteristics requirements of the memory being allocated (step 450). To make the determination, the remote IRTOS 271 compares the size of the buffer to be allocated and parameters describing the characteristics of the buffer to be allocated contained in the remote allocate message communicated to the remote IRTOS 271 against memory utilization information contained in the remote buffer table 281. 
     If, in step 448, it is determined that the remote memory allocation is unauthorized or if, in step 450, it is determined that memory space is unavailable, the remote IRTOS 271 returns an unsuccessful reply message to the local IRTOS 270 (step 460). If, on the other hand, the remote memory allocation is authorized and sufficient memory of appropriate characteristics is available, the remote IRTOS 281 enters data into the remote buffer table 281 to assign the memory space to the local IOP 170 (step 452) and returns a successful reply message to the local IRTOS 270 (step 470). The reply message is communicated to the local IRTOS 270 in the reverse order in which the remote allocate message was received. Therefore, the remote IRTOS 271 communicates the reply message to the remote transport agent 311, which communicates the reply message to the remote peer transport 330, which communicates the reply message across the PCI bus 185 to the local peer transport 320, which communicates the reply message to the local transport agent 320. The local transport agent communicates the reply message from the transport layer 300 to the local IRTOS 270. 
     In addition to indicating whether the remote memory allocation was successful, the reply message includes an alias which identifies the remote buffer 291 and a scatter gather list. The scatter gather list is commonly known in the industry and contains such parameters as a memory location of the beginning of the remote buffer 291 and the length of the remote buffer 291 among other parameters. If the remote memory allocation was successful, the local IRTOS 270 enters information pertaining to the size, location and characteristics of the remote buffer 291 into the local buffer table 280 as an extension of the local memory 175 (step 480). 
     Although the preferred embodiment of the apparatus and method of the present invention has been illustrated in the accompanying Drawings and described in the foregoing Detailed Description, it is understood that the invention is not limited to the embodiments disclosed, but is capable of numerous rearrangements, modifications and substitutions without departing from the spirit of the invention as set forth and defined by the following claims.