US20030041280A1 - Network object cache engine - Google Patents
Network object cache engine Download PDFInfo
- Publication number
- US20030041280A1 US20030041280A1 US10/209,957 US20995702A US2003041280A1 US 20030041280 A1 US20030041280 A1 US 20030041280A1 US 20995702 A US20995702 A US 20995702A US 2003041280 A1 US2003041280 A1 US 2003041280A1
- Authority
- US
- United States
- Prior art keywords
- cache
- objects
- disk
- cache engine
- network
- 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.)
- Abandoned
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1415—Saving, restoring, recovering or retrying at system level
- G06F11/1435—Saving, restoring, recovering or retrying at system level using file system or storage system metadata
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0813—Multiuser, multiprocessor or multiprocessing cache systems with a network or matrix configuration
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/90—Details of database functions independent of the retrieved data types
- G06F16/95—Retrieval from the web
- G06F16/957—Browsing optimisation, e.g. caching or content distillation
- G06F16/9574—Browsing optimisation, e.g. caching or content distillation of access to content, e.g. by caching
Definitions
- This invention relates to devices for caching objects transmitted using a computer network.
- One known method is to provide a device (such as a general purpose processor operating under software control) which acts as a proxy, receiving requests for information from one or more clients, obtaining that information from one or more servers, and transmitting that information to the clients in place of the servers.
- a device such as a general purpose processor operating under software control
- the proxy can deliver that information to the client without having to repeat the request to the server. While this method achieves the goal of reducing traffic in the network and load on the server, it has the drawback that significant overhead is required by the local operating system and the local file system or file server of the proxy. This adds to the expense of operating the network and slows down the communication path between the server and the client.
- the proxy's surrendering control of its storage restricts functionality of the proxy's use of its storage: (a) it is difficult or impossible to add to or subtract from storage allocated to the proxy while the proxy is operating; and (b) the proxy and its local file system cannot recover from loss of any part of its storage without using an expensive redundant storage technique, such as a RAID storage system.
- a cache engine coupled to the network provides a cache of transmitted objects, which it stores in memory and mass storage by taking direct control of when and where to store those objects in mass storage.
- the cache engine may store those objects holographically so as to continue operation smoothly and recover gracefully from additions to, failures of, or removals from, its mass storage.
- the invention provides a method and system for caching information objects transmitted using a computer network.
- a cache engine determines directly when and where to store those objects in a memory (such as RAM) and mass storage (such as one or more disk drives), so as to optimally write those objects to mass storage and later read them from mass storage, without having to maintain them persistently.
- the cache engine actively allocates those objects to memory or to disk, determines where on disk to store those objects, retrieves those objects in response to their network identifiers (such as their URLs), and determines which objects to remove from the cache so as to maintain appropriate free space.
- the cache engine collects information to be written to disk in write episodes, so as to maximize efficiency when writing information to disk and so as to maximize efficiency when later reading that information from disk.
- the cache engine performs write episodes so as to atomically commit changes to disk during each write episode, so the cache engine does not fail in response to loss of power or storage, or other intermediate failure of portions of the cache.
- the cache engine stores key system objects on each one of a plurality of disks, so as to maintain the cache holographic in the sense that loss of any subset of the disks merely decreases the amount of available cache.
- the cache engine selects information to be deleted from disk in delete episodes, so as to maximize efficiency when deleting information from disk and so as to maximize efficiency when later writing new information to those areas of disk.
- the cache engine responds to the addition or deletion of disks as the expansion or contraction of the amount of available cache.
- FIG. 1 shows a block diagram of a network object cache engine in a computer network.
- FIG. 2 shows a block diagram of a data structure for maintaining storage blocks for a set of cached network objects.
- FIG. 3 shows a block diagram of data structures for caching network objects.
- FIG. 4 shows a block diagram of a set of original and modified blocks.
- FIG. 5 shows a flow diagram of a method for atomic writing of modified blocks to a single disk drive.
- FIG. 6 shows a block diagram of a set of pointers and regions on mass storage.
- FIG. 1 shows a block diagram of a network object cache engine in a computer network.
- a cache engine 100 is coupled to a computer network 110 , so that the cache engine 100 can receive messages from a set of devices 111 also coupled to the network 110 .
- the network 110 includes a plurality of such devices 111 , interconnected using a communication medium 112 .
- the communication medium 112 may comprise ethernet cabling, fiber optic coupling, or other media.
- the network 110 preferably includes a network of networks, sometimes called an “internet” or an “intranet.”
- the devices 111 coupled to the network 110 communicate with the cache engine 100 using one or more protocols for communication, such as HTTP (hypertext transfer protocol) or one of its variants, FTP (file transfer protocol), or other protocols.
- HTTP hypertext transfer protocol
- FTP file transfer protocol
- the cache engine 100 includes a processor 101 and a cache 102 .
- the processor 101 comprises a general purpose processor operating under software control to perform the methods described herein and to construct and use the data structures described herein; as used herein, when the cache engine 100 performs particular tasks or maintains particular data structures that reference includes condign operation by the processor 101 under control of software maintained in a program and data memory 103 .
- the cache 102 includes the program and data memory 103 and a mass storage 104 .
- the mass storage 104 includes a plurality of disk drives such as magnetic disk drives, but may alternatively include optical or magneto-optical disk drives.
- references to “disk” and “disk drives” refer to the mass storage 104 and its individual drives, even if the mass storage 104 and its individual drives do not include physical disk-shaped elements.
- the cache engine 100 is coupled to the network 110 and can receive and transmit a set of protocol messages 113 according to the one or more protocols with which the devices 111 communicate with the cache engine 100 .
- the cache engine 100 maintains a set of network objects 114 in the cache 102 .
- the cache engine 100 receives protocol messages 113 from a set of “client” devices 111 to request network objects 114 to be retrieved from a set of “server” devices 111 .
- the cache engine 100 issues protocol messages 113 to request those network objects 114 from one or more server devices 111 , receives those network objects 114 and stores them in the cache 102 , and transmits those network objects 114 to the requesting client devices 111 .
- client and server refer to a relationship between the client or server and the cache engine 100 , not necessarily to particular physical devices 111 .
- one “client device” 111 or one “server device” 111 can comprise any of the following: (a) a single physical device 111 executing software which bears a client or server relationship to the cache engine 100 ; (b) a portion of a physical device 111 , such as a software process or set of software processes executing on one hardware device 111 , which portion of the physical device 111 bears a client or server relationship to the cache engine 100 ; or (c) a plurality of physical devices 111 , or portions thereof, cooperating to form a logical entity which bears a client or server relationship to the cache engine 100 .
- the phrases “client device” and “server device” refer to such logical entities and not necessarily to particular individual physical devices 111 .
- the cache engine 100 preserves the network objects 114 in the cache 102 , and reuses those network objects 114 by continuing to serve them to client devices 111 which request them.
- the cache engine 100 removes network objects 114 from the cache 102 .
- the cache engine 100 can remove objects as described herein in the section “Removing Objects from Cache.”
- the cache engine 100 uses the memory 103 as a cache for those network objects 114 maintained using the mass storage 104 , while using the combined memory 103 and mass storage 104 as the cache 102 for those network objects 114 available on the network 110 .
- the cache 102 is not a file storage system, and network objects 114 which are stored in the cache 102 may be removed automatically from the cache 102 at any time by the cache engine 100 . All network objects 114 and all other data maintained by the cache 102 is transient, except for a very small number of system objects which are required for operation, and those system objects are redundantly maintained on the mass storage 104 so as preserve those system objects against possible loss of a part of the mass storage 104 (such as loss of one or more disk drives).
- the cache engine 100 need not guarantee that network objects 114 which are stored in the cache 102 will be available at any particular time after they are stored, and failure or even intentional removal of portions of the cache 102 (such as portions of the mass storage 104 ) cannot cause failure of the cache engine 100 .
- recovery or intentional addition of additional mass storage 104 is smoothly integrated into the cache 102 without interruption of operation of the cache engine 100 .
- the cache engine 100 operates exclusively to perform the operation of caching the network objects 114 .
- Within the memory 103 there are no separate memory spaces for “user” and “operating system.”
- the cache engine 100 itself maintains the cache 102 of the network objects 114 and selects the network objects 114 for retention in the cache 102 or removal from the cache 102 , operating so as to (1) localize writing the network objects 114 to the mass storage 104 , (2) localize deletion of the network objects 114 from the mass storage 104 , and (3) efficiently replace the network objects 114 in the cache 102 with new network objects 114 .
- the cache engine 100 performs these operations efficiently while operating the cache 102 relatively filled with network objects 114 .
- the cache engine 100 maintains statistics regarding access to the cache 102 . These statistics can include the following:
- a set of hit rates for the cache 102 including (1) a hit rate for network objects 114 found in the cache 102 versus those which must be retrieved from server devices 111 , and (2) a hit rate for network objects 114 found in the memory 103 versus those which must be retrieved from the mass storage 104 ;
- a set of statistics for operations on the memory 103 including (1) the number of network objects 114 which are maintained in the memory 103 , and (2) the fraction of memory 103 which is devoted to caching network objects 114 versus storing system objects or unallocated; and
- a set of statistics for operations on the mass storage 104 including (1) the number of read operations from the mass storage 104 , (2) the number of write operations to the mass storage 104 , including the number of “write episodes” as described herein, and (3) the fraction of the mass storage 104 which is devoted to caching network objects 114 versus storing system objects or unallocated.
- the cache engine 100 can also maintain statistics which are combinations or variants of the above.
- the cache engine 100 can provide improved performance or additional functionality in the network 110 .
- the cache engine 100 can be used as a proxy cache (whether to provide a firewall, to provide a cache for client devices 111 coupled to a local area network, or otherwise), as a reverse proxy cache, as a cache for requests made by users of a single ISP, as a cache for “push” protocols, or as an accelerator or server cache.
- the cache engine 100 provides the client devices 111 with relatively quicker access to network objects 114 otherwise available directly from the server devices 111 .
- the client devices 111 request those network objects 114 from the cache engine 100 , which either transmits them to the client devices 111 from the cache 102 or obtains them from the server devices 111 and then transmits them to the client devices 111 .
- the cache engine 100 can exercise more intelligence and proactivity than simply waiting for documents to be requested by the client devices 111 :
- the cache engine 100 can be configured preloaded with selected network objects 114 which are expected to be requested by the client devices 111 .
- selected network objects 114 are known to be commonly requested by client devices 111 throughout the network 110 known as the internet; these network objects 114 can be preloaded in the cache engine 100 upon manufacture.
- These network objects 114 could include home pages for well-known companies (such as Netscape) and well-known search engines (such as Digital's “Alta Vista”).
- the cache engine 100 can periodically request network objects 114 responsive to a set of statistics regarding commonly requested network objects 114 .
- information regarding commonly requested network objects 114 can be maintained on a server device 111 ; the cache engine 100 can request this information from the server device 111 and periodically request those network objects 114 for storage in the cache 102 .
- the cache engine 100 can perform this operation periodically when client devices 111 are not actively using the cache engine 100 , such as relatively unloaded times in the late night or early morning.
- the cache engine 100 can periodically request network objects 114 responsive to a set of user preferences at the client devices 111 .
- the cache engine 100 can receive (either upon request or otherwise) a set of bookmarks from the client devices 111 and can request those network objects 114 from the server devices 111 .
- the cache engine 100 can request those network objects 114 which have changed in a selected time period such as one day.
- the cache engine 100 can provide a mirror site to one or more server devices 111 , by periodically, or upon request, receiving network objects 114 from the server devices 111 to be delivered by the server device 111 to client devices 111 which have changed in a selected time period such as one day.
- the cache engine 100 can provide an accelerator for one or more server devices 111 , by receiving requests to the server devices 111 which are distributed among a plurality of cache engines 100 .
- Each cache engine 100 maintains its cache 102 with network objects 114 to be delivered by the server device 111 to client devices 111 .
- Service by the server device 111 is thus accelerated, because each cache engine 100 can respond to some of the load of requests for information, while limiting the number of requests for information which are passed through and must be handled by the server device 111 itself.
- the cache engine 100 can provide a first type of push protocol assist to one or more server devices 111 , by transmitting network objects 114 to one or more client devices 111 or proxy caches using a push protocol. For example, when the server devices 111 provide a network broadcast service, the cache engine 100 can receive network objects 114 from the server devices 111 to be broadcast to a subset of the network 110 and can independently broadcast those network objects 114 .
- the cache engine 100 can provide a second type of push protocol assist to one or more server devices 111 , by allowing those server devices 111 to broadcast network objects 114 to a plurality of cache engines 100 .
- Each cache engine 100 can make the broadcast network objects 114 available to client devices 111 which request those network objects 114 from the cache engine 100 as if the cache engine 100 were the server device 111 for those network objects 114 .
- the network objects 114 can include data, such as HTML pages, text, graphics, photographs, audio, video; programs, such as Java or ActiveX applets or applications; or other types of network objects, such as push protocol objects.
- the cache engine 100 can record frames of streaming audio or streaming video information in the cache 102 , for delayed use by a plurality of client devices 111 .
- Some types of known network objects 114 are not cached, such as CGI output or items marked noncachable by the server device 111 .
- the cache engine 100 can glean knowledge about the client devices 111 from the protocol messages 113 or by other means, such as interrogating routing devices in the network 110 , and can react in response to that information to provide differing network objects 114 to differing client devices 111 .
- the cache engine 100 can select server devices 111 for proximity or content in response to information about client devices 111 , as follows:
- the cache engine 100 can select a particular server device 111 for rapid response, such as for network routing proximity or for spreading service load over a plurality of server devices 111 .
- the cache engine 100 can select content at the server device 111 in response to information about the client device 111 , such as tailoring the language of the response (such as serving pages in the English language or the French language), or such as tailoring local information (such as advertising, news, or weather).
- local information such as advertising can be retrieved from a local server device 111 which supplies advertising for insertion into pages to be served to local client devices 111 .
- FIG. 2 shows a block diagram of a data structure for maintaining storage blocks for a set of cached network objects.
- the cache 102 includes a set of blocks 200 , each of which comprises 4096 bytes in a preferred embodiment, and each of which can be stored in the memory 103 or on the mass storage 104 .
- each of the blocks 200 can comprise a size other than 4096 bytes, and may be responsive to an amount of available memory 103 or mass storage 104 .
- Each of the blocks 200 can comprise either a data block 200 , which includes data, that is, information not used by the cache engine 100 but maintained for the client devices 111 , or control information, that is, information used by the cache engine 100 and not used by the client devices 111 .
- the blocks 200 are organized into a set of objects 210 , each of which comprises an object descriptor 211 , a set of data blocks 200 , and a set of block pointers 212 referencing the data blocks 200 from the object descriptor 211 .
- the object descriptor 211 comprises a separate control block 200 . Where the block pointers 212 will not fit into a single control block 200 , or for other types of relatively larger objects 210 , the object descriptor 211 can reference a set of indirect blocks 216 , each of which references inferior indirect blocks 216 or data blocks 200 . Each indirect block 216 comprises a separate control block 200 . Relatively smaller objects 210 do not require indirect blocks 216 .
- the block pointers 212 each comprise a pointer value 215 comprising a single 32-bit word and indicating the location of the block 200 on the mass storage 104 , such as a physical disk block address.
- the block pointers 212 each comprise a first bit 213 indicating whether the referenced block 200 is stored in the memory 103 or the mass storage 104 , a second bit 214 indicating whether the referenced block 200 is a control block 200 (comprising control information) or a data block 200 (comprising data for network objects 114 ), and the pointer value 215 comprises a 30-bit value indicating the location of the block 200 .
- the pointer value 215 indicates a byte address in the memory 103 ; when the block is stored on the mass storage 104 , the pointer value 215 indicates a physical disk block address on the mass storage 104 .
- the objects 210 are each referenced by a root object 220 , which is maintained redundantly in a plurality of (preferably two) copies of a root block 221 on each disk drive of the mass storage 104 .
- each disk drive of the mass storage 104 has a separate root object 210 , which is maintained using two copies of its root block 221 .
- Each disk drive's root object 220 references each current object 210 for that disk drive.
- one copy of the root block 221 is maintained in each of physical disk blocks 2 and 3 of each of the disk drives of the mass storage 104 .
- the root block 221 for that disk drive is written to the mass storage 104 , it is first written to the physical disk block 2 , and then identically written to the physical disk block 3 .
- the cache engine 100 is started or restarted, the root block 221 is read from the physical disk block 2 . If this read operation is successful, it is then identically rewritten to the physical disk block 3 ; however, if this read operation is unsuccessful, the root block 221 is instead read from the physical disk block 3 , and then identically rewritten to the physical disk block 2 .
- the cache engine 100 also stores certain system objects 210 redundantly on each disk drive on the mass storage 104 , so as to maintain the cache 102 holographic in the sense that loss of any subset of the disk drives merely decreases the amount of available cache.
- each such system object 210 is referenced by the root object 220 for its disk drive and is maintained using two copies of its object descriptor 211 .
- These system objects 210 which are maintained redundantly include the root object 220 , a blockmap object 210 , and a hash table 350 (FIG. 3), each as described herein, as well as other system objects, such as objects 210 for collected statistics, documentation, and program code.
- a subset of the blocks 200 are maintained in the memory 103 , so as to use the memory 103 as a cache for the mass storage 104 (just as the memory 103 and the mass storage 104 collectively act as the cache 102 for network objects 114 ).
- the blocks 200 maintained in the memory 103 are referenced by a set of block handles 230 , which are also maintained in the memory 103 .
- Each of the block handles 230 includes a forward handle pointer 232 , a backward handle pointer 233 , a reference counter 234 , a block address 235 , a buffer pointer 236 , and a set of flags 237 .
- the forward handle pointer 232 and the backward handle pointer 233 reference other block handles 230 in a doubly-linked list of block handles 230 .
- the reference counter 234 maintains a count of references to the block 200 by processes of the cache engine 100 .
- the reference counter 234 is updated when a block handle 230 for the block 200 is claimed or released by a process for the cache engine 100 .
- the reference counter 234 reaches zero, there are no references to the block 200 , and it is placed on a free list of available blocks 200 after having been written to disk, if it has been modified, in the next write episode.
- the block address 235 has the same format as the block pointer 212 .
- the buffer pointer 236 references a buffer used for the block 200 .
- the flags 237 record additional information about the block 200 .
- the block handles 230 are also threaded using a set of 2Q pointers 238 and a 2Q reference counter 239 , using the “2Q” technique, as further described in “2Q: A Low Overhead High Performance Buffer Management Replacement Algorithm,” by Theodore Johnson and Dennis Shasha, hereby incorporated by reference as if fully set forth herein.
- FIG. 3 shows a block diagram of data structures for caching network objects.
- the cache engine 100 receives protocol requests from the network 110 .
- each protocol request uses the HTTP protocol (or a variant such as SHTTP), and each HTTP request includes a URL (uniform resource locator) 310 , which identifies a network object 114 in the network 110 .
- each URL 310 identifies the server device 111 for the network object 114 and the location of the network object 114 on that server device 111 .
- the cache engine 100 may use other protocols besides HTTP or its variants, and the cache engine 100 may be responsive to one or more other identifiers for network objects 114 besides its URL 310 .
- the term “URL” refers generally to any type of identifier which is capable of identifying, or assisting in identifying, a particular network object 114 .
- the URL 310 includes a host identifier, which identifies the server device 111 at which the network object 114 is located, and a document identifier, which identifies the location at which the network object 114 is located at the server device 111 .
- the host identifier comprises a character string name for the server device 111 , which can be resolved to an IP (internet protocol) address.
- the host identifier may comprise the IP address for the server device 111 , rather than the character string name for the server device 111 .
- the cache engine 100 includes a hash function 320 which associates the URL 310 with a hash signature 330 , which indexes a hash bucket 340 in a hash table 350 in the cache 102 .
- the hash table 350 comprises a set of hash tables 350 , one for each disk drive, each of which references those network objects 114 which are stored in the cache 102 on that disk drive of the mass storage 104 .
- Each such hash table 350 has its own object descriptor 211 ; collectively the hash tables 350 form a single logical hash table.
- the hash signature 330 comprises a 32-bit unsigned integer value which is determined responsive to the URL 310 , and which is expected to be relatively uniformly distributed over the range of all possible 32-bit unsigned integer values.
- the URL 310 is also associated with a 64-bit URL signature which is also an unsigned integer value, determined responsive to the URL 310 , and which is expected to be relatively uniformly distributed over the range of all possible 64-bit unsigned integer values; when comparing URLs 310 , the URL signatures are compared first, and only if they are equal are the URLs 310 themselves compared.
- each non-null hash bucket 340 comprises one data block 200 .
- the hash table 350 associates the URL 310 directly with the hash bucket 340 in the hash table 350 , storage of the network objects 114 in the cache 102 is not hierarchical; each of the network objects 114 can be referenced and accessed from the cache 102 within order of constant time, such as less than about two disk read access times. Moreover, there is no special requirement that the network objects 114 in the cache 102 must have unique names; when network objects 114 have identical names (such as when they are old and new versions of the same network object 114 ), the hash table 350 simply points to the same hash bucket 340 for both of them.
- the cache engine 100 resolves new references by the URL 310 only to the new version of the network object 114 .
- Those client devices 111 which are already accessing the old version of the network object 114 when the new version of the network object 114 is stored in the cache 102 will continue to access the old version of the network object 114 .
- subsequent accesses to that network object 114 even by the same client device 111 , using the URL 310 will be resolved by the cache engine 100 to the new version of the network object 114 .
- the old version of the network object 114 is deleted as soon as possible when all client devices 111 are done using it.
- the cache 102 differs from a file system also in that the client device 111 has no control over storage of the network objects 114 in the cache 102 , including (1) the name space at the cache 102 for storage of the network objects 114 , (2) the ability to name or rename the network objects 114 , (3) whether the network objects 114 are removed from the cache 102 at any time, and (4) whether the network objects 114 are even stored in the cache 102 at all.
- the cache engine 100 uses the memory 103 and the mass storage 104 (preferably a plurality of magnetic disk drives) to cache the network objects 114 so as to maintain in the cache 102 those network objects 114 most likely to be required by the client device 111 .
- the cache engine 100 may enforce selected administrative requirements in addition to maintaining network objects 114 most likely to be used by the client device 111 , such as preferring or proscribing certain classes of network objects 114 or certain classes of client devices 111 or server devices 111 , whether at all times or at selected times of day and selected days.
- the cache engine 100 uses the hash function 320 and the hash table 350 to identify an object 210 (and thus one or more data blocks 200 ) associated with the URL 310 (and thus associated with the network object 114 ).
- the cache engine 100 operates on the object 210 to retrieve from the cache 102 the network object 114 requested by the HTTP request, and to deliver that network object 114 to the client device 111 .
- the cache engine 100 maintains the cache 102 using the memory 103 and the mass storage 104 so that whether the object 210 is in the cache 102 , and if in the cache 102 , whether the object 210 is in the memory 103 or on the mass storage 104 is transparent to the client device 111 (except possibly for different time delays in retrieving the object 210 from the memory 103 or from the mass storage 104 ).
- the cache engine 100 writes blocks 200 (and objects 210 comprising those blocks 200 ) from the memory 103 to the mass storage 104 on occasion, so as to maintain those blocks 200 in the memory 103 which are most frequently accessed.
- the cache engine 100 controls where the blocks 200 are written onto the mass storage 104 (such as determining onto which disk drive for the mass storage 104 and which location on that disk drive), and when the blocks 200 are written onto the mass storage 104 (such as determining at which times it is advantageous to write data onto the mass storage 104 ).
- the cache engine 100 attempts to optimize the times and locations when and where the blocks 200 are written to disk, so as to minimize time and space required to write to and read from disk.
- the hash table 350 is a system object 210 , and similar to other system objects 210 , includes an object descriptor 211 , zero or more indirect blocks 216 , and zero or more data blocks 200 . Because the hash table 350 is expected to be used relatively frequently, its indirect blocks 216 are expected to all be maintained in the memory 103 , although for a relatively large hash table 350 some of its data blocks 200 will be maintained on the mass storage 104 . In a preferred embodiment, the hash table 350 is distributed over the plurality of disk drives for the mass storage 104 , and the portion of the hash table 350 for each disk drive is referenced in the root object 220 for that disk drive.
- Each hash signature 330 is indexed into the hash table 350 using the hash signature 330 modulo the number of hash buckets 340 in the hash table 350 .
- Each hash bucket 340 comprises one block 200 .
- Each hash bucket 340 includes zero or more hash entries 360 ; each hash entry 360 includes a reference to the object 210 at the hash entry 360 (comprising a pointer to the object descriptor 211 for that object 210 ).
- the hash bucket 340 includes a secondary hash table, having a plurality of chains of secondary hash table entries (such as, for example, 32 such chains).
- the hash signature 330 is used to select one of the chains so as to search for the hash entry 360 associated with the URL 310 .
- the hash entries 360 are maintained within the hash bucket 340 in an ordered list by a secondary hash value, with null entries possibly interspersed (when the associated network objects 114 have been deleted or otherwise removed from the hash table 350 ); the secondary hash value is also determined in response to the hash signature 330 , such as by computing the hash signature 330 modulo a selected value such as 2**32. If there are multiple hash entries 360 with the same secondary hash value, the cache engine 100 examines the object descriptor 211 associated with each one of the multiple hash entries 360 for the URL 310 of the correct network object 114 associated with the URL 310 having the associated hash signature 330 .
- each hash bucket 340 has a selected size which is sufficient to hold at least 1.5 to 2 times the number of expected hash entries 360 if the hash entries 360 were perfectly uniformly distributed (this selected size is preferably exactly one data block 200 ). If a hash entry 360 is assigned to a hash bucket 340 which is full, one of the network objects 114 already associated with the hash bucket 340 , along with its associated hash entry 360 , is deleted from the hash bucket 340 and from the cache 102 to make room for the new hash entry 360 .
- the cache engine 100 maintains a DSD (disk set descriptor) object 210 for each disk drive currently or recently present on the mass storage 104 , which includes a data structure describing that disk drive.
- the cache engine 100 also maintains a DS (disk set) object 210 , which references all of the DSD objects 210 , and which is maintained redundantly on one or more of the disk drives for the mass storage 104 .
- the DS object 210 is maintained redundant on the mass storage 104 on a plurality of disk drives (preferably all of them), with each disk drive's information being maintained on that disk drive in the DSD object 210 .
- Each DSD object 210 includes at least the following information: (1) the number of disk drives; (2) the collective total size of all disk drives; (3) for each disk drive—the individual size of that disk drive, an identifier for that disk drive, and a index into an array of all the disk drives; and (4) for each disk drive—the range of hash signatures 330 which are maintained on that disk drive. Also, the range of hash signatures 330 which are maintained on each disk drive is maintained in a separate system object 210 which maps each hash signature 330 to a particular disk drive. In a preferred embodiment, sizes are expressed as multiples of a selected value such as 1 megabyte.
- the hash entries 360 are distributed over the plurality of disk drives in proportion to the size of each disk drive, rounded to an integer number of hash entries 360 .
- the cache engine 100 creates or modifies an associated DSD object 210 , and updates the DS object 210 .
- This operation proceeds in like manner as updating a data block 200 ; thus, any control blocks 200 which reference the DS object 210 or one of the DSD objects 210 are also updated, and the update is atomically committed to the mass storage 104 with the next write episode.
- the mass storage 104 can be dynamically updated, including changing the identity or number of disk drives, while the cache engine 100 continues to operate, and the only effect on the cache engine 100 is to alter its perception of the amount of mass storage 104 which is available for the cache 102 .
- the cache engine 100 implements a “delayed write” technique, in which the objects 210 which are written into the cache 102 (including objects 210 which are new versions of old objects 210 already present in the cache 102 ) are written first into the memory 103 , and only later written out to the mass storage 104 .
- a “delayed write” technique in which the objects 210 which are written into the cache 102 (including objects 210 which are new versions of old objects 210 already present in the cache 102 ) are written first into the memory 103 , and only later written out to the mass storage 104 .
- a non-volatile RAM or a UPS (uninterruptable power supply) and an associated orderly shutdown procedure because the cache engine 100 makes no guarantee of persistence for the network objects 114 in the cache 102 . For example, if a particular network object 114 is lost from the cache 102 , that network object 114 can typically be reacquired from its associated server device 111 .
- the delayed write technique operates to maintain consistency of the cache 102 , by not overwriting either control blocks 200 or data blocks 200 (except for the root block 221 ). Instead, modified blocks 200 are written to the mass storage 104 , substituted for the original blocks 200 , and the original blocks 200 are freed, all in an atomic operation called a “write episode.” If a write episode is interrupted or otherwise fails, the entire write episode fails atomically and the original blocks 200 remain valid.
- a modified data block 200 is created when the underlying data for the original data block 200 is modified (or when new underlying data, such as for a new network object 114 , is stored in a new data block 200 ).
- a modified control block 200 is created when one of the original blocks 200 (original data block 200 or original control block 200 ) referenced by the original control block 200 is replaced with a modified block 200 (modified data block 200 , new data block 200 , or modified control block 200 ); the modified control block 200 references the modified block 200 rather than the original block 200 .
- Each write episode is structured so as to optimize both the operation of writing blocks 200 to the mass storage 104 and later operations of reading those blocks 200 from the mass storage 104 .
- the following techniques are used to achieve the read and write optimization goals:
- modified blocks 200 to be written are collected and written, when possible, into sequential tracks of one of the disk drives used for the mass storage 104 ;
- indirect blocks 216 are written to storage blocks which are close to and before those data blocks 200 which they reference, so as to enable reading the referenced data blocks 200 in the same read operation whenever possible;
- sequentially related data blocks 200 are written to sequential free storage blocks (if possible, contiguous free storage blocks) on one of the disk drives used for the mass storage 104 , so as to enable reading the related data blocks 200 in the same read operation whenever possible;
- blocks 200 (control blocks 200 or data blocks 200 ) to be written are collected together for their associated objects 210 and ordered within each object 210 by relative address, so as to enable reading blocks 200 for a particular object 210 in the same read operation whenever possible.
- FIG. 4 shows a block diagram of a set of original and modified blocks.
- FIG. 5 shows a flow diagram of a method for atomic writing of modified blocks to a single disk drive.
- a tree structure 400 (FIG. 4) of blocks 200 includes the original control blocks 200 and the original data blocks 200 , which have been already written to the mass storage 104 and referenced by the root object 220 . Some or all of these original blocks 200 can be held in the memory 103 for use.
- a method 500 (FIG. 5) includes a set of flow points to be noted, and steps to be executed, by the cache engine 100 .
- the modified data blocks 200 and new data blocks 200 are held in the memory 103 and have not yet been written to disk.
- each original control block 200 which references a modified data block 200 (and each original control block 200 which references a modified control block 200 ) must be replaced with a modified control block 200 , all the way up the tree structure 400 to the root object 200 .
- a free storage block on the mass storage 104 is allocated for recording the modified data block 200 .
- the blockmap object 210 is altered to reflect the allocation of the storage block for the modified data block 200 and freeing of the storage block for the original data block 200 .
- the blockmap object 210 maintains information about which storage blocks on the mass storage 104 are allocated and have data stored therein, and which storage blocks are free and eligible for use.
- the cache engine 100 searches the blockmap object 210 for a free storage block, maintaining a write pointer 250 into the blockmap object 210 so as to perform the search in a round-robin manner.
- the write pointer 250 advances past the end of the blockmap object 210 , it is wrapped around to the beginning of the blockmap object 210 .
- the write pointer 250 is maintained in the root object 220 so that the search continues in a round-robin manner even after a failure and restart of the cache 102 .
- a free storage block 200 cannot be considered free (and therefore used) if it is still referenced, even if indirectly, by the root object 220 . Accordingly, those blocks 200 which are freed prior to atomic commitment of the root object 220 are not considered free until the root object 220 is atomically written to disk.
- a modified control block 200 is generated.
- a free storage block on the mass storage 104 is allocated for recording the modified control block 200 .
- the blockmap object 210 is modified to reflect the allocation of the storage block for the modified control block 200 and freeing of the storage block for the original control block 200 .
- the step 522 is repeated for each level of the tree structure 400 up to the root object 220 .
- step 523 the operations of the step 521 and the step 522 are repeated for those blocks 200 of the blockmap object 210 which were altered.
- the modified data blocks 200 and modified control blocks 200 are written to their allocated storage blocks on the mass storage 104 .
- the root object 220 is rewritten in place on the mass storage 104 .
- the root object 220 has been rewritten in place, all changes to the tree structure 400 have thus been atomically committed; the modified blocks 200 have become part of the tree structure 400 and the original blocks 200 which were replaced with modified blocks 200 have become freed and eligible for reuse.
- the modified blockmap object 210 is not atomically committed until the root object 220 has been rewritten in place, so storage blocks which are indicated as allocated or free are not so indicated until the write episode has been atomically committed at the flow point 530 .
- modified blocks 200 are actually allocated to storage blocks and written to those storage blocks on the mass storage 104 , they are written in the following manner:
- the tree structure 400 is traversed in a depth-first top-down manner, so as to ensure that modified control blocks 200 are written in a sequence of storage blocks before the modified data blocks 200 they reference;
- the referenced modified data blocks 200 are traversed in a depth-first top-down manner, so as to ensure that the referenced modified data blocks 200 are clustered together in a sequence of storage blocks after the modified control block 200 which references them.
- This technique helps to ensure that when reading control blocks 200 , the data blocks 200 they reference are read-ahead whenever possible, so as to minimize the number of operations required to read the control blocks 200 and the data blocks 200 from the mass storage 104 .
- the cache engine 100 determines when to perform a write episode, in response to the condition of the memory 103 (including the number of modified blocks 200 in the memory 103 ), the condition of the mass storage 104 (including the number of free storage blocks available on the mass storage 104 ), and the condition of the cache 102 (including the hit rate of network objects 114 in the cache 102 ).
- write episodes using the method 500 are performed upon either of the following conditions:
- the number of modified blocks 200 in the memory 103 is near the number of available free storage blocks on the mass storage 104 minus the number of storage blocks needed for the blockmap object 210 ;
- the fraction of modified blocks 200 in the memory 103 is near the miss rate of network objects 114 in the cache 102 .
- the number of free blocks 200 on the mass storage 104 is normally much larger than the number of blocks 200 to be written during the write episode.
- Each object 210 has an associated “access time,” which indicates when that object 210 was last written or read. However, it is not desirable to update the access time on disk for each object 210 whenever that object 210 is read, as this would produce a set of modified control blocks 200 (which must be written to disk during the next write episode) whenever any object 210 is read.
- a volatile information table which records volatile information about objects 210 , including access times for objects 210 which have been read, and number of accesses for those objects 210 .
- an object 210 is read, its access time is updated only in the volatile information table, rather than in the object descriptor 211 for the object 210 itself.
- the volatile information table is maintained in the memory 103 and is not written to disk.
- network objects 114 can continue to be read while write episodes using the method 500 are being performed, even for those network objects 114 which include modified data blocks 200 , because the modified data blocks 200 continue to be maintained in the memory 103 while the write episodes are performed, whether or not they are actually successfully written to the mass storage 104 .
- FIG. 6 shows a block diagram of a set of pointers and regions on mass storage.
- a set of storage blocks on each disk drive of the mass storage 104 is represented by a circular map 600 , having indexes from zero to a maximum value Nmax. In the figure, indexes increase in a counterclockwise direction, wrapping around from the end to the beginning of each disk drive modulo the maximum value Nmax.
- a DT (delete table) object 210 is maintained which includes an entry for each deletable object 210 .
- an objectmap object 210 is maintained which includes an entry for each of the blockmap entries in the blockmap object 210 .
- each entry in the objectmap object 210 is either empty, which indicates that the corresponding block 200 does not comprise an object descriptor 211 or non-empty, which indicates that the corresponding block 200 comprises an object descriptor 211 , and further includes information to determine whether the corresponding object 210 can be deleted.
- Each non-empty entry in the objectmap object 210 includes at least a hit rate, a load time, a time to live value and a hash signature 330 for indexing into the hash table 350 .
- the cache engine 100 searches the blockmap object 210 for a deletable object 210 (an object 210 referenced by the DT object 210 ), maintaining a delete pointer 260 into the blockmap object 210 , similar to the write pointer 250 , so as to perform the search in a round-robin manner.
- a deletable object 210 an object 210 referenced by the DT object 210
- maintaining a delete pointer 260 into the blockmap object 210 similar to the write pointer 250 , when the delete pointer 260 advances past the end of the blockmap object 210 , it is wrapped around to the beginning of the blockmap object 210 .
- the delete pointer 260 is maintained in the root object 220 so that the search continues in a round-robin manner even after a failure and restart of the cache 102 .
- the write pointer 250 and the delete pointer 260 for each disk drive in the mass storage 104 each comprise an index into the map 600 .
- the delete pointer 260 is maintained at least a selected minimum distance d 0 601 ahead of the write pointer 250 , but not so far ahead as to wrap around again past the write pointer 250 , so as to select a delete region 610 of each disk drive for deleting deletable objects 210 which is near to a write region 620 used for writing modified and new objects 210 .
- the write region 620 is at least the size specified by the minimum distance d 0 601 . Although there is no specific requirement for a size of the delete region 610 , it is preferred that the delete region 610 is several times (preferably about five times) the size of the write region 620 .
- the cache engine 100 thus provides that nearly all writing to disk occurs in a relatively small part of each disk drive. This allows faster operation of the mass storage 104 because a set of disk heads for the mass storage 104 must move only relatively a small distance during each write episode.
- the cache engine 100 attempts to maintain a relatively fixed distance relationship between the write pointer 250 and the delete pointer 260 , write episodes and delete episodes will occur relatively frequently.
- the cache engine 100 alternates between write episodes and delete episodes, so that each delete episode operates to make space on disk for a later write episode (the next succeeding write episode writes the blockmap object 210 to disk, showing the blocks 200 to be deleted; the write episode after that is able to use the newly free blocks 200 ) and each write episode operates to consume free space on disk and require a later delete episode.
- a collection region 630 is selected near to and ahead of the delete region 610 , so as to select objects 210 for deletion.
- a size of the collection region 630 is selected so that, in an time estimated for the write pointer 250 to progress through the collection region 630 (this should take several write episodes), nearly all hash entries 360 will have been accessed through normal operation of the cache engine 100 .
- each hash entry 360 includes information sufficient to determine whether its associated object 210 is deletable, nearly all objects 210 will be assessed for deletion in the several write episodes needed for the write region 620 to move through the collection region 630 .
- Objects 210 which have been assessed for deletion are placed on an deletion list, sorted according to eligibility for deletion. In a preferred embodiment, objects 210 are assessed for deletion according to one of these criteria:
- an object 210 is explicitly selected for deletion by the cache engine 100 due to operation of the HTTP protocol (or a variant thereof, such as SHTTP), the object 210 is immediately placed at the head of the deletion list.
- the old object 210 is placed at the head of the deletion list as soon as all references to the old object 210 are released (that is, no processes on the cache engine 100 reference the old object 210 any longer).
- a first object 210 has an older access time than a second object 210 , the first object 210 is selected as more eligible for deletion than the second object 210 , and is thus sorted into the deletion list ahead of the second object 210 .
- a fraction of objects 210 on the deletion list chosen due to the last two of these criteria (that is, due to expiration or older access time), preferably one-third of the objects 210 on the deletion list, are selected for deletion.
- the collection region 630 is advanced by an expected size of the next write region 620 .
- the expected size of the next write region 620 is estimated by averaging the size of the write region 620 for the past several (preferably seven) write episodes. Those objects 210 which were on the deletion list before advancing the delete region 610 and which are in the delete region 610 afterward are scheduled for deletion; these objects are selected individually and deleted in the next delete episode (in a preferred embodiment, the next delete episode is immediately after completion of the write episode).
- write episodes and delete episodes for each disk drive on the mass storage 104 are independent, so there are separate deletion regions 610 , write regions 620 , and collection regions 630 for each disk drive on the mass storage 104 .
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Library & Information Science (AREA)
- Quality & Reliability (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Information Transfer Between Computers (AREA)
- Computer And Data Communications (AREA)
Abstract
The invention provides a method and system for caching information objects transmitted using a computer network. A cache engine determines directly when and where to store those objects in a memory (such as RAM) and mass storage (such as one or more disk drives), so as to optimally write those objects to mass storage and later read them from mass storage, without having to maintain them persistently. The cache engine actively allocates those objects to memory or to disk, determines where on disk to store those objects, retrieves those objects in response to their network identifiers (such as their URLs), and determines which objects to remove from the cache so as to maintain sufficient operating space. The cache engine collects information to be written to disk in write episodes, so as to maximize efficiency when writing information to disk and so as to maximize efficiency when later reading that information from disk. The cache engine performs write episodes so as to atomically commit changes to disk during each write episode, so the cache engine does not fail in response to loss of power or storage, or other intermediate failure of portions of the cache. The cache engine also stores key system objects on each one of a plurality of disks, so as to maintain the cache holographic in the sense that loss of any subset of the disks merely decreases the amount of available cache. The cache engine also collects information to be deleted from disk in delete episodes, so as to maximize efficiency when deleting information from disk and so as to maximize efficiency when later writing to those areas having former deleted information. The cache engine responds to the addition or deletion of disks as the expansion or contraction of the amount of available cache.
Description
- This application is a continuation of application Ser. No. 09/093,533 filed Jun. 8, 1998, Attorney docket Number 101.1001.02, of non-provisional application Serial No. 60/048,986, filed Jun. 9, 1997, Attorney docket Number 101.1001.01, and of PCT application Serial Number PCT/US98/11834 filed Jun. 9, 1998 Attorney docket No. 101.1001.03.
- 1. Field of the Invention
- This invention relates to devices for caching objects transmitted using a computer network.
- 2. Related Art
- In computer networks for transmitting information, information providers (sometimes called “servers”) are often called upon to transmit the same or similar information to multiple recipients (sometimes called “clients”) or to the same recipient multiple times. This can result in transmitting the same or similar information multiple times, which can tax the communication structure of the network and the resources of the server, and cause clients to suffer from relatively long response tines. This problem is especially acute in several situations: (a) where a particular server is, or suddenly becomes, relatively popular; (b) where the information from a particular server is routinely distributed to a relatively large number of clients; (c) where the information from the particular server is relatively time-critical; and (d) where the communication path between the server and its clients, or between the clients and the network, is relatively slow.
- One known method is to provide a device (such as a general purpose processor operating under software control) which acts as a proxy, receiving requests for information from one or more clients, obtaining that information from one or more servers, and transmitting that information to the clients in place of the servers. When the proxy has previously obtained the information from one or more servers, it can deliver that information to the client without having to repeat the request to the server. While this method achieves the goal of reducing traffic in the network and load on the server, it has the drawback that significant overhead is required by the local operating system and the local file system or file server of the proxy. This adds to the expense of operating the network and slows down the communication path between the server and the client.
- There are several sources of delay, caused primarily by the proxy's surrendering control of its storage to its local operating system and local file system: (a) the proxy is unable to organize the information from the server in its mass storage for most rapid access; and (b) the proxy is unable to delete old network objects received from the servers and store new network objects received from the servers in a manner which optimizes access to mass storage. In addition to the added expense and delay, the proxy's surrendering control of its storage restricts functionality of the proxy's use of its storage: (a) it is difficult or impossible to add to or subtract from storage allocated to the proxy while the proxy is operating; and (b) the proxy and its local file system cannot recover from loss of any part of its storage without using an expensive redundant storage technique, such as a RAID storage system.
- Accordingly, it would be desirable to provide a method and system for caching information transmitted using a computer network, which is not subject to additional delay or restricted functionality from having to use a local operating system and local file system or file server. This advantage is achieved in an embodiment of the invention in which a cache engine coupled to the network provides a cache of transmitted objects, which it stores in memory and mass storage by taking direct control of when and where to store those objects in mass storage. The cache engine may store those objects holographically so as to continue operation smoothly and recover gracefully from additions to, failures of, or removals from, its mass storage.
- The invention provides a method and system for caching information objects transmitted using a computer network. In the invention, a cache engine determines directly when and where to store those objects in a memory (such as RAM) and mass storage (such as one or more disk drives), so as to optimally write those objects to mass storage and later read them from mass storage, without having to maintain them persistently. The cache engine actively allocates those objects to memory or to disk, determines where on disk to store those objects, retrieves those objects in response to their network identifiers (such as their URLs), and determines which objects to remove from the cache so as to maintain appropriate free space.
- In a preferred embodiment, the cache engine collects information to be written to disk in write episodes, so as to maximize efficiency when writing information to disk and so as to maximize efficiency when later reading that information from disk. The cache engine performs write episodes so as to atomically commit changes to disk during each write episode, so the cache engine does not fail in response to loss of power or storage, or other intermediate failure of portions of the cache. The cache engine stores key system objects on each one of a plurality of disks, so as to maintain the cache holographic in the sense that loss of any subset of the disks merely decreases the amount of available cache. The cache engine selects information to be deleted from disk in delete episodes, so as to maximize efficiency when deleting information from disk and so as to maximize efficiency when later writing new information to those areas of disk. The cache engine responds to the addition or deletion of disks as the expansion or contraction of the amount of available cache.
- FIG. 1 shows a block diagram of a network object cache engine in a computer network.
- FIG. 2 shows a block diagram of a data structure for maintaining storage blocks for a set of cached network objects.
- FIG. 3 shows a block diagram of data structures for caching network objects.
- FIG. 4 shows a block diagram of a set of original and modified blocks.
- FIG. 5 shows a flow diagram of a method for atomic writing of modified blocks to a single disk drive.
- FIG. 6 shows a block diagram of a set of pointers and regions on mass storage.
- In the following description, a preferred embodiment of the invention is described with regard to preferred process steps and data structures. Those skilled in the art would recognize after perusal of this application that embodiments of the invention can be implemented using general purpose processors and storage devices, special purpose processors and storage devices, or other circuits adapted to particular process steps and data structures described herein, and that implementation of the process steps and data structures described herein would not require undue experimentation or further invention.
- ///
- FIG. 1 shows a block diagram of a network object cache engine in a computer network.
- A
cache engine 100 is coupled to acomputer network 110, so that thecache engine 100 can receive messages from a set ofdevices 111 also coupled to thenetwork 110. - In a preferred embodiment, the
network 110 includes a plurality ofsuch devices 111, interconnected using acommunication medium 112. For example, where thenetwork 110 includes a LAN (local area network), thecommunication medium 112 may comprise ethernet cabling, fiber optic coupling, or other media. Thenetwork 110 preferably includes a network of networks, sometimes called an “internet” or an “intranet.” - In a preferred embodiment, the
devices 111 coupled to thenetwork 110 communicate with thecache engine 100 using one or more protocols for communication, such as HTTP (hypertext transfer protocol) or one of its variants, FTP (file transfer protocol), or other protocols. - The
cache engine 100 includes aprocessor 101 and acache 102. In a preferred embodiment, theprocessor 101 comprises a general purpose processor operating under software control to perform the methods described herein and to construct and use the data structures described herein; as used herein, when thecache engine 100 performs particular tasks or maintains particular data structures that reference includes condign operation by theprocessor 101 under control of software maintained in a program anddata memory 103. - The
cache 102 includes the program anddata memory 103 and amass storage 104. In a preferred embodiment, themass storage 104 includes a plurality of disk drives such as magnetic disk drives, but may alternatively include optical or magneto-optical disk drives. As used herein, references to “disk” and “disk drives” refer to themass storage 104 and its individual drives, even if themass storage 104 and its individual drives do not include physical disk-shaped elements. Thecache engine 100 is coupled to thenetwork 110 and can receive and transmit a set ofprotocol messages 113 according to the one or more protocols with which thedevices 111 communicate with thecache engine 100. - The
cache engine 100 maintains a set ofnetwork objects 114 in thecache 102. Thecache engine 100 receivesprotocol messages 113 from a set of “client”devices 111 to requestnetwork objects 114 to be retrieved from a set of “server”devices 111. In response thereto, thecache engine 100 issuesprotocol messages 113 to request thosenetwork objects 114 from one ormore server devices 111, receives thosenetwork objects 114 and stores them in thecache 102, and transmits thosenetwork objects 114 to the requestingclient devices 111. - As used herein, the terms “client” and “server” refer to a relationship between the client or server and the
cache engine 100, not necessarily to particularphysical devices 111. As used herein, one “client device” 111 or one “server device” 111 can comprise any of the following: (a) a singlephysical device 111 executing software which bears a client or server relationship to thecache engine 100; (b) a portion of aphysical device 111, such as a software process or set of software processes executing on onehardware device 111, which portion of thephysical device 111 bears a client or server relationship to thecache engine 100; or (c) a plurality ofphysical devices 111, or portions thereof, cooperating to form a logical entity which bears a client or server relationship to thecache engine 100. The phrases “client device” and “server device” refer to such logical entities and not necessarily to particular individualphysical devices 111. - The
cache engine 100 preserves thenetwork objects 114 in thecache 102, and reuses thosenetwork objects 114 by continuing to serve them toclient devices 111 which request them. When thecache 102 becomes sufficiently full, thecache engine 100 removesnetwork objects 114 from thecache 102. For example, thecache engine 100 can remove objects as described herein in the section “Removing Objects from Cache.” - In a preferred embodiment, the
cache engine 100 uses thememory 103 as a cache for thosenetwork objects 114 maintained using themass storage 104, while using the combinedmemory 103 andmass storage 104 as thecache 102 for thosenetwork objects 114 available on thenetwork 110. - The
cache 102 is not a file storage system, andnetwork objects 114 which are stored in thecache 102 may be removed automatically from thecache 102 at any time by thecache engine 100. All network objects 114 and all other data maintained by thecache 102 is transient, except for a very small number of system objects which are required for operation, and those system objects are redundantly maintained on themass storage 104 so as preserve those system objects against possible loss of a part of the mass storage 104 (such as loss of one or more disk drives). Thus thecache engine 100 need not guarantee that network objects 114 which are stored in thecache 102 will be available at any particular time after they are stored, and failure or even intentional removal of portions of the cache 102 (such as portions of the mass storage 104) cannot cause failure of thecache engine 100. Similarly, recovery or intentional addition of additional mass storage 104 (such as “hot swapping” of disk drives) is smoothly integrated into thecache 102 without interruption of operation of thecache engine 100. - Moreover, the
cache engine 100 operates exclusively to perform the operation of caching the network objects 114. There is no separate “operating system,” no user, and there are no user application programs which execute independently on theprocessor 101. Within thememory 103, there are no separate memory spaces for “user” and “operating system.” Thecache engine 100 itself maintains thecache 102 of the network objects 114 and selects the network objects 114 for retention in thecache 102 or removal from thecache 102, operating so as to (1) localize writing the network objects 114 to themass storage 104, (2) localize deletion of the network objects 114 from themass storage 104, and (3) efficiently replace the network objects 114 in thecache 102 with new network objects 114. In a preferred embodiment, thecache engine 100 performs these operations efficiently while operating thecache 102 relatively filled with network objects 114. - In a preferred embodiment, the
cache engine 100 maintains statistics regarding access to thecache 102. These statistics can include the following: - a set of hit rates for the
cache 102, including (1) a hit rate for network objects 114 found in thecache 102 versus those which must be retrieved fromserver devices 111, and (2) a hit rate for network objects 114 found in thememory 103 versus those which must be retrieved from themass storage 104; - a set of statistics for operations on the
memory 103, including (1) the number of network objects 114 which are maintained in thememory 103, and (2) the fraction ofmemory 103 which is devoted to caching network objects 114 versus storing system objects or unallocated; and - a set of statistics for operations on the
mass storage 104, including (1) the number of read operations from themass storage 104, (2) the number of write operations to themass storage 104, including the number of “write episodes” as described herein, and (3) the fraction of themass storage 104 which is devoted to caching network objects 114 versus storing system objects or unallocated. - The
cache engine 100 can also maintain statistics which are combinations or variants of the above. - There are numerous circumstances in which the
cache engine 100 can provide improved performance or additional functionality in thenetwork 110. For example, thecache engine 100 can be used as a proxy cache (whether to provide a firewall, to provide a cache forclient devices 111 coupled to a local area network, or otherwise), as a reverse proxy cache, as a cache for requests made by users of a single ISP, as a cache for “push” protocols, or as an accelerator or server cache. - The
cache engine 100 provides theclient devices 111 with relatively quicker access to network objects 114 otherwise available directly from theserver devices 111. Typically theclient devices 111 request those network objects 114 from thecache engine 100, which either transmits them to theclient devices 111 from thecache 102 or obtains them from theserver devices 111 and then transmits them to theclient devices 111. - The
cache engine 100 can exercise more intelligence and proactivity than simply waiting for documents to be requested by the client devices 111: - The
cache engine 100 can be configured preloaded with selected network objects 114 which are expected to be requested by theclient devices 111. For example, certain network objects 114 are known to be commonly requested byclient devices 111 throughout thenetwork 110 known as the internet; these network objects 114 can be preloaded in thecache engine 100 upon manufacture. These network objects 114 could include home pages for well-known companies (such as Netscape) and well-known search engines (such as Digital's “Alta Vista”). - The
cache engine 100 can periodically request network objects 114 responsive to a set of statistics regarding commonly requested network objects 114. For example, information regarding commonly requested network objects 114 can be maintained on aserver device 111; thecache engine 100 can request this information from theserver device 111 and periodically request those network objects 114 for storage in thecache 102. In a preferred embodiment, thecache engine 100 can perform this operation periodically whenclient devices 111 are not actively using thecache engine 100, such as relatively unloaded times in the late night or early morning. - The
cache engine 100 can periodically request network objects 114 responsive to a set of user preferences at theclient devices 111. For example, thecache engine 100 can receive (either upon request or otherwise) a set of bookmarks from theclient devices 111 and can request those network objects 114 from theserver devices 111. In a preferred embodiment, thecache engine 100 can request those network objects 114 which have changed in a selected time period such as one day. - The
cache engine 100 can provide a mirror site to one ormore server devices 111, by periodically, or upon request, receivingnetwork objects 114 from theserver devices 111 to be delivered by theserver device 111 toclient devices 111 which have changed in a selected time period such as one day. - The
cache engine 100 can provide an accelerator for one ormore server devices 111, by receiving requests to theserver devices 111 which are distributed among a plurality ofcache engines 100. Eachcache engine 100 maintains itscache 102 withnetwork objects 114 to be delivered by theserver device 111 toclient devices 111. Service by theserver device 111 is thus accelerated, because eachcache engine 100 can respond to some of the load of requests for information, while limiting the number of requests for information which are passed through and must be handled by theserver device 111 itself. - The
cache engine 100 can provide a first type of push protocol assist to one ormore server devices 111, by transmitting network objects 114 to one ormore client devices 111 or proxy caches using a push protocol. For example, when theserver devices 111 provide a network broadcast service, thecache engine 100 can receivenetwork objects 114 from theserver devices 111 to be broadcast to a subset of thenetwork 110 and can independently broadcast those network objects 114. - The
cache engine 100 can provide a second type of push protocol assist to one ormore server devices 111, by allowing thoseserver devices 111 to broadcast network objects 114 to a plurality ofcache engines 100. Eachcache engine 100 can make the broadcast network objects 114 available toclient devices 111 which request those network objects 114 from thecache engine 100 as if thecache engine 100 were theserver device 111 for those network objects 114. - The network objects114 can include data, such as HTML pages, text, graphics, photographs, audio, video; programs, such as Java or ActiveX applets or applications; or other types of network objects, such as push protocol objects. The
cache engine 100 can record frames of streaming audio or streaming video information in thecache 102, for delayed use by a plurality ofclient devices 111. Some types of known network objects 114 are not cached, such as CGI output or items marked noncachable by theserver device 111. - In a preferred embodiment, the
cache engine 100 can glean knowledge about theclient devices 111 from theprotocol messages 113 or by other means, such as interrogating routing devices in thenetwork 110, and can react in response to that information to provide differing network objects 114 to differingclient devices 111. For example, thecache engine 100 can selectserver devices 111 for proximity or content in response to information aboutclient devices 111, as follows: - The
cache engine 100 can select aparticular server device 111 for rapid response, such as for network routing proximity or for spreading service load over a plurality ofserver devices 111. - The
cache engine 100 can select content at theserver device 111 in response to information about theclient device 111, such as tailoring the language of the response (such as serving pages in the English language or the French language), or such as tailoring local information (such as advertising, news, or weather). In a preferred embodiment, local information such as advertising can be retrieved from alocal server device 111 which supplies advertising for insertion into pages to be served tolocal client devices 111. - FIG. 2 shows a block diagram of a data structure for maintaining storage blocks for a set of cached network objects.
- The
cache 102 includes a set ofblocks 200, each of which comprises 4096 bytes in a preferred embodiment, and each of which can be stored in thememory 103 or on themass storage 104. In alternative embodiments, each of theblocks 200 can comprise a size other than 4096 bytes, and may be responsive to an amount ofavailable memory 103 ormass storage 104. - Each of the
blocks 200 can comprise either adata block 200, which includes data, that is, information not used by thecache engine 100 but maintained for theclient devices 111, or control information, that is, information used by thecache engine 100 and not used by theclient devices 111. - The
blocks 200 are organized into a set ofobjects 210, each of which comprises anobject descriptor 211, a set of data blocks 200, and a set ofblock pointers 212 referencing the data blocks 200 from theobject descriptor 211. Theobject descriptor 211 comprises aseparate control block 200. Where theblock pointers 212 will not fit into asingle control block 200, or for other types of relativelylarger objects 210, theobject descriptor 211 can reference a set ofindirect blocks 216, each of which references inferiorindirect blocks 216 or data blocks 200. Eachindirect block 216 comprises aseparate control block 200. Relativelysmaller objects 210 do not requireindirect blocks 216. - The
block pointers 212 each comprise apointer value 215 comprising a single 32-bit word and indicating the location of theblock 200 on themass storage 104, such as a physical disk block address. - In an alternative embodiment, the
block pointers 212 each comprise afirst bit 213 indicating whether the referencedblock 200 is stored in thememory 103 or themass storage 104, asecond bit 214 indicating whether the referencedblock 200 is a control block 200 (comprising control information) or a data block 200 (comprising data for network objects 114), and thepointer value 215 comprises a 30-bit value indicating the location of theblock 200. In such alternative embodiments, when theblock 200 is stored in thememory 103, thepointer value 215 indicates a byte address in thememory 103; when the block is stored on themass storage 104, thepointer value 215 indicates a physical disk block address on themass storage 104. - In a preferred embodiment, the
objects 210 are each referenced by aroot object 220, which is maintained redundantly in a plurality of (preferably two) copies of aroot block 221 on each disk drive of themass storage 104. In a preferred embodiment, there is oneroot object 220 for each disk drive of themass storage 104. Thus, each disk drive of themass storage 104 has aseparate root object 210, which is maintained using two copies of itsroot block 221. Each disk drive'sroot object 220 references eachcurrent object 210 for that disk drive. - In a preferred embodiment, one copy of the
root block 221 is maintained in each of physical disk blocks 2 and 3 of each of the disk drives of themass storage 104. When theroot block 221 for that disk drive is written to themass storage 104, it is first written to the physical disk block 2, and then identically written to the physical disk block 3. When thecache engine 100 is started or restarted, theroot block 221 is read from the physical disk block 2. If this read operation is successful, it is then identically rewritten to the physical disk block 3; however, if this read operation is unsuccessful, theroot block 221 is instead read from the physical disk block 3, and then identically rewritten to the physical disk block 2. - In a preferred embodiment, the
cache engine 100 also stores certain system objects 210 redundantly on each disk drive on themass storage 104, so as to maintain thecache 102 holographic in the sense that loss of any subset of the disk drives merely decreases the amount of available cache. Thus, eachsuch system object 210 is referenced by theroot object 220 for its disk drive and is maintained using two copies of itsobject descriptor 211. These system objects 210 which are maintained redundantly include theroot object 220, ablockmap object 210, and a hash table 350 (FIG. 3), each as described herein, as well as other system objects, such asobjects 210 for collected statistics, documentation, and program code. - A subset of the
blocks 200 are maintained in thememory 103, so as to use thememory 103 as a cache for the mass storage 104 (just as thememory 103 and themass storage 104 collectively act as thecache 102 for network objects 114). Theblocks 200 maintained in thememory 103 are referenced by a set of block handles 230, which are also maintained in thememory 103. - Each of the block handles230 includes a
forward handle pointer 232, abackward handle pointer 233, areference counter 234, ablock address 235, abuffer pointer 236, and a set offlags 237. - The
forward handle pointer 232 and thebackward handle pointer 233 reference other block handles 230 in a doubly-linked list of block handles 230. - The
reference counter 234 maintains a count of references to theblock 200 by processes of thecache engine 100. Thereference counter 234 is updated when ablock handle 230 for theblock 200 is claimed or released by a process for thecache engine 100. When thereference counter 234 reaches zero, there are no references to theblock 200, and it is placed on a free list ofavailable blocks 200 after having been written to disk, if it has been modified, in the next write episode. - The
block address 235 has the same format as theblock pointer 212. Thebuffer pointer 236 references a buffer used for theblock 200. Theflags 237 record additional information about theblock 200. - In one embodiment, the block handles230 are also threaded using a set of
2Q pointers 238 and a2Q reference counter 239, using the “2Q” technique, as further described in “2Q: A Low Overhead High Performance Buffer Management Replacement Algorithm,” by Theodore Johnson and Dennis Shasha, hereby incorporated by reference as if fully set forth herein. - FIG. 3 shows a block diagram of data structures for caching network objects.
- The
cache engine 100 receives protocol requests from thenetwork 110. In a preferred embodiment, each protocol request uses the HTTP protocol (or a variant such as SHTTP), and each HTTP request includes a URL (uniform resource locator) 310, which identifies anetwork object 114 in thenetwork 110. In a preferred embodiment, eachURL 310 identifies theserver device 111 for thenetwork object 114 and the location of thenetwork object 114 on thatserver device 111. - In alternative embodiments, the
cache engine 100 may use other protocols besides HTTP or its variants, and thecache engine 100 may be responsive to one or more other identifiers for network objects 114 besides itsURL 310. Accordingly, as used herein, the term “URL” refers generally to any type of identifier which is capable of identifying, or assisting in identifying, aparticular network object 114. - The
URL 310 includes a host identifier, which identifies theserver device 111 at which thenetwork object 114 is located, and a document identifier, which identifies the location at which thenetwork object 114 is located at theserver device 111. In a preferred embodiment, the host identifier comprises a character string name for theserver device 111, which can be resolved to an IP (internet protocol) address. However, in alternative embodiments, the host identifier may comprise the IP address for theserver device 111, rather than the character string name for theserver device 111. - The
cache engine 100 includes ahash function 320 which associates theURL 310 with ahash signature 330, which indexes a hash bucket 340 in a hash table 350 in thecache 102. In a preferred embodiment, the hash table 350 comprises a set of hash tables 350, one for each disk drive, each of which references those network objects 114 which are stored in thecache 102 on that disk drive of themass storage 104. Each such hash table 350 has itsown object descriptor 211; collectively the hash tables 350 form a single logical hash table. - In a preferred embodiment, the
hash signature 330 comprises a 32-bit unsigned integer value which is determined responsive to theURL 310, and which is expected to be relatively uniformly distributed over the range of all possible 32-bit unsigned integer values. In a preferred embodiment, theURL 310 is also associated with a 64-bit URL signature which is also an unsigned integer value, determined responsive to theURL 310, and which is expected to be relatively uniformly distributed over the range of all possible 64-bit unsigned integer values; when comparingURLs 310, the URL signatures are compared first, and only if they are equal are theURLs 310 themselves compared. In a preferred embodiment, theURL 310 is also converted to a canonical form prior to determining thehash signature 330 or the URL signature, such as by converting all alphabetic characters therein into a single case (lower case or upper case). In a preferred embodiment, each non-null hash bucket 340 comprises onedata block 200. - Because the hash table350 associates the
URL 310 directly with the hash bucket 340 in the hash table 350, storage of the network objects 114 in thecache 102 is not hierarchical; each of the network objects 114 can be referenced and accessed from thecache 102 within order of constant time, such as less than about two disk read access times. Moreover, there is no special requirement that the network objects 114 in thecache 102 must have unique names; when network objects 114 have identical names (such as when they are old and new versions of the same network object 114), the hash table 350 simply points to the same hash bucket 340 for both of them. - When there are both old and new versions of the
same network object 114, thecache engine 100 resolves new references by theURL 310 only to the new version of thenetwork object 114. Thoseclient devices 111 which are already accessing the old version of thenetwork object 114 when the new version of thenetwork object 114 is stored in thecache 102 will continue to access the old version of thenetwork object 114. However, subsequent accesses to thatnetwork object 114, even by thesame client device 111, using theURL 310 will be resolved by thecache engine 100 to the new version of thenetwork object 114. The old version of thenetwork object 114 is deleted as soon as possible when allclient devices 111 are done using it. - The
cache 102 differs from a file system also in that theclient device 111 has no control over storage of the network objects 114 in thecache 102, including (1) the name space at thecache 102 for storage of the network objects 114, (2) the ability to name or rename the network objects 114, (3) whether the network objects 114 are removed from thecache 102 at any time, and (4) whether the network objects 114 are even stored in thecache 102 at all. - In a preferred embodiment, the
cache engine 100 uses thememory 103 and the mass storage 104 (preferably a plurality of magnetic disk drives) to cache the network objects 114 so as to maintain in thecache 102 those network objects 114 most likely to be required by theclient device 111. However, in alternative embodiments, thecache engine 100 may enforce selected administrative requirements in addition to maintaining network objects 114 most likely to be used by theclient device 111, such as preferring or proscribing certain classes of network objects 114 or certain classes ofclient devices 111 orserver devices 111, whether at all times or at selected times of day and selected days. - The
cache engine 100 uses thehash function 320 and the hash table 350 to identify an object 210 (and thus one or more data blocks 200) associated with the URL 310 (and thus associated with the network object 114). Thecache engine 100 operates on theobject 210 to retrieve from thecache 102 thenetwork object 114 requested by the HTTP request, and to deliver thatnetwork object 114 to theclient device 111. Thecache engine 100 maintains thecache 102 using thememory 103 and themass storage 104 so that whether theobject 210 is in thecache 102, and if in thecache 102, whether theobject 210 is in thememory 103 or on themass storage 104 is transparent to the client device 111 (except possibly for different time delays in retrieving theobject 210 from thememory 103 or from the mass storage 104). - As described herein in the section “Writing to Disk,” the
cache engine 100 writes blocks 200 (and objects 210 comprising those blocks 200) from thememory 103 to themass storage 104 on occasion, so as to maintain thoseblocks 200 in thememory 103 which are most frequently accessed. - As described herein, when writing
blocks 200 from thememory 103 to themass storage 104, thecache engine 100 controls where theblocks 200 are written onto the mass storage 104 (such as determining onto which disk drive for themass storage 104 and which location on that disk drive), and when theblocks 200 are written onto the mass storage 104 (such as determining at which times it is advantageous to write data onto the mass storage 104). Thecache engine 100 attempts to optimize the times and locations when and where theblocks 200 are written to disk, so as to minimize time and space required to write to and read from disk. - The hash table350 is a
system object 210, and similar to other system objects 210, includes anobject descriptor 211, zero or moreindirect blocks 216, and zero or more data blocks 200. Because the hash table 350 is expected to be used relatively frequently, itsindirect blocks 216 are expected to all be maintained in thememory 103, although for a relatively large hash table 350 some of its data blocks 200 will be maintained on themass storage 104. In a preferred embodiment, the hash table 350 is distributed over the plurality of disk drives for themass storage 104, and the portion of the hash table 350 for each disk drive is referenced in theroot object 220 for that disk drive. - Each
hash signature 330 is indexed into the hash table 350 using thehash signature 330 modulo the number of hash buckets 340 in the hash table 350. Each hash bucket 340 comprises oneblock 200. Each hash bucket 340 includes zero ormore hash entries 360; eachhash entry 360 includes a reference to theobject 210 at the hash entry 360 (comprising a pointer to theobject descriptor 211 for that object 210). - The hash bucket340 includes a secondary hash table, having a plurality of chains of secondary hash table entries (such as, for example, 32 such chains). The
hash signature 330 is used to select one of the chains so as to search for thehash entry 360 associated with theURL 310. - In an alternative embodiment, the
hash entries 360 are maintained within the hash bucket 340 in an ordered list by a secondary hash value, with null entries possibly interspersed (when the associated network objects 114 have been deleted or otherwise removed from the hash table 350); the secondary hash value is also determined in response to thehash signature 330, such as by computing thehash signature 330 modulo a selected value such as 2**32. If there aremultiple hash entries 360 with the same secondary hash value, thecache engine 100 examines theobject descriptor 211 associated with each one of themultiple hash entries 360 for theURL 310 of thecorrect network object 114 associated with theURL 310 having the associatedhash signature 330. - In a preferred embodiment, each hash bucket340 has a selected size which is sufficient to hold at least 1.5 to 2 times the number of expected
hash entries 360 if thehash entries 360 were perfectly uniformly distributed (this selected size is preferably exactly one data block 200). If ahash entry 360 is assigned to a hash bucket 340 which is full, one of the network objects 114 already associated with the hash bucket 340, along with its associatedhash entry 360, is deleted from the hash bucket 340 and from thecache 102 to make room for thenew hash entry 360. - In a preferred embodiment, there can be a plurality of different operational policies for selecting just which objects210 are deletable.
- ///
- The
cache engine 100 maintains a DSD (disk set descriptor) object 210 for each disk drive currently or recently present on themass storage 104, which includes a data structure describing that disk drive. Thecache engine 100 also maintains a DS (disk set)object 210, which references all of the DSD objects 210, and which is maintained redundantly on one or more of the disk drives for themass storage 104. Thus, theDS object 210 is maintained redundant on themass storage 104 on a plurality of disk drives (preferably all of them), with each disk drive's information being maintained on that disk drive in theDSD object 210. - Each
DSD object 210 includes at least the following information: (1) the number of disk drives; (2) the collective total size of all disk drives; (3) for each disk drive—the individual size of that disk drive, an identifier for that disk drive, and a index into an array of all the disk drives; and (4) for each disk drive—the range ofhash signatures 330 which are maintained on that disk drive. Also, the range ofhash signatures 330 which are maintained on each disk drive is maintained in aseparate system object 210 which maps eachhash signature 330 to a particular disk drive. In a preferred embodiment, sizes are expressed as multiples of a selected value such as 1 megabyte. - The
hash entries 360 are distributed over the plurality of disk drives in proportion to the size of each disk drive, rounded to an integer number ofhash entries 360. - When a disk drive is added, removed, or replaced, the
cache engine 100 creates or modifies an associatedDSD object 210, and updates theDS object 210. This operation proceeds in like manner as updating adata block 200; thus, anycontrol blocks 200 which reference theDS object 210 or one of the DSD objects 210 are also updated, and the update is atomically committed to themass storage 104 with the next write episode. (Updates to theDS object 210 are atomically committed for each disk drive, one at a time.) Thus, themass storage 104 can be dynamically updated, including changing the identity or number of disk drives, while thecache engine 100 continues to operate, and the only effect on thecache engine 100 is to alter its perception of the amount ofmass storage 104 which is available for thecache 102. - The
cache engine 100 implements a “delayed write” technique, in which theobjects 210 which are written into the cache 102 (includingobjects 210 which are new versions ofold objects 210 already present in the cache 102) are written first into thememory 103, and only later written out to themass storage 104. Unlike file systems which use delayed write techniques, there is no need to provide a non-volatile RAM or a UPS (uninterruptable power supply) and an associated orderly shutdown procedure, because thecache engine 100 makes no guarantee of persistence for the network objects 114 in thecache 102. For example, if aparticular network object 114 is lost from thecache 102, thatnetwork object 114 can typically be reacquired from its associatedserver device 111. - However, the delayed write technique operates to maintain consistency of the
cache 102, by not overwriting either control blocks 200 or data blocks 200 (except for the root block 221). Instead, modifiedblocks 200 are written to themass storage 104, substituted for theoriginal blocks 200, and theoriginal blocks 200 are freed, all in an atomic operation called a “write episode.” If a write episode is interrupted or otherwise fails, the entire write episode fails atomically and theoriginal blocks 200 remain valid. - A modified
data block 200 is created when the underlying data for the original data block 200 is modified (or when new underlying data, such as for anew network object 114, is stored in a new data block 200). A modifiedcontrol block 200 is created when one of the original blocks 200 (original data block 200 or original control block 200) referenced by theoriginal control block 200 is replaced with a modified block 200 (modifieddata block 200, new data block 200, or modified control block 200); the modified control block 200 references the modifiedblock 200 rather than theoriginal block 200. - Each write episode is structured so as to optimize both the operation of writing
blocks 200 to themass storage 104 and later operations of reading thoseblocks 200 from themass storage 104. The following techniques are used to achieve the read and write optimization goals: - modified
blocks 200 to be written are collected and written, when possible, into sequential tracks of one of the disk drives used for themass storage 104; -
indirect blocks 216 are written to storage blocks which are close to and before thosedata blocks 200 which they reference, so as to enable reading the referenced data blocks 200 in the same read operation whenever possible; - sequentially related data blocks200 are written to sequential free storage blocks (if possible, contiguous free storage blocks) on one of the disk drives used for the
mass storage 104, so as to enable reading the related data blocks 200 in the same read operation whenever possible; - blocks200 (control blocks 200 or data blocks 200) to be written are collected together for their associated
objects 210 and ordered within eachobject 210 by relative address, so as to enable readingblocks 200 for aparticular object 210 in the same read operation whenever possible. - FIG. 4 shows a block diagram of a set of original and modified blocks.
- FIG. 5 shows a flow diagram of a method for atomic writing of modified blocks to a single disk drive.
- A tree structure400 (FIG. 4) of
blocks 200 includes the original control blocks 200 and the original data blocks 200, which have been already written to themass storage 104 and referenced by theroot object 220. Some or all of theseoriginal blocks 200 can be held in thememory 103 for use. - A method500 (FIG. 5) includes a set of flow points to be noted, and steps to be executed, by the
cache engine 100. - At a
flow point 510, the modified data blocks 200 and new data blocks 200 are held in thememory 103 and have not yet been written to disk. - Because no data block200 is rewritten in place, each original control block 200 which references a modified data block 200 (and each original control block 200 which references a modified control block 200) must be replaced with a modified
control block 200, all the way up thetree structure 400 to theroot object 200. - At a
step 521, for each modifieddata block 200, a free storage block on themass storage 104 is allocated for recording the modifieddata block 200. Theblockmap object 210 is altered to reflect the allocation of the storage block for the modifieddata block 200 and freeing of the storage block for theoriginal data block 200. - The
blockmap object 210 maintains information about which storage blocks on themass storage 104 are allocated and have data stored therein, and which storage blocks are free and eligible for use. Thecache engine 100 searches theblockmap object 210 for a free storage block, maintaining awrite pointer 250 into theblockmap object 210 so as to perform the search in a round-robin manner. Thus, when thewrite pointer 250 advances past the end of theblockmap object 210, it is wrapped around to the beginning of theblockmap object 210. Thewrite pointer 250 is maintained in theroot object 220 so that the search continues in a round-robin manner even after a failure and restart of thecache 102. - To maintain consistency of the
cache 102 in the event of a failure, afree storage block 200 cannot be considered free (and therefore used) if it is still referenced, even if indirectly, by theroot object 220. Accordingly, thoseblocks 200 which are freed prior to atomic commitment of theroot object 220 are not considered free until theroot object 220 is atomically written to disk. - At a
step 522, for each original control block 200 which references anoriginal block 200 which is to be modified in this write episode, a modifiedcontrol block 200 is generated. In like manner as thestep 521, a free storage block on themass storage 104 is allocated for recording the modifiedcontrol block 200. In like manner as thestep 521, theblockmap object 210 is modified to reflect the allocation of the storage block for the modifiedcontrol block 200 and freeing of the storage block for theoriginal control block 200. - The
step 522 is repeated for each level of thetree structure 400 up to theroot object 220. - At a
step 523, the operations of thestep 521 and thestep 522 are repeated for thoseblocks 200 of theblockmap object 210 which were altered. - At a
step 524, the modified data blocks 200 and modified control blocks 200 (including the blockmap object 210) are written to their allocated storage blocks on themass storage 104. - At a
step 525, theroot object 220 is rewritten in place on themass storage 104. - At a
flow point 530, theroot object 220 has been rewritten in place, all changes to thetree structure 400 have thus been atomically committed; the modifiedblocks 200 have become part of thetree structure 400 and theoriginal blocks 200 which were replaced with modifiedblocks 200 have become freed and eligible for reuse. The modifiedblockmap object 210 is not atomically committed until theroot object 220 has been rewritten in place, so storage blocks which are indicated as allocated or free are not so indicated until the write episode has been atomically committed at theflow point 530. - When the modified
blocks 200 are actually allocated to storage blocks and written to those storage blocks on themass storage 104, they are written in the following manner: - the
tree structure 400 is traversed in a depth-first top-down manner, so as to ensure that modified control blocks 200 are written in a sequence of storage blocks before the modified data blocks 200 they reference; - at each modified
control block 200, the referenced modified data blocks 200 are traversed in a depth-first top-down manner, so as to ensure that the referenced modified data blocks 200 are clustered together in a sequence of storage blocks after the modifiedcontrol block 200 which references them. - This technique helps to ensure that when reading
control blocks 200, the data blocks 200 they reference are read-ahead whenever possible, so as to minimize the number of operations required to read the control blocks 200 and the data blocks 200 from themass storage 104. - The
cache engine 100 determines when to perform a write episode, in response to the condition of the memory 103 (including the number of modifiedblocks 200 in the memory 103), the condition of the mass storage 104 (including the number of free storage blocks available on the mass storage 104), and the condition of the cache 102 (including the hit rate of network objects 114 in the cache 102). - In a preferred embodiment, write episodes using the
method 500 are performed upon either of the following conditions: - when a certain time (such as 10 seconds) have elapsed since the previous write episode; or
- when modified blocks comprise too large a proportion of memory.
- Write episodes using the
method 500 can also be performed upon either of the following conditions: - the number of modified
blocks 200 in thememory 103 is near the number of available free storage blocks on themass storage 104 minus the number of storage blocks needed for theblockmap object 210; or - the fraction of modified
blocks 200 in thememory 103 is near the miss rate of network objects 114 in thecache 102. - However, the number of
free blocks 200 on themass storage 104 is normally much larger than the number ofblocks 200 to be written during the write episode. - Each
object 210 has an associated “access time,” which indicates when thatobject 210 was last written or read. However, it is not desirable to update the access time on disk for eachobject 210 whenever thatobject 210 is read, as this would produce a set of modified control blocks 200 (which must be written to disk during the next write episode) whenever anyobject 210 is read. - Accordingly, a volatile information table is maintained which records volatile information about
objects 210, including access times forobjects 210 which have been read, and number of accesses for thoseobjects 210. When anobject 210 is read, its access time is updated only in the volatile information table, rather than in theobject descriptor 211 for theobject 210 itself. The volatile information table is maintained in thememory 103 and is not written to disk. - In a preferred embodiment, network objects114 can continue to be read while write episodes using the
method 500 are being performed, even for those network objects 114 which include modified data blocks 200, because the modified data blocks 200 continue to be maintained in thememory 103 while the write episodes are performed, whether or not they are actually successfully written to themass storage 104. - FIG. 6 shows a block diagram of a set of pointers and regions on mass storage.
- A set of storage blocks on each disk drive of the
mass storage 104 is represented by acircular map 600, having indexes from zero to a maximum value Nmax. In the figure, indexes increase in a counterclockwise direction, wrapping around from the end to the beginning of each disk drive modulo the maximum value Nmax. - A DT (delete table)
object 210 is maintained which includes an entry for eachdeletable object 210. Each time one of the hash buckets 340 in the hash table 350 is accessed, a reference is inserted into theDT object 210 for eachobject 210 which is referenced by one of thehash entries 360 in that hash bucket 340 and which qualifies as deletable. - In alternative embodiments, an
objectmap object 210 is maintained which includes an entry for each of the blockmap entries in theblockmap object 210. In such alternatives, each entry in theobjectmap object 210 is either empty, which indicates that thecorresponding block 200 does not comprise anobject descriptor 211 or non-empty, which indicates that thecorresponding block 200 comprises anobject descriptor 211, and further includes information to determine whether thecorresponding object 210 can be deleted. Each non-empty entry in theobjectmap object 210 includes at least a hit rate, a load time, a time to live value and ahash signature 330 for indexing into the hash table 350. - The
cache engine 100 searches theblockmap object 210 for a deletable object 210 (anobject 210 referenced by the DT object 210), maintaining adelete pointer 260 into theblockmap object 210, similar to thewrite pointer 250, so as to perform the search in a round-robin manner. Thus, similar to thewrite pointer 250, when thedelete pointer 260 advances past the end of theblockmap object 210, it is wrapped around to the beginning of theblockmap object 210. Also similar to thewrite pointer 250, thedelete pointer 260 is maintained in theroot object 220 so that the search continues in a round-robin manner even after a failure and restart of thecache 102. - The
write pointer 250 and thedelete pointer 260 for each disk drive in themass storage 104 each comprise an index into themap 600. - In a preferred embodiment, the
delete pointer 260 is maintained at least a selectedminimum distance d0 601 ahead of thewrite pointer 250, but not so far ahead as to wrap around again past thewrite pointer 250, so as to select adelete region 610 of each disk drive for deletingdeletable objects 210 which is near to awrite region 620 used for writing modified andnew objects 210. Thewrite region 620 is at least the size specified by theminimum distance d0 601. Although there is no specific requirement for a size of thedelete region 610, it is preferred that thedelete region 610 is several times (preferably about five times) the size of thewrite region 620. Thecache engine 100 thus provides that nearly all writing to disk occurs in a relatively small part of each disk drive. This allows faster operation of themass storage 104 because a set of disk heads for themass storage 104 must move only relatively a small distance during each write episode. - Because the
cache engine 100 attempts to maintain a relatively fixed distance relationship between thewrite pointer 250 and thedelete pointer 260, write episodes and delete episodes will occur relatively frequently. In a preferred embodiment, thecache engine 100 alternates between write episodes and delete episodes, so that each delete episode operates to make space on disk for a later write episode (the next succeeding write episode writes theblockmap object 210 to disk, showing theblocks 200 to be deleted; the write episode after that is able to use the newly free blocks 200) and each write episode operates to consume free space on disk and require a later delete episode. - A collection region630 is selected near to and ahead of the
delete region 610, so as to selectobjects 210 for deletion. A size of the collection region 630 is selected so that, in an time estimated for thewrite pointer 250 to progress through the collection region 630 (this should take several write episodes), nearly all hashentries 360 will have been accessed through normal operation of thecache engine 100. Thus, because eachhash entry 360 includes information sufficient to determine whether its associatedobject 210 is deletable, nearly allobjects 210 will be assessed for deletion in the several write episodes needed for thewrite region 620 to move through the collection region 630. -
Objects 210 which have been assessed for deletion are placed on an deletion list, sorted according to eligibility for deletion. In a preferred embodiment, objects 210 are assessed for deletion according to one of these criteria: - If an
object 210 is explicitly selected for deletion by thecache engine 100 due to operation of the HTTP protocol (or a variant thereof, such as SHTTP), theobject 210 is immediately placed at the head of the deletion list. - If a
new object 210 with the same name is created, theold object 210 is placed at the head of the deletion list as soon as all references to theold object 210 are released (that is, no processes on thecache engine 100 reference theold object 210 any longer). - If an
object 210 has expired, it is immediately placed at the head of the deletion list. - If a
first object 210 has an older access time than asecond object 210, thefirst object 210 is selected as more eligible for deletion than thesecond object 210, and is thus sorted into the deletion list ahead of thesecond object 210. - A fraction of
objects 210 on the deletion list chosen due to the last two of these criteria (that is, due to expiration or older access time), preferably one-third of theobjects 210 on the deletion list, are selected for deletion. - After each write episode, the collection region630 is advanced by an expected size of the
next write region 620. In a preferred embodiment, the expected size of thenext write region 620 is estimated by averaging the size of thewrite region 620 for the past several (preferably seven) write episodes. Thoseobjects 210 which were on the deletion list before advancing thedelete region 610 and which are in thedelete region 610 afterward are scheduled for deletion; these objects are selected individually and deleted in the next delete episode (in a preferred embodiment, the next delete episode is immediately after completion of the write episode). - In a preferred embodiment, write episodes and delete episodes for each disk drive on the
mass storage 104 are independent, so there areseparate deletion regions 610, writeregions 620, and collection regions 630 for each disk drive on themass storage 104. - Although preferred embodiments are disclosed herein, many variations are possible which remain within the concept, scope, and spirit of the invention, and these variations would become clear to those skilled in the art after perusal of this application.
Claims (1)
1. A system for objects on a network, said system including
a receiver coupled to said network;
a cache engine operative to record a object from said network on mass storage;
wherein said cache engine is capable of selecting times to record said object, selecting locations to record said object, storing said object holographically so as to continue operation after loss of a portion of said mass storage, or minimizing time needed to write to said mass storage.
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/209,957 US20030041280A1 (en) | 1997-06-09 | 2002-07-31 | Network object cache engine |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US4898697P | 1997-06-09 | 1997-06-09 | |
US09/093,533 US7103794B2 (en) | 1998-06-08 | 1998-06-08 | Network object cache engine |
US10/209,957 US20030041280A1 (en) | 1997-06-09 | 2002-07-31 | Network object cache engine |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US09/093,533 Continuation US7103794B2 (en) | 1997-06-09 | 1998-06-08 | Network object cache engine |
Publications (1)
Publication Number | Publication Date |
---|---|
US20030041280A1 true US20030041280A1 (en) | 2003-02-27 |
Family
ID=22239454
Family Applications (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US09/093,533 Expired - Lifetime US7103794B2 (en) | 1997-06-09 | 1998-06-08 | Network object cache engine |
US10/209,957 Abandoned US20030041280A1 (en) | 1997-06-09 | 2002-07-31 | Network object cache engine |
US11/461,320 Expired - Fee Related US7539818B2 (en) | 1998-06-08 | 2006-07-31 | Network object cache engine |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US09/093,533 Expired - Lifetime US7103794B2 (en) | 1997-06-09 | 1998-06-08 | Network object cache engine |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
US11/461,320 Expired - Fee Related US7539818B2 (en) | 1998-06-08 | 2006-07-31 | Network object cache engine |
Country Status (1)
Country | Link |
---|---|
US (3) | US7103794B2 (en) |
Cited By (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030005457A1 (en) * | 2001-06-28 | 2003-01-02 | Sorin Faibish | Video file server cache management using movie ratings for reservation of memory and bandwidth resources |
US6654784B1 (en) * | 2000-01-14 | 2003-11-25 | Nexaweb Technologies, Inc | Computing architecture |
US20030237084A1 (en) * | 2002-06-20 | 2003-12-25 | Steven Neiman | System and method for dividing computations |
US20030236848A1 (en) * | 2002-06-21 | 2003-12-25 | Steven Neiman | System and method for caching results |
US20040015968A1 (en) * | 2002-02-08 | 2004-01-22 | Steven Neiman | System architecture for distributed computing and method of using the system |
US20040015554A1 (en) * | 2002-07-16 | 2004-01-22 | Brian Wilson | Active e-mail filter with challenge-response |
US20040123068A1 (en) * | 2002-12-19 | 2004-06-24 | Akiyoshi Hashimoto | Computer systems, disk systems, and method for controlling disk cache |
US20040167968A1 (en) * | 2003-02-20 | 2004-08-26 | Mailfrontier, Inc. | Using distinguishing properties to classify messages |
US7188222B2 (en) | 2003-09-29 | 2007-03-06 | International Business Machines Corporation | Method, system, and program for mirroring data among storage sites |
KR100692999B1 (en) | 2003-12-22 | 2007-03-12 | 레노보 (싱가포르) 피티이. 엘티디. | Key cache management through multiple localities |
US20070260922A1 (en) * | 2006-04-20 | 2007-11-08 | Inventec Corporation | Method of protecting data in cache memory of storage system |
US7299261B1 (en) | 2003-02-20 | 2007-11-20 | Mailfrontier, Inc. A Wholly Owned Subsidiary Of Sonicwall, Inc. | Message classification using a summary |
US20080005543A1 (en) * | 2006-06-29 | 2008-01-03 | Bohuslav Rychlik | Methods and Apparatus for Proactive Branch Target Address Cache Management |
US7406502B1 (en) * | 2003-02-20 | 2008-07-29 | Sonicwall, Inc. | Method and system for classifying a message based on canonical equivalent of acceptable items included in the message |
US20080183970A1 (en) * | 2005-03-16 | 2008-07-31 | Amadeus S.A.S. | Method and System For Maintaining Consistency of a Cache Memory Accessible by Multiple Independent Processes |
EP1967965A1 (en) | 2007-03-05 | 2008-09-10 | Avaya GmbH & Co. KG | Method for acquiring information from a database |
US7539726B1 (en) | 2002-07-16 | 2009-05-26 | Sonicwall, Inc. | Message testing |
US7640547B2 (en) | 2002-02-08 | 2009-12-29 | Jpmorgan Chase & Co. | System and method for allocating computing resources of a distributed computing system |
US7908330B2 (en) | 2003-03-11 | 2011-03-15 | Sonicwall, Inc. | Message auditing |
US8396926B1 (en) | 2002-07-16 | 2013-03-12 | Sonicwall, Inc. | Message challenge response |
US20130117252A1 (en) * | 2011-11-09 | 2013-05-09 | Google Inc. | Large-scale real-time fetch service |
US9052942B1 (en) * | 2012-12-14 | 2015-06-09 | Amazon Technologies, Inc. | Storage object deletion job management |
US9736212B2 (en) | 2014-06-26 | 2017-08-15 | Google Inc. | Optimized browser rendering process |
US9785720B2 (en) | 2014-06-26 | 2017-10-10 | Google Inc. | Script optimized browser rendering process |
US9984130B2 (en) | 2014-06-26 | 2018-05-29 | Google Llc | Batch-optimized render and fetch architecture utilizing a virtual clock |
US10691696B2 (en) * | 2017-01-31 | 2020-06-23 | Salesforce.Com, Inc. | Key-value storage using a skip list |
US11386065B2 (en) | 2017-01-31 | 2022-07-12 | Salesforce.Com, Inc. | Database concurrency control through hash-bucket latching |
Families Citing this family (52)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6427187B2 (en) | 1998-07-31 | 2002-07-30 | Cache Flow, Inc. | Multiple cache communication |
US7512664B1 (en) * | 1999-01-28 | 2009-03-31 | Texas Instruments Incorporated | System and method for loading resolved java class files to a client device |
DE60040846D1 (en) * | 1999-02-26 | 2009-01-02 | Henry Haugland | MASS PRODUCTION OF INDIVIDUAL VIRTUAL SERVER, VERTUAL WEBSITES AND VIRTUAL WEB OBJECTS |
US6671757B1 (en) | 2000-01-26 | 2003-12-30 | Fusionone, Inc. | Data transfer and synchronization system |
US8620286B2 (en) | 2004-02-27 | 2013-12-31 | Synchronoss Technologies, Inc. | Method and system for promoting and transferring licensed content and applications |
US8156074B1 (en) | 2000-01-26 | 2012-04-10 | Synchronoss Technologies, Inc. | Data transfer and synchronization system |
US7051078B1 (en) * | 2000-07-10 | 2006-05-23 | Cisco Technology, Inc. | Hierarchical associative memory-based classification system |
US7895334B1 (en) | 2000-07-19 | 2011-02-22 | Fusionone, Inc. | Remote access communication architecture apparatus and method |
US8073954B1 (en) | 2000-07-19 | 2011-12-06 | Synchronoss Technologies, Inc. | Method and apparatus for a secure remote access system |
US7571217B1 (en) | 2000-08-16 | 2009-08-04 | Parallel Networks, Llc | Method and system for uniform resource locator transformation |
US6567817B1 (en) * | 2000-09-08 | 2003-05-20 | Hewlett-Packard Development Company, L.P. | Cache management system using hashing |
US7818435B1 (en) * | 2000-12-14 | 2010-10-19 | Fusionone, Inc. | Reverse proxy mechanism for retrieving electronic content associated with a local network |
US7058978B2 (en) * | 2000-12-27 | 2006-06-06 | Microsoft Corporation | Security component for a computing device |
US8615566B1 (en) | 2001-03-23 | 2013-12-24 | Synchronoss Technologies, Inc. | Apparatus and method for operational support of remote network systems |
US7797376B1 (en) * | 2001-11-13 | 2010-09-14 | Cisco Technology, Inc. | Arrangement for providing content operation identifiers with a specified HTTP object for acceleration of relevant content operations |
US8635305B1 (en) * | 2001-12-19 | 2014-01-21 | Cisco Technology, Inc. | Mechanisms for providing differentiated services within a web cache |
AU2003209249A1 (en) * | 2002-01-18 | 2003-09-02 | Idetic, Inc. | A multi-tiered caching mechanism for the storage and retrieval of content multiple versions |
WO2003065195A1 (en) * | 2002-01-28 | 2003-08-07 | Fujitsu Limited | Storage system, storage control program, storage control method |
US7552223B1 (en) | 2002-09-16 | 2009-06-23 | Netapp, Inc. | Apparatus and method for data consistency in a proxy cache |
US7284030B2 (en) * | 2002-09-16 | 2007-10-16 | Network Appliance, Inc. | Apparatus and method for processing data in a network |
US7171469B2 (en) * | 2002-09-16 | 2007-01-30 | Network Appliance, Inc. | Apparatus and method for storing data in a proxy cache in a network |
US7574423B2 (en) * | 2003-03-20 | 2009-08-11 | International Business Machines Corporation | Partial data model exposure through client side caching |
EP1652048A4 (en) | 2003-07-21 | 2009-04-15 | Fusionone Inc | Device message management system |
US20050144242A1 (en) * | 2003-10-31 | 2005-06-30 | Justin Marston | Caching in an electronic messaging system |
US7383382B2 (en) * | 2004-04-14 | 2008-06-03 | Microsoft Corporation | System and method for storage power, thermal and acoustic management in server systems |
WO2005109794A1 (en) * | 2004-05-12 | 2005-11-17 | Bluespace Group Ltd | Enforcing compliance policies in a messaging system |
CN1998224A (en) | 2004-05-12 | 2007-07-11 | 富盛旺公司 | Advanced contact identification system |
US20060031352A1 (en) * | 2004-05-12 | 2006-02-09 | Justin Marston | Tamper-proof electronic messaging |
US9542076B1 (en) | 2004-05-12 | 2017-01-10 | Synchronoss Technologies, Inc. | System for and method of updating a personal profile |
US7610322B2 (en) * | 2004-05-25 | 2009-10-27 | Microsoft Corporation | Safe handle |
US7499996B1 (en) * | 2004-12-22 | 2009-03-03 | Google Inc. | Systems and methods for detecting a memory condition and providing an alert |
WO2007082308A2 (en) * | 2006-01-13 | 2007-07-19 | Bluespace Software Corp. | Determining relevance of electronic content |
US20070283117A1 (en) * | 2006-06-05 | 2007-12-06 | Microsoft Corporation | Unmanaged memory accessor |
US8095513B2 (en) * | 2006-06-05 | 2012-01-10 | Microsoft Corporation | Safe buffer |
US20080065718A1 (en) * | 2006-09-12 | 2008-03-13 | Emc Corporation | Configuring a cache prefetch policy that is controllable based on individual requests |
US8078648B2 (en) * | 2007-06-15 | 2011-12-13 | Microsoft Corporation | Data structure for supporting a single access operation |
US8239345B2 (en) * | 2007-12-27 | 2012-08-07 | Microsoft Corporation | Asynchronous replication |
US8181111B1 (en) | 2007-12-31 | 2012-05-15 | Synchronoss Technologies, Inc. | System and method for providing social context to digital activity |
US8255006B1 (en) | 2009-11-10 | 2012-08-28 | Fusionone, Inc. | Event dependent notification system and method |
US8396936B2 (en) * | 2010-10-28 | 2013-03-12 | Hewlett-Packard Development Company, L.P. | Computer system with cooperative cache |
US8943428B2 (en) | 2010-11-01 | 2015-01-27 | Synchronoss Technologies, Inc. | System for and method of field mapping |
US9075894B2 (en) | 2010-11-01 | 2015-07-07 | Blue Coat Systems, Inc. | System and method for identifying web objects unworthy of being cached |
US8713261B1 (en) * | 2011-03-11 | 2014-04-29 | Emc Corporation | Caching techniques |
US8584211B1 (en) | 2011-05-18 | 2013-11-12 | Bluespace Software Corporation | Server-based architecture for securely providing multi-domain applications |
US8620886B1 (en) | 2011-09-20 | 2013-12-31 | Netapp Inc. | Host side deduplication |
US9009165B2 (en) * | 2013-01-10 | 2015-04-14 | Telefonaktiebolaget L M Ericsson (Publ) | High performance hash-based lookup for packet processing in a communication network |
JP2016028319A (en) * | 2014-07-08 | 2016-02-25 | 富士通株式会社 | Access control program, access control device, and access control method |
US10452554B2 (en) * | 2016-04-08 | 2019-10-22 | Advanced Micro Devices, Inc. | Adaptive resizable cache/LCM for improved power |
US11188266B2 (en) * | 2020-04-20 | 2021-11-30 | Netapp Inc. | Write ordering for persistent memory |
TWI751580B (en) * | 2020-06-10 | 2022-01-01 | 財團法人工業技術研究院 | Management method of cache files in storage space and recording device for storing cache files |
US12086161B2 (en) | 2021-07-09 | 2024-09-10 | Craxel, Inc. | Transforming relational statements into hierarchical data space operations |
WO2023140967A1 (en) * | 2022-01-18 | 2023-07-27 | Craxel, Inc. | Composite operations using multiple hierarchical data spaces |
Family Cites Families (66)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5065354A (en) | 1988-09-16 | 1991-11-12 | Compaq Computer Corporation | Queued posted-write disk write method with improved error handling |
US5124987A (en) * | 1990-04-16 | 1992-06-23 | Storage Technology Corporation | Logical track write scheduling system for a parallel disk drive array data storage subsystem |
JPH0679293B2 (en) | 1990-10-15 | 1994-10-05 | 富士通株式会社 | Computer system |
DE69224084T2 (en) * | 1991-01-15 | 1998-07-23 | Koninkl Philips Electronics Nv | Computer arrangement with multiple buffer data cache and method therefor |
US5305389A (en) * | 1991-08-30 | 1994-04-19 | Digital Equipment Corporation | Predictive cache system |
US5649154A (en) | 1992-02-27 | 1997-07-15 | Hewlett-Packard Company | Cache memory system having secondary cache integrated with primary cache for use with VLSI circuits |
US5452447A (en) | 1992-12-21 | 1995-09-19 | Sun Microsystems, Inc. | Method and apparatus for a caching file server |
US5701501A (en) * | 1993-02-26 | 1997-12-23 | Intel Corporation | Apparatus and method for executing an atomic instruction |
US5664106A (en) | 1993-06-04 | 1997-09-02 | Digital Equipment Corporation | Phase-space surface representation of server computer performance in a computer network |
US5452440A (en) | 1993-07-16 | 1995-09-19 | Zitel Corporation | Method and structure for evaluating and enhancing the performance of cache memory systems |
US5598581A (en) * | 1993-08-06 | 1997-01-28 | Cisco Sytems, Inc. | Variable latency cut through bridge for forwarding packets in response to user's manual adjustment of variable latency threshold point while the bridge is operating |
US5564011A (en) | 1993-10-05 | 1996-10-08 | International Business Machines Corporation | System and method for maintaining file data access in case of dynamic critical sector failure |
US5680573A (en) * | 1994-07-12 | 1997-10-21 | Sybase, Inc. | Method of buffering data objects in a database |
US5594911A (en) * | 1994-07-13 | 1997-01-14 | Bell Communications Research, Inc. | System and method for preprocessing and delivering multimedia presentations |
US5715445A (en) | 1994-09-02 | 1998-02-03 | Wolfe; Mark A. | Document retrieval system employing a preloading procedure |
US5745915A (en) * | 1995-03-17 | 1998-04-28 | Unisys Corporation | System for parallel reading and processing of a file |
US5802292A (en) | 1995-04-28 | 1998-09-01 | Digital Equipment Corporation | Method for predictive prefetching of information over a communications network |
US5696932A (en) * | 1995-05-16 | 1997-12-09 | International Business Machines Corporation | Method and system for estimating minumun requirements on a cache in a computer based storage system |
US5596774A (en) | 1995-06-15 | 1997-01-28 | Howard; Frederick T. | Self cleaning toilet |
CA2223876C (en) | 1995-06-26 | 2001-03-27 | Novell, Inc. | Apparatus and method for redundant write removal |
US5860106A (en) | 1995-07-13 | 1999-01-12 | Intel Corporation | Method and apparatus for dynamically adjusting power/performance characteristics of a memory subsystem |
US5826253A (en) | 1995-07-26 | 1998-10-20 | Borland International, Inc. | Database system with methodology for notifying clients of any additions, deletions, or modifications occurring at the database server which affect validity of a range of data records cached in local memory buffers of clients |
US5752022A (en) | 1995-08-07 | 1998-05-12 | International Business Machines Corp. | Method for creating a hypertext language for a distributed computer network |
US5964830A (en) | 1995-08-22 | 1999-10-12 | Durrett; Charles M. | User portal device for the world wide web to communicate with a website server |
US5778168A (en) * | 1995-09-11 | 1998-07-07 | Sun Microsystems, Inc. | Transaction device driver technique for a journaling file system to ensure atomicity of write operations to a computer mass storage device |
JPH09231242A (en) | 1995-09-14 | 1997-09-05 | Sony Corp | Terminal equipment placed in network and information recording medium that can be read by the terminal equipment |
US5781785A (en) | 1995-09-26 | 1998-07-14 | Adobe Systems Inc | Method and apparatus for providing an optimized document file of multiple pages |
US5948062A (en) | 1995-10-27 | 1999-09-07 | Emc Corporation | Network file server using a cached disk array storing a network file directory including file locking information and data mover computers each having file system software for shared read-write file access |
US6012085A (en) | 1995-11-30 | 2000-01-04 | Stampede Technolgies, Inc. | Apparatus and method for increased data access in a network file object oriented caching system |
US5822539A (en) | 1995-12-08 | 1998-10-13 | Sun Microsystems, Inc. | System for adding requested document cross references to a document by annotation proxy configured to merge and a directory generator and annotation server |
US5819045A (en) | 1995-12-29 | 1998-10-06 | Intel Corporation | Method for determining a networking capability index for each of a plurality of networked computers and load balancing the computer network using the networking capability indices |
US5887275A (en) * | 1996-02-08 | 1999-03-23 | Oracle Corporation | Method and apparatus for locating a first set of data using a global identifier and a virtual addressing data structure |
US5859971A (en) | 1996-02-15 | 1999-01-12 | International Business Machines Corp. | Differencing client/server communication system for use with CGI forms |
US5864852A (en) | 1996-04-26 | 1999-01-26 | Netscape Communications Corporation | Proxy server caching mechanism that provides a file directory structure and a mapping mechanism within the file directory structure |
US5905999A (en) | 1996-04-29 | 1999-05-18 | International Business Machines Corporation | Cache sub-array arbitration |
US5935213A (en) * | 1996-05-02 | 1999-08-10 | Fore Systems, Inc. | System and method for generating explicit rate value information for flow control in ATAM network |
US5896506A (en) | 1996-05-31 | 1999-04-20 | International Business Machines Corporation | Distributed storage management system having a cache server and method therefor |
US5918013A (en) | 1996-06-03 | 1999-06-29 | Webtv Networks, Inc. | Method of transcoding documents in a network environment using a proxy server |
US5870769A (en) | 1996-06-07 | 1999-02-09 | At&T Corp. | Internet access system and method with active link status indicators |
US5864837A (en) | 1996-06-12 | 1999-01-26 | Unisys Corporation | Methods and apparatus for efficient caching in a distributed environment |
US6209020B1 (en) * | 1996-09-20 | 2001-03-27 | Nortel Networks Limited | Distributed pipeline memory architecture for a computer system with even and odd pids |
US5892909A (en) | 1996-09-27 | 1999-04-06 | Diffusion, Inc. | Intranet-based system with methods for co-active delivery of information to multiple users |
US5870765A (en) | 1996-10-09 | 1999-02-09 | Oracle Corporation | Database synchronizer |
US5931904A (en) | 1996-10-11 | 1999-08-03 | At&T Corp. | Method for reducing the delay between the time a data page is requested and the time the data page is displayed |
US5787470A (en) | 1996-10-18 | 1998-07-28 | At&T Corp | Inter-cache protocol for improved WEB performance |
US5884046A (en) | 1996-10-23 | 1999-03-16 | Pluris, Inc. | Apparatus and method for sharing data and routing messages between a plurality of workstations in a local area network |
US6012126A (en) * | 1996-10-29 | 2000-01-04 | International Business Machines Corporation | System and method for caching objects of non-uniform size using multiple LRU stacks partitions into a range of sizes |
US5852717A (en) | 1996-11-20 | 1998-12-22 | Shiva Corporation | Performance optimizations for computer networks utilizing HTTP |
US6026474A (en) | 1996-11-22 | 2000-02-15 | Mangosoft Corporation | Shared client-side web caching using globally addressable memory |
US6098096A (en) | 1996-12-09 | 2000-08-01 | Sun Microsystems, Inc. | Method and apparatus for dynamic cache preloading across a network |
US5915253A (en) * | 1996-12-13 | 1999-06-22 | Novell, Inc. | Method and system for implementing objects in a storage system |
US5913033A (en) | 1996-12-20 | 1999-06-15 | International Business Machines Corporation | Apparatus and method for retrieving information using standard objects |
US5898833A (en) | 1996-12-31 | 1999-04-27 | Intel Corporation | Method and apparatus for increasing the effective bandwidth of video sequences transmitted over a network by using cached data |
US5961602A (en) | 1997-02-10 | 1999-10-05 | International Business Machines Corporation | Method for optimizing off-peak caching of web data |
US5978848A (en) * | 1997-03-14 | 1999-11-02 | International Business Machines Corporation | Web browser method and system for backgrounding a link access during slow link access time periods |
US5878218A (en) | 1997-03-17 | 1999-03-02 | International Business Machines Corporation | Method and system for creating and utilizing common caches for internetworks |
US5933849A (en) | 1997-04-10 | 1999-08-03 | At&T Corp | Scalable distributed caching system and method |
US5878223A (en) | 1997-05-07 | 1999-03-02 | International Business Machines Corporation | System and method for predictive caching of information pages |
US5884097A (en) * | 1997-05-17 | 1999-03-16 | Intertop Corporation | Data structure and methods for defining and using attribute data blocks to instantiate objects and describe changes to objects |
US5887151A (en) | 1997-07-10 | 1999-03-23 | Emc Corporation | Method and apparatus for performing a modified prefetch which sends a list identifying a plurality of data blocks |
US6223256B1 (en) * | 1997-07-22 | 2001-04-24 | Hewlett-Packard Company | Computer cache memory with classes and dynamic selection of replacement algorithms |
US5950205A (en) | 1997-09-25 | 1999-09-07 | Cisco Technology, Inc. | Data transmission over the internet using a cache memory file system |
US6085193A (en) | 1997-09-29 | 2000-07-04 | International Business Machines Corporation | Method and system for dynamically prefetching information via a server hierarchy |
US6009466A (en) * | 1997-10-31 | 1999-12-28 | International Business Machines Corporation | Network management system for enabling a user to configure a network of storage devices via a graphical user interface |
US6016512A (en) | 1997-11-20 | 2000-01-18 | Telcordia Technologies, Inc. | Enhanced domain name service using a most frequently used domain names table and a validity code table |
US6014671A (en) | 1998-04-14 | 2000-01-11 | International Business Machines Corporation | Interactive retrieval and caching of multi-dimensional data using view elements |
-
1998
- 1998-06-08 US US09/093,533 patent/US7103794B2/en not_active Expired - Lifetime
-
2002
- 2002-07-31 US US10/209,957 patent/US20030041280A1/en not_active Abandoned
-
2006
- 2006-07-31 US US11/461,320 patent/US7539818B2/en not_active Expired - Fee Related
Cited By (82)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6654784B1 (en) * | 2000-01-14 | 2003-11-25 | Nexaweb Technologies, Inc | Computing architecture |
US7444662B2 (en) * | 2001-06-28 | 2008-10-28 | Emc Corporation | Video file server cache management using movie ratings for reservation of memory and bandwidth resources |
US20030005457A1 (en) * | 2001-06-28 | 2003-01-02 | Sorin Faibish | Video file server cache management using movie ratings for reservation of memory and bandwidth resources |
US7640547B2 (en) | 2002-02-08 | 2009-12-29 | Jpmorgan Chase & Co. | System and method for allocating computing resources of a distributed computing system |
US20040015968A1 (en) * | 2002-02-08 | 2004-01-22 | Steven Neiman | System architecture for distributed computing and method of using the system |
US7376693B2 (en) | 2002-02-08 | 2008-05-20 | Jp Morgan Chase & Company | System architecture for distributed computing and method of using the system |
US7590983B2 (en) | 2002-02-08 | 2009-09-15 | Jpmorgan Chase & Co. | System for allocating computing resources of distributed computer system with transaction manager |
US7243121B2 (en) | 2002-02-08 | 2007-07-10 | Jp Morgan Chase & Co. | System and method for dividing computations |
US20070124731A1 (en) * | 2002-02-08 | 2007-05-31 | Jp Morgan Chase & Co. | System architecture for distributed computing |
US20060031842A1 (en) * | 2002-02-08 | 2006-02-09 | Steven Neiman | System and method for dividing computations |
US7103628B2 (en) | 2002-06-20 | 2006-09-05 | Jp Morgan Chase & Co. | System and method for dividing computations |
US20030237084A1 (en) * | 2002-06-20 | 2003-12-25 | Steven Neiman | System and method for dividing computations |
US6895472B2 (en) * | 2002-06-21 | 2005-05-17 | Jp Morgan & Chase | System and method for caching results |
US20080034160A1 (en) * | 2002-06-21 | 2008-02-07 | Jp Morgan Chase & Co. | System and method for caching results |
US20030236848A1 (en) * | 2002-06-21 | 2003-12-25 | Steven Neiman | System and method for caching results |
US7555606B2 (en) | 2002-06-21 | 2009-06-30 | Jp Morgan Chase & Co. | System and method for caching results |
US20050138291A1 (en) * | 2002-06-21 | 2005-06-23 | Steven Neiman | System and method for caching results |
US7240158B2 (en) * | 2002-06-21 | 2007-07-03 | Jp Morgan Chase & Co. | System and method for caching results |
US20080168145A1 (en) * | 2002-07-16 | 2008-07-10 | Brian Wilson | Active E-mail Filter with Challenge-Response |
US8396926B1 (en) | 2002-07-16 | 2013-03-12 | Sonicwall, Inc. | Message challenge response |
US8990312B2 (en) | 2002-07-16 | 2015-03-24 | Sonicwall, Inc. | Active e-mail filter with challenge-response |
US8924484B2 (en) | 2002-07-16 | 2014-12-30 | Sonicwall, Inc. | Active e-mail filter with challenge-response |
US9674126B2 (en) | 2002-07-16 | 2017-06-06 | Sonicwall Inc. | Efficient use of resources in message classification |
US9503406B2 (en) | 2002-07-16 | 2016-11-22 | Dell Software Inc. | Active e-mail filter with challenge-response |
US9021039B2 (en) | 2002-07-16 | 2015-04-28 | Sonicwall, Inc. | Message challenge response |
US9215198B2 (en) | 2002-07-16 | 2015-12-15 | Dell Software Inc. | Efficient use of resources in message classification |
US8732256B2 (en) | 2002-07-16 | 2014-05-20 | Sonicwall, Inc. | Message challenge response |
US8296382B2 (en) | 2002-07-16 | 2012-10-23 | Sonicwall, Inc. | Efficient use of resources in message classification |
US9313158B2 (en) | 2002-07-16 | 2016-04-12 | Dell Software Inc. | Message challenge response |
US7921204B2 (en) | 2002-07-16 | 2011-04-05 | Sonicwall, Inc. | Message testing based on a determinate message classification and minimized resource consumption |
US20040015554A1 (en) * | 2002-07-16 | 2004-01-22 | Brian Wilson | Active e-mail filter with challenge-response |
US7539726B1 (en) | 2002-07-16 | 2009-05-26 | Sonicwall, Inc. | Message testing |
US6968425B2 (en) | 2002-12-19 | 2005-11-22 | Hitachi, Ltd. | Computer systems, disk systems, and method for controlling disk cache |
US20040123068A1 (en) * | 2002-12-19 | 2004-06-24 | Akiyoshi Hashimoto | Computer systems, disk systems, and method for controlling disk cache |
US20110184976A1 (en) * | 2003-02-20 | 2011-07-28 | Wilson Brian K | Using Distinguishing Properties to Classify Messages |
US20040167968A1 (en) * | 2003-02-20 | 2004-08-26 | Mailfrontier, Inc. | Using distinguishing properties to classify messages |
US20100017488A1 (en) * | 2003-02-20 | 2010-01-21 | Oliver Jonathan J | Message Classification Using Allowed Items |
US7882189B2 (en) | 2003-02-20 | 2011-02-01 | Sonicwall, Inc. | Using distinguishing properties to classify messages |
US10785176B2 (en) | 2003-02-20 | 2020-09-22 | Sonicwall Inc. | Method and apparatus for classifying electronic messages |
US10042919B2 (en) | 2003-02-20 | 2018-08-07 | Sonicwall Inc. | Using distinguishing properties to classify messages |
US10027611B2 (en) | 2003-02-20 | 2018-07-17 | Sonicwall Inc. | Method and apparatus for classifying electronic messages |
US7562122B2 (en) | 2003-02-20 | 2009-07-14 | Sonicwall, Inc. | Message classification using allowed items |
US8108477B2 (en) * | 2003-02-20 | 2012-01-31 | Sonicwall, Inc. | Message classification using legitimate contact points |
US8112486B2 (en) | 2003-02-20 | 2012-02-07 | Sonicwall, Inc. | Signature generation using message summaries |
US9524334B2 (en) | 2003-02-20 | 2016-12-20 | Dell Software Inc. | Using distinguishing properties to classify messages |
US8266215B2 (en) | 2003-02-20 | 2012-09-11 | Sonicwall, Inc. | Using distinguishing properties to classify messages |
US8271603B2 (en) | 2003-02-20 | 2012-09-18 | Sonicwall, Inc. | Diminishing false positive classifications of unsolicited electronic-mail |
US7406502B1 (en) * | 2003-02-20 | 2008-07-29 | Sonicwall, Inc. | Method and system for classifying a message based on canonical equivalent of acceptable items included in the message |
US20060235934A1 (en) * | 2003-02-20 | 2006-10-19 | Mailfrontier, Inc. | Diminishing false positive classifications of unsolicited electronic-mail |
US9325649B2 (en) | 2003-02-20 | 2016-04-26 | Dell Software Inc. | Signature generation using message summaries |
US9189516B2 (en) | 2003-02-20 | 2015-11-17 | Dell Software Inc. | Using distinguishing properties to classify messages |
US8463861B2 (en) | 2003-02-20 | 2013-06-11 | Sonicwall, Inc. | Message classification using legitimate contact points |
US8484301B2 (en) | 2003-02-20 | 2013-07-09 | Sonicwall, Inc. | Using distinguishing properties to classify messages |
US8688794B2 (en) | 2003-02-20 | 2014-04-01 | Sonicwall, Inc. | Signature generation using message summaries |
US20080021969A1 (en) * | 2003-02-20 | 2008-01-24 | Sonicwall, Inc. | Signature generation using message summaries |
US7299261B1 (en) | 2003-02-20 | 2007-11-20 | Mailfrontier, Inc. A Wholly Owned Subsidiary Of Sonicwall, Inc. | Message classification using a summary |
US8935348B2 (en) | 2003-02-20 | 2015-01-13 | Sonicwall, Inc. | Message classification using legitimate contact points |
US7908330B2 (en) | 2003-03-11 | 2011-03-15 | Sonicwall, Inc. | Message auditing |
US7188222B2 (en) | 2003-09-29 | 2007-03-06 | International Business Machines Corporation | Method, system, and program for mirroring data among storage sites |
KR100692999B1 (en) | 2003-12-22 | 2007-03-12 | 레노보 (싱가포르) 피티이. 엘티디. | Key cache management through multiple localities |
US20080183970A1 (en) * | 2005-03-16 | 2008-07-31 | Amadeus S.A.S. | Method and System For Maintaining Consistency of a Cache Memory Accessible by Multiple Independent Processes |
US7971000B2 (en) * | 2005-03-16 | 2011-06-28 | Amadeus S.A.S. | Method and system for maintaining consistency of a cache memory accessible by multiple independent processes |
US20070260922A1 (en) * | 2006-04-20 | 2007-11-08 | Inventec Corporation | Method of protecting data in cache memory of storage system |
US7360016B2 (en) * | 2006-04-20 | 2008-04-15 | Inventec Corporation | Method of protecting data in cache memory of storage system |
TWI386850B (en) * | 2006-06-29 | 2013-02-21 | Qualcomm Inc | Methods and apparatus for proactive branch target address cache management |
US20120042155A1 (en) * | 2006-06-29 | 2012-02-16 | Qualcomm Incorporated | Methods and apparatus for proactive branch target address cache management |
US8782383B2 (en) * | 2006-06-29 | 2014-07-15 | Qualcomm Incorporated | System and method for selectively managing a branch target address cache of a multiple-stage predictor |
US8935517B2 (en) * | 2006-06-29 | 2015-01-13 | Qualcomm Incorporated | System and method for selectively managing a branch target address cache of a multiple-stage predictor |
US20080005543A1 (en) * | 2006-06-29 | 2008-01-03 | Bohuslav Rychlik | Methods and Apparatus for Proactive Branch Target Address Cache Management |
EP1967965A1 (en) | 2007-03-05 | 2008-09-10 | Avaya GmbH & Co. KG | Method for acquiring information from a database |
US20130117252A1 (en) * | 2011-11-09 | 2013-05-09 | Google Inc. | Large-scale real-time fetch service |
US9052942B1 (en) * | 2012-12-14 | 2015-06-09 | Amazon Technologies, Inc. | Storage object deletion job management |
US9736212B2 (en) | 2014-06-26 | 2017-08-15 | Google Inc. | Optimized browser rendering process |
US9984130B2 (en) | 2014-06-26 | 2018-05-29 | Google Llc | Batch-optimized render and fetch architecture utilizing a virtual clock |
US10284623B2 (en) | 2014-06-26 | 2019-05-07 | Google Llc | Optimized browser rendering service |
US10713330B2 (en) | 2014-06-26 | 2020-07-14 | Google Llc | Optimized browser render process |
US9785720B2 (en) | 2014-06-26 | 2017-10-10 | Google Inc. | Script optimized browser rendering process |
US11328114B2 (en) | 2014-06-26 | 2022-05-10 | Google Llc | Batch-optimized render and fetch architecture |
US10691696B2 (en) * | 2017-01-31 | 2020-06-23 | Salesforce.Com, Inc. | Key-value storage using a skip list |
US11386065B2 (en) | 2017-01-31 | 2022-07-12 | Salesforce.Com, Inc. | Database concurrency control through hash-bucket latching |
US11544271B2 (en) | 2017-01-31 | 2023-01-03 | Salesforce.Com, Inc. | Key-value storage using a skip list |
US12013860B2 (en) | 2017-01-31 | 2024-06-18 | Salesforce, Inc. | Key-value storage using a skip list |
Also Published As
Publication number | Publication date |
---|---|
US7539818B2 (en) | 2009-05-26 |
US20070050662A1 (en) | 2007-03-01 |
US7103794B2 (en) | 2006-09-05 |
US20020004917A1 (en) | 2002-01-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7103794B2 (en) | Network object cache engine | |
EP1082651B1 (en) | Incremental updating | |
US6883068B2 (en) | Methods and apparatus for implementing a chche replacement scheme | |
US7269608B2 (en) | Apparatus and methods for caching objects using main memory and persistent memory | |
US5896506A (en) | Distributed storage management system having a cache server and method therefor | |
US6292880B1 (en) | Alias-free content-indexed object cache | |
US6128627A (en) | Consistent data storage in an object cache | |
US7681076B1 (en) | Method and an apparatus to perform fast log replay | |
US6289358B1 (en) | Delivering alternate versions of objects from an object cache | |
US6209003B1 (en) | Garbage collection in an object cache | |
US6128623A (en) | High performance object cache | |
US6542967B1 (en) | Cache object store | |
US7860907B2 (en) | Data processing | |
US6915307B1 (en) | High performance object cache | |
US6349311B1 (en) | Storage of reverse delta updates | |
US20020165911A1 (en) | File system for caching web proxies | |
EP1902394B1 (en) | Moving data from file on storage volume to alternate location to free space | |
US8095678B2 (en) | Data processing | |
US8090925B2 (en) | Storing data streams in memory based on upper and lower stream size thresholds | |
US20020078170A1 (en) | Method and system for minimizing network bandwidth bottlenecks | |
WO2007011576A2 (en) | Moving data from file on storage volume to alternate location to free space | |
US7249219B1 (en) | Method and apparatus to improve buffer cache hit rate | |
EP0988598A1 (en) | Network object cache engine | |
US20020184441A1 (en) | Apparatus and methods for caching objects using main memory and persistent memory | |
KR100399502B1 (en) | Mass bibliography searching service system |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
AS | Assignment |
Owner name: BLUE COAT SYSTEMS, INC., CALIFORNIA Free format text: CHANGE OF NAME;ASSIGNOR:CACHEFLOW, INC.;REEL/FRAME:013081/0212 Effective date: 20020820 |
|
STCB | Information on status: application discontinuation |
Free format text: EXPRESSLY ABANDONED -- DURING EXAMINATION |