Technologies for predictive file caching and synchronization

Technologies for predictive caching include a computing device to receive sensor data generated by one or more sensors of the computing device and determine a device context of the computing device based on the sensor data. Based on the device context, the computing device determines a file to cache that has similar characteristics to another file recently accessed by a user of the computing device. The computing device includes a file cache with a first partition to store files identified to have similar characteristics to files recently accessed by a user and a second partition to store files identified based on access patterns of the user. The computing device stores the determined file to the first partition.

BACKGROUND

The use of “lightweight” computing devices online and offline to perform significant amounts of work (e.g., editing documents, drafting emails, listening to music, etc.) has proliferated in recent years. Such offline tasks often rely heavily on file caching, which involves locally storing files to reduce network overhead and delay in file retrieval. File caching is predominantly used by web servers, for example, to reduce network bandwidth usage, latency and server usage. Traditional caching schemes often involve storing and deleting small amounts of content in a non-distinguishing manner. As a result, computing devices employing traditional caching techniques often cache content that is never used again by the user and/or prematurely delete content that is still needed (e.g., because a predetermined period for storing the content has expired).

DETAILED DESCRIPTION OF THE DRAWINGS

Referring now toFIG. 1, a system100for file caching and synchronization includes a computing device102, a network104, and a cloud server106. As described in detail below, in the illustrative embodiment, the computing device102may determine a device context of the computing device102based on generated sensor data and predictively cache files (e.g., from the cloud server106) for subsequent use by the computing device102. For example, in some embodiments, the computing device102may identify and cache files that are similar (e.g., include similar characteristics) to other files recently accessed by a user of the computing device102. Additionally, as described below, the computing device102may synchronize the files across the system100by storing modified cache files to the cloud server106. It should be appreciated that the file caching and synchronization techniques described herein may more effectively cache files than traditional techniques while, for example, reducing storage requirements (e.g., by more intelligently identifying files to cache) and addressing various security concerns (e.g., by reducing the amount of content cached to a device at a particular point in time). Further, in some embodiments, the illustrative techniques may improve the cache hit rate of a particular computing device.

The illustrative computing device102may be embodied as any type of computing device capable of performing the functions described herein. For example, the computing device102may be embodied as a laptop computer, tablet computer, notebook, netbook, Ultrabook™, cellular phone, smartphone, wearable computing device, personal digital assistant, mobile Internet device, Hybrid device, desktop computer, server, router, switch, and/or any other computing/communication device. As shown inFIG. 1, the illustrative computing device102includes a processor110, an input/output (“I/O”) subsystem112, a memory114, a data storage116, a communication circuitry118, one or more sensors120, and one or more peripheral devices122. Of course, the computing device102may include other or additional components, such as those commonly found in a typical computing device (e.g., various input/output devices and/or other components), in other embodiments. Additionally, in some embodiments, one or more of the illustrative components may be incorporated in, or otherwise form a portion of, another component. For example, the memory114, or portions thereof, may be incorporated in the processor110in some embodiments.

The processor110may be embodied as any type of processor capable of performing the functions described herein. For example, the processor110may be embodied as a single or multi-core processor(s), digital signal processor, microcontroller, or other processor or processing/controlling circuit. Similarly, the memory114may be embodied as any type of volatile or non-volatile memory or data storage capable of performing the functions described herein. In operation, the memory114may store various data and software used during operation of the computing device102such as operating systems, applications, programs, libraries, and drivers. The memory114is communicatively coupled to the processor110via the I/O subsystem112, which may be embodied as circuitry and/or components to facilitate input/output operations with the processor110, the memory114, and other components of the computing device102. For example, the I/O subsystem112may be embodied as, or otherwise include, memory controller hubs, input/output control hubs, firmware devices, communication links (i.e., point-to-point links, bus links, wires, cables, light guides, printed circuit board traces, etc.) and/or other components and subsystems to facilitate the input/output operations. In some embodiments, the I/O subsystem112may form a portion of a system-on-a-chip (SoC) and be incorporated, along with the processor110, the memory114, and other components of the computing device102, on a single integrated circuit chip.

The data storage116may be embodied as any type of device or devices configured for short-term or long-term storage of data such as, for example, memory devices and circuits, memory cards, hard disk drives, solid-state drives, or other data storage devices. The data storage116and/or the memory114may store various data during operation of the computing device102as described herein. For example, in the illustrative embodiment, the data storage116includes a file cache124and one or more cache policies126. The file cache124is configured to store cached files for the computing device102as described herein. In some embodiments, the file cache124may form a portion of the data storage116and/or the memory114. It should be appreciated that the files utilized by the system100may be stored to a file namespace600shown inFIG. 6. As shown, the illustrative file namespace600includes the file cache124and cloud files602(e.g., files stored on the cloud server106or elsewhere in a cloud computing environment). Additionally, the file cache124in the illustrative file namespace600includes two partitions: a partition604configured to store files identified based on access patterns of a user of the computing device102and a partition606configured to store files identified to be similar (e.g., have similar characteristics) to files recently accessed by the user of the computing device102. It should be appreciated that, in some embodiments, each of the partitions604,606may be distributed across the memory114and/or the data storage116. In some embodiments, the partitions604,606may be determine dynamically such that the amount of storage space used by each of the partitions604,606may differ and/or vary over time.

The cache policies126include rules for caching files by the computing device102. Depending on the particular embodiment, the cache policies126may include a user cache policy128(e.g., including user-defined rules for caching files) and/or an enterprise cache policy130(e.g., including rules for caching files in an enterprise environment of the computing device102). The cache policies126may include rules related to device type, capacity, available storage, network connectivity, location, time, user context, environment, and/or other characteristics. In some embodiments, the rules may identify files that “must” always be cached and/or files that “must not” ever be cached. For example, the cache policies126may include a rule that identifies a particular location as unsecure such that one or more cached files should be deleted if the computing device102is determined to be at the particular location.

The communication circuitry118may be embodied as any communication circuit, device, or collection thereof, capable of enabling communications between the computing device102and other remote devices (e.g., the cloud server106) over the network104. The communication circuitry118may be configured to use any one or more communication technologies (e.g., wireless or wired communications) and associated protocols (e.g., Ethernet, Bluetooth®, Wi-Fi®, WiMAX, LTE, 5G, etc.) to effect such communication.

The sensors120may be embodied as any sensors configured to generate data/signals indicative of an environment or context of the computing device102and/or user of the computing device102. In various embodiments, the sensors120may be embodied as, or otherwise include, for example, inertial sensors (e.g., an inertial measurement unit), position sensors (e.g., GPS sensors/systems), proximity sensors, optical sensors, light sensors, audio sensors, temperature sensors, motion sensors, piezoelectric sensors, cameras, and/or other types of sensors. Of course, the computing device102may also include components and/or devices configured to facilitate the use of the sensor(s)120. Depending on the particular embodiment, the sensors120may include hardware sensors and/or software sensors (e.g., to determine calendar events and other application data).

The peripheral devices122may include any number of additional peripheral or interface devices, such as speakers, microphones, additional storage devices, and so forth. The particular devices included in the peripheral devices122may depend on, for example, the type and/or intended use of the computing device102.

The network104may be embodied as any type of communication network capable of facilitating communication between the computing device102and remote devices (e.g., the cloud server106). As such, the network104may include one or more networks, routers, switches, computers, and/or other intervening devices. For example, the network104may be embodied as or otherwise include one or more cellular networks, telephone networks, local or wide area networks, publicly available global networks (e.g., the Internet), an ad hoc network, or any combination thereof.

The cloud server106may be embodied as any type of computing device capable of performing the functions described herein. For example, in some embodiments, the cloud server106may be similar to the computing device102as described above. That is, the cloud server106may be embodied as a server, a rack-mounted server, a blade server, desktop computer, laptop computer, tablet computer, notebook, netbook, Ultrabook™, cellular phone, smartphone, personal digital assistant, mobile Internet device, wearable computing device, Hybrid device, and/or any other computing/communication device. Further, the cloud server106may include components similar to those of the computing device102discussed above. The description of those components of the computing device102is equally applicable to the description of components of the cloud server106and is not repeated herein for clarity of the description. Further, it should be appreciated that the cloud server106may include other components, sub-components, and devices commonly found in a computing device, which are not discussed above in reference to the computing device102and not discussed herein for clarity of the description.

Referring now toFIG. 2, in use, the computing device102establishes an environment200for predictive file caching and synchronization. The illustrative environment200of the computing device102includes a context determination module202, a caching module204, a file synchronization module206, a user interface module208, and a communication module210. The various modules of the environment200may be embodied as hardware, software, firmware, or a combination thereof. For example, the various modules, logic, and other components of the environment200may form a portion of, or otherwise be established by, the processor110or other hardware components of the computing device102. As such, in some embodiments, one or more of the modules of the environment200may be embodied as a circuit or collection of electrical devices (e.g., a context determination circuit, a caching circuit, a file synchronization circuit, a user interface circuit, and/or a communication circuit). Additionally, in some embodiments, one or more of the illustrative modules may form a portion of another module and/or one or more of the illustrative modules may be independent of one another.

The context determination module202is configured to receive sensor data generated by the sensors120, analyze the received sensor data, and determine a context of the computing device102. For example, the context determination module202may determine the location of the computing device102, the network connectivity state, events on the user's calendar, network bandwidth, available storage (e.g., in the memory114and/or the data storage116), the current time, device capabilities, executing applications, and/or other characteristics of the computing device102.

The caching module204is configured to determine files to store to and/or delete from the file cache124(e.g., based on the context of the computing device102and/or the cache policies126). In doing so, the caching module204may identify files based on access patterns of a user of the computing device102. For example, in some embodiments, the caching module204may identify a predetermined number of files most recently accessed by the user. Further, in the illustrative embodiment, the caching module204identifies files to store and/or delete from the file cache124that are similar to (e.g., have similar characteristics) other files recently (e.g., currently) accessed by the user. It should be appreciated that the caching module204may determine “similarity” between various files in any suitable way. For example, in some embodiments, files having common file names, common file types, and/or common keywords in the files may be considered to be “similar” or related to one another.

The file synchronization module206is configured to retrieve files to cache from the cloud server106and transmit updated/modified files to the cloud server106to ensure file synchronization within the system100. For example, the file synchronization module206may retrieve a file from the cloud server106and store the file to the file cache124. The user may access the file, for example, while the computing device102is offline (e.g., disconnected from the network104) and modify the file. As such, the file synchronization module206may update the cloud server106with the modified file (e.g., when the computing device102is back online).

The user interface module208permits a user of the computing device102to interact with the computing device102. For example, as described above, in some embodiments, the computing device102may include a user cache policy128. Further, in some embodiments, the user may override one or more rules of an enterprise cache policy130. As such, the user interface module208may interpret and process inputs provided by the user.

The communication module210handles the communication between the computing device102and other computing devices of the system100(e.g., the cloud server106). For example, as described herein, the computing device102may retrieve files from and store files to the cloud server106in order to perform predictive file caching and synchronization.

Referring now toFIGS. 3-4, in use, the computing device102may execute a method300for file caching and synchronization. The illustrative method300begins with block302ofFIG. 3in which the computing device102determines whether to perform predictive caching. If so, in block304, the computing device102receives sensor data generated by the sensors120. As described above, the sensor120are configured to generate data/signals indicative of an environment or context of the computing device102and/or user of the computing device102. In particular, in block306, the computing device102may receive hardware sensor data generated by one or more hardware sensors of the computing device102. For example, the computing device102may receive data indicative of a location of the computing device102, a hardware state of one or more components of the computing device102, a physical environment of the computing device102, and/or other features, parameters, and characteristics suitable for performing the functions described herein. Further, in block308, the computing device102may receive sensor data from one or more software applications and/or other software sensor data. For example, the computing device102may receive data indicative of an execution state of a particular software application, results of an application execution, and/or other software data (e.g., calendar events) suitable for performing the functions described herein.

In block310, the computing device102determines the context of the computing device102based on the received sensor data. It should be appreciated that the computing device102may analyze the sensor data of the computing device102using any suitable technique, algorithm, and/or mechanism suitable for determining contextual information based on sensor data. Depending on the particular embodiment, the context and contextual parameters utilized and/or identified by the computing device102may differ. For example, in various embodiments, the computing device102may determine the location of the computing device102(e.g., based on GPS data, imaging techniques, and/or other suitable algorithms), the network connectivity state of the computing device102(e.g., whether the computing device102is communicatively coupled to the network104and/or the cloud server106at a particular point in time), upcoming events the user is to attend (e.g., based on the user's virtual calendar), available network bandwidth, available storage, the current time, device capabilities (e.g., maximum processing capacity), currently executing applications, and/or other characteristics and contextual parameters of the computing device102. In some embodiments, the computing device102may generate a contextual profile of the computing device102and/or a particular user of the computing device102based on the determined context.

In block312, the computing device102retrieves one or more cache policies126of the computing device102and/or of the user of the computing device102. For example, in block314, the computing device102may retrieve a user cache policy128(i.e., a user-defined cache policy) for a particular user of the computing device102(e.g., the current user). Further, in block316, the computing device102may retrieve an enterprise cache policy130in some embodiments. As described above, the cache policies126may include rules for caching particular files based on one or more parameters of a file, contextual data (e.g., of the computing device102), and/or other suitable information. For example, in some embodiments, the cache policies126may include rules that are based on device type, capacity, available storage, network connectivity, location, time, user context, environment, and/or other characteristics.

In block318, the computing device102determines which files to cache (e.g., to store to the file cache124and/or delete from the file cache124) based on the determined context of the computing device102and/or the cache policies126. To do so, the computing device102may execute a method500as shown inFIG. 5. The illustrative method500begins with block502in which the computing device102determines which files to cache based on access patterns. For example, the computing device102may identify a predetermined number of files most recently accessed by the computing device102or a particular user of the computing device102, which may be stored for a predetermined amount of time.

In block504, the computing device102determines which files to cache based on predictive caching techniques. For example, in block506, the computing device102may identifies files that are similar to files recently accessed by the computing device102or, more specifically, a particular user of the computing device102. By doing so, in some embodiments, the computing device102may predict a user's needs based on the determined context. As indicated above, the computing device102may determine “similarity” between various files in any suitable way. For example, the computing device102may identify files (e.g., files stored in the cloud server106) that have file names, file types, keywords (e.g., in the file itself), file size, timestamp(s), and/or other suitable file characteristics or metadata that match or nearly match corresponding characteristics of files recently/currently accessed by the computing device102or a particular user. For example, if the computing device102determines that a user is digitally preparing taxes (e.g., via tax preparation software), the computing device102may identify files for caching to the file cache124that are related to the preparation of the user's taxes (e.g., the tax files for the preceding year). In another embodiment, the computing device102may identify roadmap files, project plans, presentations, journal articles, and/or other files related to work on particular project. It should be appreciated that the file characteristics used to determine whether two files are similar may be embodied as any characteristic(s) or feature(s) of the associated files that may be analyzed and compared to determine whether the particular characteristic(s) of the individual files match within a reference variance of each other. For example, the file characteristics may include access date/time, related subject matter, content, and/or other suitable file characteristics.

Further, in block508, the computing device102may identify files related to one or more upcoming events/meetings identified on a user's virtual calendar. For example, the computing device102may determine that the user will be flying (e.g., offline) to an out-of-town meeting with investors and identify files for caching related to that meeting (e.g., to enable the user to work offline such as during flight). As such, it will be appreciated that, in some embodiments, the computing device102may identify files to cache that have not recently (or have never) been accessed by the user of the computing device102.

In block510, the computing device102may determines which files to delete, if any, from the file cache124. In doing so, in block512, the computing device102may identify files to delete based on access patterns. For example, the computing device102may identify one or more least recently accessed files in the partition604or otherwise determine that one or more files should be deleted based on access patterns of the computing device102or the user. In block514, the computing device102may identify files to delete based on predictive caching. For example, the computing device102may determine (e.g., based on the device context and the cache policies126) that the computing device102is currently in an unsecure location and, therefore, identify one or more confidential files for deletion from the file cache124for security purposes. Further, in some embodiments, in block516, the computing device102may identify files currently stored in the file cache124that should be deleted to make “room” for or be overwritten by the newly identified files to cache. Of course, in some embodiments, the computing device102may store the newly identified/determined files to the file cache124without deleting other files already stored in the file cache124. Further, in embodiments in which the file cache124is dynamic as described above, the computing device102may delete/overwrite one or more files in one partition604,606to make “room” for one or more files to be stored to the other partition604,606.

Returning toFIG. 3, it should be appreciated that the computing device102may utilize any suitable technique, algorithm, and/or mechanism for determining which files to cache (i.e., which files to store to the file cache124and/or to delete from the file cache124) based on the device context and/or the cache policies126. The method300advances to block320ofFIG. 4in which the computing device102updates the file cache124. In doing so, in block322, the computing device102may retrieve the files identified for caching from the cloud server106and store those files to the file cache124(e.g., to the corresponding partition604,606of the file cache124). Further, in block324, the computing device102may delete the files identified for deletion from the file cache124. In some embodiments, the computing device102may do so by writing all zeros, writing all ones, or writing a random bit pattern to the memory location at which the file identified for deletion is stored. Of course, as described above, in other embodiments, the computing device102may alternatively permit such files to be directly overwritten by one or more of the files identified for caching.

As described above, in some embodiments, the illustrative techniques allow the computing device102to ensure file synchronization with the cloud server106. As such, in block326, the computing device102determines whether one or more files stored in the file cache124have been modified since being retrieved from the cloud server106. If so, the computing device102determines whether the computing device102is offline (e.g., disconnected from the cloud server106) in block328. If the computing device102is offline or otherwise unable to communicate with the cloud server106, the method300returns to block328in which the computing device102again determines whether the computing device102is offline. In other words, in such embodiments, the method300waits to proceed until the computing device102is again communicatively coupled to the cloud server106. Of course, the computing device102may attempt to reconnect to the cloud server106periodically, repeatedly, and/or in response to user inputs or other conditions. If the computing device102determines, in block328, that it is communicatively coupled to the cloud server106, the computing device102transmits the modified file(s) to the cloud server106for file synchronization in block330.

The method300returns to block304ofFIG. 3in which the computing device102again receives sensor data of the computing device102in order to determine the device context. Similarly, if the computing device102determines, in block330, that no file stored in the file cache124has been modified (i.e., all files are synchronized), the method300also returns to block304ofFIG. 3to receive sensor data. Of course, it should be appreciated that, in some embodiments, if the computing device102determines that is has been disconnected from the cloud server106, the method300may pause at any point until the computing device102has reconnected with the cloud server106.

EXAMPLES

Example 1 includes a computing device for predictive file caching, the computing device comprising a file cache that includes (i) a first partition to store files identified to have similar characteristics to files recently accessed by a user of the computing device and (ii) a second partition to store files identified based on access patterns of the user; a context determination module to (i) receive sensor data generated by one or more sensors of the computing device and (ii) determine a device context of the computing device based on the sensor data; and a caching module to (i) determine, based on the device context, a file to cache that has similar characteristics to another file recently accessed the user and (ii) store the determined file to the first partition of the file cache.

Example 2 includes the subject matter of Example 1, and wherein to receive the sensor data comprises to receive sensor data generated by one or more hardware sensors of the computing device.

Example 3 includes the subject matter of any of Examples 1 and 2, and wherein to receive the sensor data comprises to receive data from one or more software applications.

Example 4 includes the subject matter of any of Examples 1-3, and wherein to determine the file to cache comprises to determine the file to cache based on the device context and a cache policy defined by the user; and wherein the cache policy includes user-defined rules for caching files.

Example 5 includes the subject matter of any of Examples 1-4, and wherein to determine the file to cache comprises to determine the file to cache based on the device context and an enterprise cache policy; and wherein the enterprise cache policy includes rules for caching files in an enterprise environment of the computing device.

Example 6 includes the subject matter of any of Examples 1-5, and further including a file synchronization module to retrieve the file to cache from a cloud server.

Example 7 includes the subject matter of any of Examples 1-6, and wherein the file synchronization module is further to transmit the cached file to the cloud server in response to a determination that the file has been modified.

Example 8 includes the subject matter of any of Examples 1-7, and wherein the caching module is to determine a file to delete from the file cache based on the device context.

Example 9 includes the subject matter of any of Examples 1-8, and wherein to determine the file to delete from the cache file comprises to determine a file to delete from the second partition based on access patterns of the user.

Example 10 includes the subject matter of any of Examples 1-9, and wherein to determine the file to delete from the cache file comprises to determine a file to delete from the first partition.

Example 11 includes the subject matter of any of Examples 1-10, and wherein to determine the file to cache comprises to identify files that relate to an upcoming event indicated on a virtual calendar of the user.

Example 12 includes the subject matter of any of Examples 1-11, and wherein the characteristics include file metadata.

Example 13 includes the subject matter of any of Examples 1-12, and wherein the characteristics include at least one of a file name, a file type, a file size, a file timestamp, or a keyword in the file.

Example 14 includes a method for predictive filing caching by a computing device, the method comprising receiving, by the computing device, sensor data generated by one or more sensors of the computing device; determining, by the computing device, a device context of the computing device based on the sensor data; determining, by the computing device and based on the device context, a file to cache that has similar characteristics to another file recently accessed by a user of the computing device; and storing, by the computing device, the determined file to a first partition of a file cache of the computing device, wherein the file cache includes the first partition to store files identified to have similar characteristics to files recently accessed by the user and a second partition to store files identified based on access patterns of the user.

Example 15 includes the subject matter of Example 14, and wherein receiving the sensor data comprises receiving sensor data generated by one or more hardware sensors of the computing device.

Example 16 includes the subject matter of any of Examples 14 and 15, and wherein receiving the sensor data comprises receiving data from one or more software applications.

Example 17 includes the subject matter of any of Examples 14-16, and wherein determining the file to cache comprises determining the file to cache based on the device context and a cache policy defined by the user, wherein the cache policy includes user-defined rules for caching files.

Example 18 includes the subject matter of any of Examples 14-17, and wherein determining the file to cache comprises determining the file to cache based on the device context and an enterprise cache policy, wherein the enterprise cache policy includes rules for caching files in an enterprise environment of the computing device.

Example 19 includes the subject matter of any of Examples 14-18, and further including retrieving, by the computing device, the file to cache from a cloud server.

Example 20 includes the subject matter of any of Examples 14-19, and further including transmitting, by the computing device, the cached file to the cloud server in response to determining the file has been modified.

Example 21 includes the subject matter of any of Examples 14-20, and further including determining, by the computing device and based on the device context, a file to delete from the file cache.

Example 22 includes the subject matter of any of Examples 14-21, and wherein determining the file to delete from the cache file comprises determining a file to delete from the second partition based on access patterns of the user.

Example 23 includes the subject matter of any of Examples 14-22, and wherein determining the file to delete from the cache file comprises determining a file to delete from the first partition.

Example 24 includes the subject matter of any of Examples 14-23, and wherein determining the file to cache comprises identifying files relating to an upcoming event indicated on a virtual calendar of the user.

Example 25 includes the subject matter of any of Examples 14-24, and wherein the characteristics include file metadata.

Example 26 includes the subject matter of any of Examples 14-25, and wherein the characteristics include at least one of a file name, a file type, a file size, a file timestamp, or a keyword in the file.

Example 27 includes a computing device comprising a processor; and a memory having stored therein a plurality of instructions that when executed by the processor cause the computing device to perform the method of any of Examples 14-26.

Example 28 includes one or more machine readable storage media comprising a plurality of instructions stored thereon that in response to being executed result in a computing device performing the method of any of Examples 14-26.

Example 29 includes a computing device comprising means for performing the method of any of Examples 14-26.

Example 30 includes a computing device for predictive file caching, the computing device comprising means for receiving sensor data generated by one or more sensors of the computing device; means for determining a device context of the computing device based on the sensor data; means for determining, based on the device context, a file to cache that has similar characteristics to another file recently accessed by a user of the computing device; and means for storing the determined file to a first partition of a file cache of the computing device, wherein the file cache includes the first partition to store files identified to have similar characteristics to files recently accessed by the user and a second partition to store files identified based on access patterns of the user.

Example 31 includes the subject matter of Example 30, and wherein the means for receiving the sensor data comprises means for receiving sensor data generated by one or more hardware sensors of the computing device.

Example 32 includes the subject matter of any of Examples 30 and 31, and wherein the means for receiving the sensor data comprises means for receiving data from one or more software applications.

Example 33 includes the subject matter of any of Examples 30-32, and wherein the means for determining the file to cache comprises means for determining the file to cache based on the device context and a cache policy defined by the user, wherein the cache policy includes user-defined rules for caching files.

Example 34 includes the subject matter of any of Examples 30-33, and wherein the means for determining the file to cache comprises means for determining the file to cache based on the device context and an enterprise cache policy, wherein the enterprise cache policy includes rules for caching files in an enterprise environment of the computing device.

Example 35 includes the subject matter of any of Examples 30-34, and further including means for retrieving the file to cache from a cloud server.

Example 36 includes the subject matter of any of Examples 30-35, and further including means for transmitting the cached file to the cloud server in response to determining the file has been modified.

Example 37 includes the subject matter of any of Examples 30-36, and further including means for determining, based on the device context, a file to delete from the file cache.

Example 38 includes the subject matter of any of Examples 30-37, and wherein the means for determining the file to delete from the cache file comprises means for determining a file to delete from the second partition based on access patterns of the user.

Example 39 includes the subject matter of any of Examples 30-38, and wherein the means for determining the file to delete from the cache file comprises means for determining a file to delete from the first partition.

Example 40 includes the subject matter of any of Examples 30-39, and wherein the means for determining the file to cache comprises means for identifying files relating to an upcoming event indicated on a virtual calendar of the user.

Example 41 includes the subject matter of any of Examples 30-40, and wherein the characteristics include file metadata.

Example 42 includes the subject matter of any of Examples 30-41, and wherein the characteristics include at least one of a file name, a file type, a file size, a file timestamp, or a keyword in the file.