EP2168052A1 - Data buffering and notification system and methods thereof - Google Patents

Data buffering and notification system and methods thereof

Info

Publication number
EP2168052A1
EP2168052A1 EP07812957A EP07812957A EP2168052A1 EP 2168052 A1 EP2168052 A1 EP 2168052A1 EP 07812957 A EP07812957 A EP 07812957A EP 07812957 A EP07812957 A EP 07812957A EP 2168052 A1 EP2168052 A1 EP 2168052A1
Authority
EP
European Patent Office
Prior art keywords
program
message
network
temporary buffer
host device
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Withdrawn
Application number
EP07812957A
Other languages
German (de)
French (fr)
Other versions
EP2168052A4 (en
Inventor
Harlan T. Beverly
Charles A. Musta
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Qualcomm Inc
Original Assignee
Bigfoot Networks Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Bigfoot Networks Inc filed Critical Bigfoot Networks Inc
Priority claimed from US11/778,124 external-priority patent/US8874780B2/en
Publication of EP2168052A1 publication Critical patent/EP2168052A1/en
Publication of EP2168052A4 publication Critical patent/EP2168052A4/en
Withdrawn legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/382Information transfer, e.g. on bus using universal interface adapter
    • G06F13/387Information transfer, e.g. on bus using universal interface adapter for adaptation of different data processing systems to different peripheral devices, e.g. protocol converters for incompatible systems, open system
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/10Program control for peripheral devices
    • G06F13/102Program control for peripheral devices where the programme performs an interfacing function, e.g. device driver
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/131Protocols for games, networked simulations or virtual reality
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L69/00Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
    • H04L69/16Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
    • H04L69/161Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields

Definitions

  • the present disclosure relates generally to data communications, and more specifically to a system and method for managing received data at a computer device.
  • One conventional method is for the server program to periodically poll the network stack of the server operating system to determine if data has been received.
  • this method can take an undesirable amount of time, resulting in an undesirable delay in the server program responding to client requests.
  • the speed at which a client program can be notified that it has received data from the server, and the speed with which the data can be provided to the server program can also cause undesirable delay. Similar problems can occur in peer-to-peer networks, resulting in undesirable delays in communications between programs at computer devices in the peer-to-peer network.
  • FIG. 1 is a block diagram of a particular embodiment of a network arrangement incorporating teachings of the present disclosure
  • FIG. 2 is a block diagram of a particular embodiment of a computing device that incorporates teachings of the present disclosure
  • FIG. 3 is a block diagram of an alternative embodiment of a computing device and a network device that incorporates teachings of the present disclosure
  • FIG. 4 is a block diagram of an alternative embodiment of a network device and a computing device that incorporates teachings of the present disclosure.
  • FIG. 5 is a block diagram of a particular embodiment of a network device that incorporates teachings of the present disclosure.
  • a communicative interaction may be one or more of: intending to send information, sending information, requesting information, receiving information, or receiving a request for information.
  • a communicative interaction could be one directional, bi-directional, or multidirectional.
  • a communicative interaction could be relatively complex and involve two or more network elements.
  • a communicative interaction may be "a conversation" or series of related communications between a client and a server or computer devices in a peer-to-peer network - each network element sending and receiving information to and from the other.
  • a network element may be a node, a piece of hardware, software, firmware, middleware, some other component of a computing system, and/or some combination thereof.
  • a network element may have broader applicability. As such, discussions relating to gaming issues like lag, game freezes, stuttering, warping, etc. are not intended to limit the scope of the disclosure.
  • MMOG Massively Multiplayer Online Game
  • other interactive applications such as Video On Demand, entertainment distribution, information distribution, etc., may also be implemented in a manner that incorporates the teachings disclosed herein.
  • a system incorporating teachings of the present disclosure may include a processor module that monitors communications between a computer programs at different computer devices in a network, such as a client program resident on a user machine and a server program resident on a computing device remote from the user, or a program at one device in a peer-to-peer network communicating with a program at another device in the network.
  • the server program may be part of a two-tier architecture that is deployed in a hub and spoke or centralized server configuration.
  • the server program may also be utilized in a less centralized model.
  • the server program may be implemented as one of two or more client programs that perform server-like functionality.
  • a program communicating with another program in the network is referred to herein as a peer program, and the device executing the peer program as a peer.
  • an interceptor program at the peer processor module may be utilized to intercept certain externally initiated communications intended for the peer program before those communications are placed on the network stack.
  • the interceptor program can be configured to store the received communications in a buffer in application space, rather than kernel space. The interceptor program can then intercept polling requests from the peer program inquiring if data for the peer program is located at the network stack, and provide the buffered communications to the peer program in response. Because the communications are stored in application space, rather than kernel space, the data can be rapidly provided to the peer program, improving the speed with which the program can respond to the client communications.
  • a device in the network or at the peer can monitor communications from another program in the network and determine when a communication targeted for the peer program has been received. In response, the device can initiate an interrupt at the peer.
  • the interrupt handler for the interrupt accesses the interceptor program, which notifies the peer program that a communication for the peer program has been received, and provide the data to either the peer program or the interceptor program if the peer program is not yet ready for the data.
  • the interceptor program if the interceptor program is used to hold that data, it can respond with the data in user space rather than kernel space when the peer program is ready. Both methods reduce the latency in providing a received client communication to the peer program.
  • FIG. 1 a block diagram of a particular embodiment of a network arrangement that includes a host program 103 executing at a host computing device 102, a network 106 including a network device 104, and a peer program 107 executing at a computing device 108.
  • the actual location of the network device 104 may be modified in other deployments.
  • the network device may be implemented at the host computing device 102 as a network card, a processor dongle, a "Lan on Motherboard" processor, etc.
  • network 106 may be a wide area network, such as the Internet, a local area network, or some other appropriate network or bus.
  • computing devices 102 and 108 may be similar or different.
  • computing device 108 may be a local user computer, a laptop, a cellular telephone, a gaming console, a workstation, or some other appropriate device
  • host computing device 102 may be a peer computer, a workstation, a peer of computing device 108, or some other appropriate device.
  • the peer program 107 and the host program 103 may communicate with each other via the network 106, and in particular via the network device 104.
  • the peer program 107 and host program 103 may work together to provide a user of computing device 108 with an online experience.
  • peer program 107 may receive content from computer device 102 and may occasionally send requests to host program 103 in an effort to affect the content being provided or to modify data at the host program 103.
  • FIG. 1 includes only one device executing a peer program. In practice, however, host program 103 and computing device 102 may be providing content to many peers at or near the same time.
  • the peer program 107 may send communications or messages to the host program 103 to update information, request that tasks be performed, and the like.
  • the host program 103 can be an online banking application and the peer program 107 can be a web browser.
  • the peer program 107 can send requests to the host program 103 to view account information, conduct transactions, and the like.
  • the host program 103 can determine if the requested tasks are authorized and, if so, execute the tasks.
  • the host program 103 is a server game program and the peer program 107 is a peer-side game program that provides a user with an online- gaming experience.
  • the host program 103 and the peer program 107 work together to provide a game simulation experience to two or more players at each computer device 102 and 106.
  • the peer program 107 sends messages via the network 106, and in particular to the network device 104.
  • Each message includes information, such as address information, indicating the location of the computer device 102.
  • Each message also includes port information, indicating the target port of the computer device 102 with which the message is associated.
  • the network device 104 delivers messages from network to the computer device 102.
  • the computer device 102 also includes an interceptor program 105 that monitors message from the network device 104. If a message is not targeted to the host program 103, the interceptor program 105 provides the message to a network stack at the computer device 102 or to some other program to which the data is targeted.
  • the network stack can subsequently be accessed by other programs (not shown) executing at the computer device 102 to retrieve the message, or the data is delivered to a different program (not shown).
  • the interceptor program 105 intercepts the message and stores it in a buffer for the host program 103.
  • the buffer is "logically close" to the host program 103 so that it can be quickly accessed. Accordingly, when the host program 103 inquires (such as through a polling request) whether a message has been sent from a peer program 107, the interceptor program 105 receives the inquiry and provides a response more rapidly than the message could be retrieved from the network stack.
  • the interceptor program 105 improves the communication efficiency between the peer program 107 and the host program 103. This reduces the likelihood of latency problems and provides for an improved user experience. Further, because the interceptor program 105 is located "between" the peer program 107 and the host program 103, it can be implemented without redesign of the host program 103 or the peer program 107. Accordingly, deployment of the interceptor program 105 is simplified.
  • the host program 103 is designed to frequently poll the network stack to check if a peer program 107 has been transmitted data intended for the host program 103. These polling requests can cause additional processing power to be consumed slowing overall operation. Because the interceptor program 105 can hold buffers and data ready information logically close to the host program 103 and provide the polling answer more quickly, processing power at the computer device 102 is conserved.
  • some or all of the interceptor program 105 could reside in the network device 104.
  • the interceptor program 105 could use buffers which reside in the network device 104 to conserve the amount of buffer space needed in the computer device 102.
  • the portion of the interceptor program 105 described above which has knowledge of if there is data available or not could still reside in user space, therefore giving similar improvements in polling.
  • Buffered data could reside in the network device 104, and be transferred directly to the host program 103 when the data was requested by the host program 103. This method conserves memory usage in the computer device 102 and also conserves processing power when the host program 103 is polling for information if data is available or not.
  • the network device 104 provides an interrupt to the computer device 102 when a message targeted to the host program 103 is received.
  • the computer device 102 executes the interceptor program 105, which receives the message from the network device 104.
  • the host program 103 may have outstanding receive commands and so would be immediately and notified that the message has been received.
  • the host program may poll or post a receive at some later time, at which point the data would be delivered as described above.
  • the host program 103 retrieves the message from the interceptor program 105.
  • the computer device 202 includes application space 220 and kernel space 230.
  • kernel space refers to memory address space that is typically only accessible by the kernel of an operating system at the computer device 202.
  • Applications executing at the computer device 202 typically cannot access the kernel space directly, but instead must request information stored in the kernel space from the operating system kernel.
  • Application space refers to memory address space that is accessible by applications at the computer device 202.
  • Applications can typically access information stored in the application space 220 more quickly than information stored in the kernel space 230, because accesses to the application space 220 are not typically performed through the kernel.
  • both the kernel space 230 and the application space 220 can be virtual memory address spaces.
  • the application space 220 includes a host program 203, a program 207, and a temporary buffer 225.
  • the kernel space 235 includes a network stack 235.
  • the computer device 202 also includes an interceptor program 205 that, as illustrated, resides in both kernel space 235 and application space 220.
  • the network stack 235 is configured to store messages and other information received from the network 106.
  • the network stack 235 is accessed by the kernel in response to requests from applications executing at the computer device 202.
  • the kernel can determine if the network stack stores data for the requesting application and, if so, provide the data. Because the kernel typically executes a number of tasks in addition to accessing the network stack 235, accessing the network stack typically takes more time than an access to data stored in the application space 220.
  • the interceptor program 205 monitors messages received from the network 106. If a message is not targeted to the host program 203, the interceptor program 205 provides the message to the network stack 235 or to the program it is directed to, so that it is available for access by other programs at the computer device 202, such as the program 207. If the received message is targeted to the host program 203, the interceptor program stores the message in the temporary buffer 225 or an indication that the data is ready in the temporary buffer 225. In an alternative implementation a temporary data buffer is stored in kernel space 230 and only the indication that data is ready is stored in the temporary buffer 225. In yet another implementation, the indication that data is ready is stored in the temporary buffer 225, but the data itself is given to the network stack 235.
  • the interceptor program 205 also monitors communications between the host program 203 and the kernel to determine if the host program 203 is attempting to access the network stack 235. For example, the host program 203 may periodically poll the network stack 235 to determine if a message targeted to the program has been received from the network 106.
  • the polling request to check the network stack 235 can be a poll request, a blocking select request, a non- blocking select request, a blocking receive request, a non-blocking receive request, or an asynchronous receive request, or any other such request as is used to determine if data is available.
  • the interceptor program 205 detects a polling request from the host program 203, it intercepts the request and determines if a message for the host program 203 is stored in the temporary buffer 225 or if the temporary buffer 225 indicates that data is ready to receive. If no message is stored in the temporary buffer 225 or there is no indication that data is ready to be received, the interceptor program 205 notifies the host program 203. If a message is stored in the temporary buffer 225, the interceptor program 205 either notifies the host program or when asked, provides the data to the host program 203.
  • the interceptor program 205 is able to indicate whether or not there is data ready for the host program more quickly than it would be able to from the network stack 235.
  • the interceptor program 205 is able to provide the stored message more quickly than it would be provided by the kernel from the network stack 235.
  • FIG. 3 a block diagram of a particular embodiment of a computer device 302 and a network device 304 are illustrated, corresponding to the computer device 102 and the network device 104, respectively, of FIG. 1.
  • the network device 304 includes an interceptor program 350.
  • the computer device 302 includes application space 320, kernel space 330, an interceptor program 305, and an interrupt handler 340.
  • the application space 320 includes a host program 303 and a temporary buffer 325.
  • the kernel space 330 includes a network stack 335.
  • the network device 304 receives messages from the peer program 107 via the network 106.
  • the interceptor program 350 monitors messages received from the network 106 and determines which of those messages are targeted to the host program 303.
  • the interceptor program 350 provides messages not targeted to the host program 303 to the network stack 335 of the computer device 302 or to a different program (not shown).
  • the network device 304 can send an interrupt indicator to the computer device 302.
  • the computer device 302 invokes the interrupt handler 340, which stores an indication that the message has been received in the temporary buffer 325.
  • the message itself can be stored in the temporary buffer 325, in another buffer (not shown) in application space 320, in kernel space 330, or in the network stack 335.
  • the temporary buffer can be located at the network device 304.
  • the interceptor program 305 accesses the temporary buffer 325 to determine that a message associated with the host program 303has been received and notifies the host program 303 that the message is available. Further, the interceptor program can retrieve the message and provide it to the host program 303. Because the indication that the message has been received is not placed on the network stack 335, notification of the received message can be provided more quickly to the host program 303, thereby improving communication efficiency between the peer program 107 and the host program 103. In an alternative embodiment, the interceptor program 305 intercepts polling requests from the host program 303 that are targeted to the network stack.
  • the interceptor program 305 determines, based on the contents of the temporary buffer 325, whether a message targeted to the host program 303 has been received. If no message has been received, the interceptor program 305 responds to the polling request to indicate no message is available. If a message has been received, the interceptor program 305 retrieves the message (from the temporary buffer 325, from another buffer in application space, from a buffer in kernel space 330, or from the network stack 335) and provides the message to the host program 303. Because the interceptor program 305 does not access the kernel space 330 in order to determine whether a message is available, it can respond to poll requests from the host program 303 more quickly than if the requests were to proceed directly to the network stack 335.
  • the network device 404 includes an interceptor program 450.
  • the computer device 402 includes application space 420 and kernel space 430.
  • the application space 420 includes a host program 403, an interceptor program 405, and a temporary buffer 425.
  • the kernel space 430 includes a network stack 435.
  • the interceptor program 450 is configured to access the temporary buffer 425 and the network stack 435.
  • the interceptor program 405 is configured to interface with the host program 403, the network stack 435, and the temporary buffer 425.
  • the network device 404 receives messages from the peer program 107 via the network 106.
  • the interceptor program 450 monitors messages received from the network 106 and determines which of those messages are targeted to the host program 403.
  • the interceptor program 450 provides messages not targeted to the host program 403 to the network stack 435 of the computer device 402 or to a different program (not shown). If a message is targeted to the host program 403, the interceptor program 405 can store the message or an indication that there is a new message available in the temporary buffer 425.
  • the interceptor program 405 monitors communications between the host program 403 and the kernel to determine if the host program 403 is attempting to access the network stack 435. For example, the host program 403 may periodically poll the network stack 435 to determine if a message targeted to the program has been received from the network 106. If the interceptor program 405 detects a polling request from the host program 403, it intercepts the request and determines if a message for the host program 403 is stored in the temporary buffer 425 or if the temporary buffer indicates that data is ready to receive. If no message is stored there or there is no indication that data is ready to be received, the interceptor program 405 notifies the host program 403.
  • the interceptor program 405 determines whether a message is available for the host program 403 without accessing the network stack, it can respond to polling requests quickly, thereby improving the performance of the host program 403
  • FIG. 5 a block diagram of a particular embodiment of a network device 504, corresponding to the network device 504, is illustrated.
  • the network device 504 includes a processor 570 and a memory 560.
  • the memory 560 is accessible to the processor 570.
  • the processor 570 can be a microprocessor, microcontroller, and the like.
  • the memory 560 is a computer readable medium that can be volatile memory, such as random access memory (RAM), or non-volatile memory, such as a hard disk or flash memory.
  • the memory 560 stores an interceptor program 550 and an operating system 507.
  • the interceptor program 550 and the operating system 507 include instructions to manipulate the processor 570 in order to implement one or more of the methods described herein.
  • Other programs, such as applications, can also be stored in the memory 560 to manipulate the processor in order to implement the described methods.
  • the computer device 102 could be configured similarly to the network device 504, including a memory to store one or more programs to manipulate a processor to implement one or more of the methods described herein.

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer And Data Communications (AREA)

Abstract

An interceptor program at a computer device intercepts certain externally initiated communications intended for the peer program before those communications are placed on the network stack. Further, the interceptor program stores the received communications in a buffer in application space, rather than kernel space. The interceptor program can then intercept polling requests from the peer program inquiring if data for the peer program is located at the network stack, and provide the buffered communications to the peer program in response. Because the communications are stored in application space, rather than kernel space, the data can be rapidly provided to the peer program, improving the speed with which the program can respond to the client communications.

Description

DATA BUFFERING AND NOTIFICATION SYSTEM AND METHODS THEREOF
Harlan T. Beverly Charles A. Musta
CROSS REFERENCE TO RELATED APPLICATIONS
FIELD OF THE INVENTION
The present disclosure relates generally to data communications, and more specifically to a system and method for managing received data at a computer device.
BACKGROUND
In recent years, several applications have been developed that rely on timely and effective interactions between two or more elements of a communication network. For example, in the sphere of online gaming, hundreds or thousands of game clients executing on user machines may be interacting with a central server executing on a networked computer. With such an architecture, a game server program is frequently tasked with providing content to clients, receiving client requests, processing those requests, responding to those requests, and synchronizing those requests with the requests of other clients. One factor that can affect the server programs ability to timely respond to client requests is the speed at which the server program can be notified that it has received data from the client, and the speed with which the data can be provided to the server program. One conventional method is for the server program to periodically poll the network stack of the server operating system to determine if data has been received. However, this method can take an undesirable amount of time, resulting in an undesirable delay in the server program responding to client requests. Furthermore, the speed at which a client program can be notified that it has received data from the server, and the speed with which the data can be provided to the server program can also cause undesirable delay. Similar problems can occur in peer-to-peer networks, resulting in undesirable delays in communications between programs at computer devices in the peer-to-peer network.
In the gaming context, this can result in distracting events such as game freezes, stuttering, warping, etc. As such, a need exists for an improved processing system and method that manages received data. BRIEF DESCRIPTION OF THE DRAWINGS
It will be appreciated that for simplicity and clarity of illustration, elements illustrated in the Figures have not necessarily been drawn to scale. For example, the dimensions of some of the elements are exaggerated relative to other elements. Embodiments incorporating teachings of the present disclosure are shown and described with respect to the drawings presented herein, in which:
FIG. 1 is a block diagram of a particular embodiment of a network arrangement incorporating teachings of the present disclosure;
FIG. 2 is a block diagram of a particular embodiment of a computing device that incorporates teachings of the present disclosure;
FIG. 3 is a block diagram of an alternative embodiment of a computing device and a network device that incorporates teachings of the present disclosure;
FIG. 4 is a block diagram of an alternative embodiment of a network device and a computing device that incorporates teachings of the present disclosure; and
FIG. 5 is a block diagram of a particular embodiment of a network device that incorporates teachings of the present disclosure.
DETAILED DESCRIPTION
Embodiments discussed below describe, in part, distributed computing solutions that manage all or part of a communicative interaction between network elements. In this context, a communicative interaction may be one or more of: intending to send information, sending information, requesting information, receiving information, or receiving a request for information. As such, a communicative interaction could be one directional, bi-directional, or multidirectional. In some circumstances, a communicative interaction could be relatively complex and involve two or more network elements. For example, a communicative interaction may be "a conversation" or series of related communications between a client and a server or computer devices in a peer-to-peer network - each network element sending and receiving information to and from the other. Whatever form the communicative interaction takes, it should be noted that the network elements involved need not take any specific form. A network element may be a node, a piece of hardware, software, firmware, middleware, some other component of a computing system, and/or some combination thereof. Though much of the following discussion focuses on specific problems associated with online gaming, the teachings disclosed herein may have broader applicability. As such, discussions relating to gaming issues like lag, game freezes, stuttering, warping, etc. are not intended to limit the scope of the disclosure. In addition, though the specific embodiment described in connection with FIG. 1 involves a Massively Multiplayer Online Game (MMOG), other interactive applications such as Video On Demand, entertainment distribution, information distribution, etc., may also be implemented in a manner that incorporates the teachings disclosed herein.
From a high level, a system incorporating teachings of the present disclosure may include a processor module that monitors communications between a computer programs at different computer devices in a network, such as a client program resident on a user machine and a server program resident on a computing device remote from the user, or a program at one device in a peer-to-peer network communicating with a program at another device in the network. In the case of a server/client architecture, the server program may be part of a two-tier architecture that is deployed in a hub and spoke or centralized server configuration. The server program may also be utilized in a less centralized model. For example, the server program may be implemented as one of two or more client programs that perform server-like functionality. For purposes of discussion herein, a program communicating with another program in the network is referred to herein as a peer program, and the device executing the peer program as a peer.
However, the peer program is implemented, an interceptor program at the peer processor module may be utilized to intercept certain externally initiated communications intended for the peer program before those communications are placed on the network stack. Further, the interceptor program can be configured to store the received communications in a buffer in application space, rather than kernel space. The interceptor program can then intercept polling requests from the peer program inquiring if data for the peer program is located at the network stack, and provide the buffered communications to the peer program in response. Because the communications are stored in application space, rather than kernel space, the data can be rapidly provided to the peer program, improving the speed with which the program can respond to the client communications.
Alternatively, a device in the network or at the peer can monitor communications from another program in the network and determine when a communication targeted for the peer program has been received. In response, the device can initiate an interrupt at the peer. The interrupt handler for the interrupt accesses the interceptor program, which notifies the peer program that a communication for the peer program has been received, and provide the data to either the peer program or the interceptor program if the peer program is not yet ready for the data. As noted above, if the interceptor program is used to hold that data, it can respond with the data in user space rather than kernel space when the peer program is ready. Both methods reduce the latency in providing a received client communication to the peer program.
As indicated above, this application claims priority to U.S. Provisional Patent No. 60/807, 530 filed on July 17, 2006. The provisional application describes in part specific implementations of the teachings disclosed herein and is not intended to limit the scope of the claims attached below. The entirety of the provisional application is incorporated herein by reference.
Referring to FIG. 1 , a block diagram of a particular embodiment of a network arrangement that includes a host program 103 executing at a host computing device 102, a network 106 including a network device 104, and a peer program 107 executing at a computing device 108. The actual location of the network device 104 may be modified in other deployments. For example, the network device may be implemented at the host computing device 102 as a network card, a processor dongle, a "Lan on Motherboard" processor, etc. In the embodiment of FIG.1, network 106 may be a wide area network, such as the Internet, a local area network, or some other appropriate network or bus. Within arrangement 100, computing devices 102 and 108 may be similar or different. For example, computing device 108 may be a local user computer, a laptop, a cellular telephone, a gaming console, a workstation, or some other appropriate device, and host computing device 102 may be a peer computer, a workstation, a peer of computing device 108, or some other appropriate device.
In operation, the peer program 107 and the host program 103 may communicate with each other via the network 106, and in particular via the network device 104. In one embodiment, the peer program 107 and host program 103 may work together to provide a user of computing device 108 with an online experience. In operation, peer program 107 may receive content from computer device 102 and may occasionally send requests to host program 103 in an effort to affect the content being provided or to modify data at the host program 103. As shown, FIG. 1 includes only one device executing a peer program. In practice, however, host program 103 and computing device 102 may be providing content to many peers at or near the same time.
In operation, the peer program 107 may send communications or messages to the host program 103 to update information, request that tasks be performed, and the like. For example, the host program 103 can be an online banking application and the peer program 107 can be a web browser. The peer program 107 can send requests to the host program 103 to view account information, conduct transactions, and the like. In response, the host program 103 can determine if the requested tasks are authorized and, if so, execute the tasks. In another embodiment, the host program 103 is a server game program and the peer program 107 is a peer-side game program that provides a user with an online- gaming experience. In another embodiment, the host program 103 and the peer program 107 work together to provide a game simulation experience to two or more players at each computer device 102 and 106.
To communicate with the host program 103, the peer program 107 sends messages via the network 106, and in particular to the network device 104. Each message includes information, such as address information, indicating the location of the computer device 102. Each message also includes port information, indicating the target port of the computer device 102 with which the message is associated. The network device 104 delivers messages from network to the computer device 102. In a particular embodiment, the computer device 102 also includes an interceptor program 105 that monitors message from the network device 104. If a message is not targeted to the host program 103, the interceptor program 105 provides the message to a network stack at the computer device 102 or to some other program to which the data is targeted. The network stack can subsequently be accessed by other programs (not shown) executing at the computer device 102 to retrieve the message, or the data is delivered to a different program (not shown). If the message is targeted for the host program 103 (for example, if the port targeted by the message is associated with the host program 103), the interceptor program 105 intercepts the message and stores it in a buffer for the host program 103. The buffer is "logically close" to the host program 103 so that it can be quickly accessed. Accordingly, when the host program 103 inquires (such as through a polling request) whether a message has been sent from a peer program 107, the interceptor program 105 receives the inquiry and provides a response more rapidly than the message could be retrieved from the network stack. Later, or at the same time as the polling request, if the data is requested by the host program 103, the data is delivered to the host program 103 more rapidly than the message could be retrieved from the network stack. Accordingly, the interceptor program 105 improves the communication efficiency between the peer program 107 and the host program 103. This reduces the likelihood of latency problems and provides for an improved user experience. Further, because the interceptor program 105 is located "between" the peer program 107 and the host program 103, it can be implemented without redesign of the host program 103 or the peer program 107. Accordingly, deployment of the interceptor program 105 is simplified. Additionally, in one embodiment the host program 103 is designed to frequently poll the network stack to check if a peer program 107 has been transmitted data intended for the host program 103. These polling requests can cause additional processing power to be consumed slowing overall operation. Because the interceptor program 105 can hold buffers and data ready information logically close to the host program 103 and provide the polling answer more quickly, processing power at the computer device 102 is conserved.
In an alternative embodiment, some or all of the interceptor program 105 could reside in the network device 104. In this case the interceptor program 105 could use buffers which reside in the network device 104 to conserve the amount of buffer space needed in the computer device 102. The portion of the interceptor program 105 described above which has knowledge of if there is data available or not could still reside in user space, therefore giving similar improvements in polling. Buffered data could reside in the network device 104, and be transferred directly to the host program 103 when the data was requested by the host program 103. This method conserves memory usage in the computer device 102 and also conserves processing power when the host program 103 is polling for information if data is available or not.
In another alternative embodiment, the network device 104 provides an interrupt to the computer device 102 when a message targeted to the host program 103 is received. In response to the interrupt, the computer device 102 executes the interceptor program 105, which receives the message from the network device 104. The host program 103 may have outstanding receive commands and so would be immediately and notified that the message has been received. Alternatively, the host program may poll or post a receive at some later time, at which point the data would be delivered as described above. In response, the host program 103 retrieves the message from the interceptor program 105.
Referring to FIG. 2, a block diagram of a particular embodiment of a computer device 202, corresponding to the computer device 102 of FIG. 1, is illustrated. The computer device 202 includes application space 220 and kernel space 230. As used herein, the term kernel space refers to memory address space that is typically only accessible by the kernel of an operating system at the computer device 202. Applications executing at the computer device 202 typically cannot access the kernel space directly, but instead must request information stored in the kernel space from the operating system kernel. Application space refers to memory address space that is accessible by applications at the computer device 202. Applications can typically access information stored in the application space 220 more quickly than information stored in the kernel space 230, because accesses to the application space 220 are not typically performed through the kernel. Note that both the kernel space 230 and the application space 220 can be virtual memory address spaces.
As illustrated, the application space 220 includes a host program 203, a program 207, and a temporary buffer 225. The kernel space 235 includes a network stack 235. The computer device 202 also includes an interceptor program 205 that, as illustrated, resides in both kernel space 235 and application space 220.
In operation, the network stack 235 is configured to store messages and other information received from the network 106. The network stack 235 is accessed by the kernel in response to requests from applications executing at the computer device 202. The kernel can determine if the network stack stores data for the requesting application and, if so, provide the data. Because the kernel typically executes a number of tasks in addition to accessing the network stack 235, accessing the network stack typically takes more time than an access to data stored in the application space 220.
The interceptor program 205 monitors messages received from the network 106. If a message is not targeted to the host program 203, the interceptor program 205 provides the message to the network stack 235 or to the program it is directed to, so that it is available for access by other programs at the computer device 202, such as the program 207. If the received message is targeted to the host program 203, the interceptor program stores the message in the temporary buffer 225 or an indication that the data is ready in the temporary buffer 225. In an alternative implementation a temporary data buffer is stored in kernel space 230 and only the indication that data is ready is stored in the temporary buffer 225. In yet another implementation, the indication that data is ready is stored in the temporary buffer 225, but the data itself is given to the network stack 235.
The interceptor program 205 also monitors communications between the host program 203 and the kernel to determine if the host program 203 is attempting to access the network stack 235. For example, the host program 203 may periodically poll the network stack 235 to determine if a message targeted to the program has been received from the network 106. The polling request to check the network stack 235 can be a poll request, a blocking select request, a non- blocking select request, a blocking receive request, a non-blocking receive request, or an asynchronous receive request, or any other such request as is used to determine if data is available. If the interceptor program 205 detects a polling request from the host program 203, it intercepts the request and determines if a message for the host program 203 is stored in the temporary buffer 225 or if the temporary buffer 225 indicates that data is ready to receive. If no message is stored in the temporary buffer 225 or there is no indication that data is ready to be received, the interceptor program 205 notifies the host program 203. If a message is stored in the temporary buffer 225, the interceptor program 205 either notifies the host program or when asked, provides the data to the host program 203. Because the temporary buffer 225 is located in application space 220, the interceptor program 205 is able to indicate whether or not there is data ready for the host program more quickly than it would be able to from the network stack 235. When the temporary buffer 225 also holds the data and is located in application space 220, the interceptor program 205 is able to provide the stored message more quickly than it would be provided by the kernel from the network stack 235.
Referring to FIG. 3, a block diagram of a particular embodiment of a computer device 302 and a network device 304 are illustrated, corresponding to the computer device 102 and the network device 104, respectively, of FIG. 1. The network device 304 includes an interceptor program 350. The computer device 302 includes application space 320, kernel space 330, an interceptor program 305, and an interrupt handler 340. The application space 320 includes a host program 303 and a temporary buffer 325. The kernel space 330 includes a network stack 335.
In operation, the network device 304 receives messages from the peer program 107 via the network 106. The interceptor program 350 monitors messages received from the network 106 and determines which of those messages are targeted to the host program 303. The interceptor program 350 provides messages not targeted to the host program 303 to the network stack 335 of the computer device 302 or to a different program (not shown). If a message is targeted to the host program 303, the network device 304 can send an interrupt indicator to the computer device 302. In response to the interrupt indicator, the computer device 302 invokes the interrupt handler 340, which stores an indication that the message has been received in the temporary buffer 325. The message itself can be stored in the temporary buffer 325, in another buffer (not shown) in application space 320, in kernel space 330, or in the network stack 335. In an alternative embodiment, the temporary buffer can be located at the network device 304.
In a particular embodiment, the interceptor program 305 accesses the temporary buffer 325 to determine that a message associated with the host program 303has been received and notifies the host program 303 that the message is available. Further, the interceptor program can retrieve the message and provide it to the host program 303. Because the indication that the message has been received is not placed on the network stack 335, notification of the received message can be provided more quickly to the host program 303, thereby improving communication efficiency between the peer program 107 and the host program 103. In an alternative embodiment, the interceptor program 305 intercepts polling requests from the host program 303 that are targeted to the network stack. In response to intercepting the polling request, the interceptor program 305 determines, based on the contents of the temporary buffer 325, whether a message targeted to the host program 303 has been received. If no message has been received, the interceptor program 305 responds to the polling request to indicate no message is available. If a message has been received, the interceptor program 305 retrieves the message (from the temporary buffer 325, from another buffer in application space, from a buffer in kernel space 330, or from the network stack 335) and provides the message to the host program 303. Because the interceptor program 305 does not access the kernel space 330 in order to determine whether a message is available, it can respond to poll requests from the host program 303 more quickly than if the requests were to proceed directly to the network stack 335.
Referring to FIG. 4, a block diagram of a particular embodiment of a computer device 402 and a network device 404 are illustrated. The network device 404 includes an interceptor program 450. The computer device 402 includes application space 420 and kernel space 430. The application space 420 includes a host program 403, an interceptor program 405, and a temporary buffer 425. The kernel space 430 includes a network stack 435. The interceptor program 450 is configured to access the temporary buffer 425 and the network stack 435. The interceptor program 405 is configured to interface with the host program 403, the network stack 435, and the temporary buffer 425.
In operation, the network device 404 receives messages from the peer program 107 via the network 106. The interceptor program 450 monitors messages received from the network 106 and determines which of those messages are targeted to the host program 403. The interceptor program 450 provides messages not targeted to the host program 403 to the network stack 435 of the computer device 402 or to a different program (not shown). If a message is targeted to the host program 403, the interceptor program 405 can store the message or an indication that there is a new message available in the temporary buffer 425.
The interceptor program 405 monitors communications between the host program 403 and the kernel to determine if the host program 403 is attempting to access the network stack 435. For example, the host program 403 may periodically poll the network stack 435 to determine if a message targeted to the program has been received from the network 106. If the interceptor program 405 detects a polling request from the host program 403, it intercepts the request and determines if a message for the host program 403 is stored in the temporary buffer 425 or if the temporary buffer indicates that data is ready to receive. If no message is stored there or there is no indication that data is ready to be received, the interceptor program 405 notifies the host program 403. If a message is stored in the temporary buffer 425, the interceptor program 405 either notifies the host program or when asked, provides the data to the host program 403. Because the interceptor program 405 can determine whether a message is available for the host program 403 without accessing the network stack, it can respond to polling requests quickly, thereby improving the performance of the host program 403 Referring to FIG. 5, a block diagram of a particular embodiment of a network device 504, corresponding to the network device 504, is illustrated. The network device 504 includes a processor 570 and a memory 560. The memory 560 is accessible to the processor 570. The processor 570 can be a microprocessor, microcontroller, and the like. The memory 560 is a computer readable medium that can be volatile memory, such as random access memory (RAM), or non-volatile memory, such as a hard disk or flash memory.
The memory 560 stores an interceptor program 550 and an operating system 507. The interceptor program 550 and the operating system 507 include instructions to manipulate the processor 570 in order to implement one or more of the methods described herein. Other programs, such as applications, can also be stored in the memory 560 to manipulate the processor in order to implement the described methods. It will be appreciated that the computer device 102 could be configured similarly to the network device 504, including a memory to store one or more programs to manipulate a processor to implement one or more of the methods described herein.
The above disclosed subject matter is to be considered illustrative, and not restrictive, and the appended claims are intended to cover all such modifications, enhancements, and other embodiments that fall within the true spirit and scope of the present invention. Thus, to the maximum extent allowed by law, the scope of the present invention is to be determined by the broadest permissible interpretation of the following claims and their equivalents, and shall not be restricted or limited by the foregoing detailed description.

Claims

WHAT IS CLAIMED IS:
1. A method, comprising: receiving a first message from a network; determining that the first message is targeted for a first program at a host device; storing an indication in a temporary buffer that the first message has been received in response to determining that the first message is targeted to the first program, the temporary buffer separate from a network stack at the host device.
2. The method of claim 1, further comprising: receiving a second message from the network; determining that the second message is targeted for a second program at the host device; storing the second message in the network stack at the host device.
3. The method of claim 2, wherein the temporary buffer is located in application space.
4. The method of claim 3, wherein the network stack is located in kernel space.
5. The method of claim 1, wherein the temporary buffer is located in a network device remote from the host device.
6. The method of claim 1, further comprising: intercepting a first network stack request from the first program; providing an indication to the first program that the first message is available in response to intercepting the first network stack request.
7. The method of claim 6, further comprising determining that the first message is available based on data stored at the temporary buffer.
8. The method of claim 6, wherein the first network stack request is selected from the group consisting of a non-blocking select request, a blocking select request, and an asynchronous select request.
9. The method of claim 6, further comprising providing the first message to the first program in response to an indication that the first message is available asynchronously.
10. The method of claim 1, wherein storing an indication in the temporary buffer comprises storing the first message in the temporary buffer:
11. The method of claim 10, further comprising: intercepting a first network stack request from the first program; providing the first message to the first program in response to intercepting the first network stack request.
12. The method of claim 11, wherein the first network stack request is selected from the group consisting of a non-blocking receive request, a blocking receive request, an asynchronous receive request.
13. The method of claim 1, further comprising storing the first message at the network stack.
14. The method of claim 1, wherein the temporary buffer is located in application space, and further comprising storing the first message in kernel space.
15. The method of claim 1, further comprising: intercepting a first network stack request from the first program; providing an indication that data is not available to the first program in based on data stored at the temporary buffer.
16. The method of claim 15, wherein the temporary buffer is located in application space.
17. A method, comprising: receiving an interrupt request from a network device, the interrupt request indicating a first message has been received; notifying a first program at a host device that the first message has been received in response to the interrupt request; receiving a second message from the network device; and storing the second message in a network stack.
18. The method of claim 17, further comprising storing an indication that the first message has been received in a temporary buffer at the host device in response to receiving the interrupt request.
19. The method of claim 18, wherein the temporary buffer is located in application space.
20. The method of claim 14, further comprising providing the first message to the first application in response to the interrupt request.
21. A computer readable medium configured to store instructions to manipulate a processor, the instructions comprising: instructions to receive a first message from a network; instructions to determine at a network device that the first message is targeted for a first program at a host device; instructions to store an indication in a temporary buffer at the host device that the first message has been received in response to determining that the first message is targeted to the first program; instructions to receive a second message from the network; instructions to determine that the second message is targeted for a second program at the host device; instructions to store the second message in a network stack at the host device, the network stack separate from the temporary buffer.
22. The computer readable medium of claim 21, wherein the temporary buffer is located in application space.
23. The computer readable medium of claim 22, wherein the network stack is located in kernel space.
24. The computer readable medium of claim 21, further comprising instructions to provide an interrupt indication to the host device in response to determining that the first message is targeted to the first program at the host device.
25. A network device, comprising: an input configured to receive a first message from a network; a processor configured to determine if the first message is targeted to a first program at a host device; an output configured to store an indication in a temporary buffer at the host device in response to the processor determining that the first message is targeted to the first program, the temporary buffer located in application space at the host device.
26. The network device of claim 25, wherein the output is further configured to provide the first message to a network stack at the host device in response to the processor determining that the first message is targeted to a second program at the host device, the network stack located in kernel space of the host device.
27. The network device of claim 25, wherein the output is configured to provide an interrupt to the host device in response to the processor determining that the first message is targeted to the first program.
28. The network device of claim 25, wherein the output is configured to store the first message in the temporary buffer.
EP07812957A 2007-07-16 2007-07-16 Data buffering and notification system and methods thereof Withdrawn EP2168052A4 (en)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
PCT/US2007/073570 WO2009011695A1 (en) 2006-07-17 2007-07-16 Data buffering and notification system and methods thereof
US11/778,124 US8874780B2 (en) 2006-07-17 2007-07-16 Data buffering and notification system and methods thereof

Publications (2)

Publication Number Publication Date
EP2168052A1 true EP2168052A1 (en) 2010-03-31
EP2168052A4 EP2168052A4 (en) 2011-03-09

Family

ID=40259888

Family Applications (1)

Application Number Title Priority Date Filing Date
EP07812957A Withdrawn EP2168052A4 (en) 2007-07-16 2007-07-16 Data buffering and notification system and methods thereof

Country Status (2)

Country Link
EP (1) EP2168052A4 (en)
WO (1) WO2009011695A1 (en)

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2004001615A1 (en) * 2002-06-19 2003-12-31 Telefonaktiebolaget Lm Ericsson A network device driver architecture
US6675218B1 (en) * 1998-08-14 2004-01-06 3Com Corporation System for user-space network packet modification
US20070162639A1 (en) * 2005-11-30 2007-07-12 Chu Hsiao-Keng J TCP-offload-engine based zero-copy sockets

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7613813B2 (en) * 2004-09-10 2009-11-03 Cavium Networks, Inc. Method and apparatus for reducing host overhead in a socket server implementation
US20060253605A1 (en) * 2004-12-30 2006-11-09 Prabakar Sundarrajan Systems and methods for providing integrated client-side acceleration techniques to access remote applications
US7567567B2 (en) * 2005-04-05 2009-07-28 Sun Microsystems, Inc. Network system including packet classification for partitioned resources
US8713180B2 (en) * 2005-06-22 2014-04-29 Cisco Technology, Inc. Zero-copy network and file offload for web and application servers
US20070094643A1 (en) * 2005-10-25 2007-04-26 Anderson Eric A System and method for writing captured data from kernel-level to a file

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6675218B1 (en) * 1998-08-14 2004-01-06 3Com Corporation System for user-space network packet modification
WO2004001615A1 (en) * 2002-06-19 2003-12-31 Telefonaktiebolaget Lm Ericsson A network device driver architecture
US20070162639A1 (en) * 2005-11-30 2007-07-12 Chu Hsiao-Keng J TCP-offload-engine based zero-copy sockets

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
See also references of WO2009011695A1 *

Also Published As

Publication number Publication date
EP2168052A4 (en) 2011-03-09
WO2009011695A1 (en) 2009-01-22

Similar Documents

Publication Publication Date Title
US8874780B2 (en) Data buffering and notification system and methods thereof
US20200195537A1 (en) Load balancing web service by rejecting connections
US11340926B2 (en) Hypervisor remedial action for a virtual machine in response to an error message from the virtual machine
Daglis et al. RPCValet: NI-driven tail-aware balancing of µs-scale RPCs
US8543692B2 (en) Network system
US20080240144A1 (en) File server pipelining with denial of service mitigation
US7668175B2 (en) Dynamic power management for I/O resource pools
US8205214B2 (en) Browser elements for communicating with other browser elements and with external applications
CN102323888B (en) Diskless computer startup accelerating method
US20100113158A1 (en) Method and apparatus for hosting a distributed virtual world system
JP2005521945A (en) Optimal server in common work queue environment
US20180260290A1 (en) Remote service failure monitoring and protection using throttling
US20060272012A1 (en) Multifunction server system
WO2007040581A2 (en) System and method for pause and resume message operations on destinations
EP2115619B1 (en) Communication socket state monitoring device and methods thereof
EP2329393A2 (en) Asynchronous queued messaging for web applications
EP2168052A1 (en) Data buffering and notification system and methods thereof
CN111905361B (en) Game service system, game processing method, storage medium and device
KR20090064366A (en) Data buffering and notification system and methods thereof
KR20080059934A (en) A thread management method and system of the server using non-blocking input and output
CN112604267A (en) Game processing method, system, device, equipment and medium
JP6786835B2 (en) Management equipment, servers, thin client systems, management methods and programs
Wang et al. A scalable queuing service based on an in-memory data grid
CN114422575B (en) Method and device for processing network request
JP4695614B2 (en) Access management apparatus, access management method, and access management program

Legal Events

Date Code Title Description
PUAI Public reference made under article 153(3) epc to a published international application that has entered the european phase

Free format text: ORIGINAL CODE: 0009012

17P Request for examination filed

Effective date: 20090210

AK Designated contracting states

Kind code of ref document: A1

Designated state(s): AT BE BG CH CY CZ DE DK EE ES FI FR GB GR HU IE IS IT LI LT LU LV MC MT NL PL PT RO SE SI SK TR

AX Request for extension of the european patent

Extension state: AL BA HR MK RS

DAX Request for extension of the european patent (deleted)
A4 Supplementary search report drawn up and despatched

Effective date: 20110209

RIC1 Information provided on ipc code assigned before grant

Ipc: H04L 29/06 20060101ALI20110203BHEP

Ipc: G06F 9/445 20060101ALI20110203BHEP

Ipc: G06F 13/10 20060101ALI20110203BHEP

Ipc: G06F 15/173 20060101AFI20090210BHEP

RAP1 Party data changed (applicant data changed or rights of an application transferred)

Owner name: QUALCOMM ATHEROS, INC.

RIC1 Information provided on ipc code assigned before grant

Ipc: G06F 13/10 20060101ALI20121025BHEP

Ipc: H04L 29/06 20060101ALI20121025BHEP

Ipc: G06F 9/445 20060101ALI20121025BHEP

Ipc: G06F 15/173 20060101AFI20121025BHEP

GRAJ Information related to disapproval of communication of intention to grant by the applicant or resumption of examination proceedings by the epo deleted

Free format text: ORIGINAL CODE: EPIDOSDIGR1

GRAP Despatch of communication of intention to grant a patent

Free format text: ORIGINAL CODE: EPIDOSNIGR1

GRAP Despatch of communication of intention to grant a patent

Free format text: ORIGINAL CODE: EPIDOSNIGR1

RAP1 Party data changed (applicant data changed or rights of an application transferred)

Owner name: QUALCOMM INCORPORATED

STAA Information on the status of an ep patent application or granted ep patent

Free format text: STATUS: THE APPLICATION IS DEEMED TO BE WITHDRAWN

18D Application deemed to be withdrawn

Effective date: 20130611