Method and system for partitioning directories

A method of partitioning directory. Accesses, e.g., shared/exclusive, and/or waiting requests, e.g., shared/exclusive, to access one or more files with a directory are monitored, e.g., incrementing/decrementing respective counters. The waiting requests are queued to be granted at a later time. The directory is determined to be primed for partitioning if a number of waiting requests to access the directory is greater than a threshold value of a plurality of heuristics and optionally further based on satisfying the condition for at least a programmable time threshold period. A trigger signal is automatically generated if the directory is primed for partitioning. The trigger signal causes a file system to partition the directory. It is appreciated that the plurality of heuristics is user programmable.

TECHNICAL FIELD

Embodiments of the present invention generally relate to computer systems that facilitate partitioning of directories.

BACKGROUND

Increased usage of computers and the Internet has led to an increase in sharing content, e.g., files within directories. For example, files within a directory may be accessed by one or more users, e.g., by an application, by a client, etc., simultaneously. As described below, shared access to a common directory may cause access contentions.

Any read operation on the directory (e.g., listing the contents of the directory, requesting the attributes of the directory, requesting a lookup for a specific item in the directory) requires that the entity performing the read operation has a shared access on the directory. Merely reading a file in the directory does not fall in this category. Moreover, any update operation on the directory (e.g., creating a new entry in the directory, removing an entry from the directory, updating the attributes of the directory, moving an entry from the directory to some other directory) requires that the entity performing the update operation has an exclusive access on the directory. Merely updating a file within the directory does not fall in the above category.

Unfortunately, when one entity has a shared access on the directory, no other can have an exclusive access on the directory. But others can have shared access on the directory. Moreover, when one entity has an exclusive access on the directory, no other can have exclusive or shared access on the directory. All of the above scenarios lead to serialization of accesses to the directory. As a result of serialization, access requests to the directory are queued until they can be completed without contention. This causes system performance to degrade as access requests wait.

One conventional system to reduce this wait time has been to partition a directory when the size associated with that directory reaches a threshold limit. The presumption in the conventional system is that the increase in directory size is followed by an increase in the number of shared accesses, the number of exclusive accesses, the number of shared access requests, and the number of exclusive access requests. Thus, partitioning directories based on size is conventionally deemed to alleviate the surge in the number of accesses and the number of access requests.

Unfortunately, partitioning directories based on size does not necessarily alleviate the surge in the number of accesses and the number of access requests. In other words, directory size has shown to have no correlation with the number of accesses and the number of access requests on the directory. For example, a directory may be small in size but it may have many accesses and access requests that will lead to serialization of the access requests, thereby increasing the wait time to process access requests. On the other hand, a directory may be very large in size but may have very few accesses and very few access requests that do not lead to excessive serialization of access requests. Thus, partitioning the directory based on its size does not always improve efficiency nor reduce wait time in processing access requests.

SUMMARY

Accordingly, a need has arisen to partition a directory in response to a surge in the number of accesses and/or the number of access requests. Moreover, a need has arisen to partition a directory to increase system throughput of accesses and/or access requests. It will become apparent to those skilled in the art after reading the detailed description of the present invention that the embodiments of the present invention satisfy the above mentioned needs.

According to one embodiment, directory partition logic monitors directory accesses and/or directory access requests (e.g., queued or “waiting” accesses). For example, the number of accesses and/or the number of access requests may be monitored. Directory accesses and directory access requests may be either shared or exclusive. A partitioning trigger signal that causes the file system to partition the directory is generated if the number of directory access requests (e.g., waiting accesses) satisfy one or more conditions set by a plurality of heuristics.

For example, the partitioning trigger signal may be generated in accordance with embodiments of the present invention if the number of exclusive access requests reaches a threshold value identified by the plurality of heuristics. In one example, the partitioning trigger signal may be generated if the number of shared access requests reaches a threshold value identified by the plurality of heuristics. It is appreciated that the partitioning trigger signal may be generated in response to any combination of exclusive access requests and shared access requests exceeding a threshold value.

Moreover, it is appreciated that the partitioning trigger signal may be generated if the condition identified by the number of number of access requests is satisfied over a duration of time, e.g., over a threshold period of time. The plurality of heuristics may be user definable and user programmable.

Advantageously, based on the partitioning trigger signal, the file system may automatically partition the directory into multiple subdirectories. In one embodiment, the file system may generate one or more hash values, or one or more hash value ranges, which serve as the created subdirectories. Hash values may be based on content, e.g., directories, files, etc., to be placed within the created subdirectory. Accordingly, files or subdirectories under the directory being partitioned may be placed under one or more of the created subdirectory hash values. It is appreciated that the partitioning of the directory may be based on multiple factors to reduce the wait time to service access, e.g., the number of exclusive and/or shared to a given file and/or subdirectory, etc. Moreover, directory partitioning is performed in a manner to accommodate more users simultaneously in comparison to the conventional system.

More specifically, a method of partitioning a directory includes monitoring accesses to one or more content with a directory. In one embodiment, waiting access requests to access the one or more content within the directory are monitored. The waiting requests are queued to be granted at a later time. According to one embodiment, the directory is determined to be primed for partitioning if a number of waiting requests within the directory is greater than a threshold value of a plurality of heuristics. A trigger signal is automatically generated if the directory is primed for partitioning. In one embodiment, the trigger signal causes a file system to partition the directory. It is appreciated that the plurality of heuristics may be user programmable.

According to one embodiment, monitoring waiting or queued requests to access the one ore more content within the directory includes incrementing a waiting access counter for every waiting request that is queued. The waiting access counter is decremented for every queued waiting request that is subsequently granted access to one or more content within the directory.

It is appreciated that waiting requests to access the one or more content within the directory may include shared access requests and/or exclusive access requests. In one implementation, monitoring waiting or queued requests includes examining the size of a wait queue for reader-writer lock on the directory.

In another embodiment of the present invention, the partition trigger signal is not generated unless the queued access count exceeds a threshold value over a specified period of time. It is further appreciated that the amount of time may be tracked that the number of waiting or queued requests to access the one or more content within the directory exceeds the threshold value. It is further appreciated that in one exemplary embodiment, the directory is determined to be primed for partitioning if the amount of time exceeds a time threshold associated with the plurality of heuristics. In one embodiment, determining if the queued access count exceeds a threshold count over a threshold time period is performed by examining the number of waiters from a reader-write lock queue and maintaining the queue count in a log, such as a file change log, along with a timestamp and subsequently checking the log to determine the number of such occurrences within the threshold period of time exceed a prescribed threshold.

DETAILED DESCRIPTION

Reference will now be made in detail to various embodiments in accordance with the invention, examples of which are illustrated in the accompanying drawings. While the invention will be described in conjunction with various embodiments, it will be understood that these various embodiments are not intended to limit the invention. On the contrary, the invention is intended to cover alternatives, modifications, and equivalents, which may be included within the scope of the invention as construed according to the appended Claims. Furthermore, in the following detailed description of various embodiments in accordance with the invention, numerous specific details are set forth in order to provide a thorough understanding of the invention. However, it will be evident to one of ordinary skill in the art that the invention may be practiced without these specific details. In other instances, well known methods, procedures, components, and circuits have not been described in detail as not to unnecessarily obscure aspects of the invention.

It should be borne in mind, however, that all of these and similar terms are to be associated with the appropriate physical quantities and are merely convenient labels applied to these quantities. Unless specifically stated otherwise as apparent from the following discussions, it is appreciated that throughout the present disclosure, discussions utilizing terms such as “identifying,” “creating,” “generating,” “monitoring,” “storing,” “determining,” “sending,” “incrementing,” “providing,” “decrementing,” “accessing,” “associating,” or “tracking” or “partitioning” or the like, refer to actions and processes of a computer system or similar electronic computing device or processor. The computer system or similar electronic computing device manipulates and transforms data represented as physical (electronic) quantities within the computer system memories, registers or other such information storage, transmission or display devices.

It is appreciated present systems and methods can be implemented in a variety of architectures and configurations. For example, present systems and methods can be implemented as part of a distributed computing environment, a cloud computing environment, a client server environment, etc. Embodiments described herein may be discussed in the general context of computer-executable instructions residing on some form of computer-readable storage medium, such as program modules, executed by one or more computers, computing devices, or other devices. By way of example, and not limitation, computer-readable storage media may comprise computer storage media and communication media. Generally, program modules include routines, programs, objects, components, data structures, etc., that perform particular tasks or implement particular abstract data types. The functionality of the program modules may be combined or distributed as desired in various embodiments.

Computer storage media can include volatile and nonvolatile, removable and non-removable media implemented in any method or technology for storage of information such as computer-readable instructions, data structures, program modules, or other data. Computer storage media can include, but is not limited to, random access memory (RAM), read only memory (ROM), electrically erasable programmable ROM (EEPROM), flash memory, or other memory technology, compact disk ROM (CD-ROM), digital versatile disks (DVDs) or other optical storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other medium that can be used to store the desired information and that can be accessed to retrieve that information.

Exemplary Operating Environment

FIG. 1shows a block diagram of an exemplary operating environment in which various embodiments of the present invention can operate. Exemplary operating environment100includes clients102a-c, networks104, servers106a-b, storage area network (SAN) fabric108, and storage arrays110a-b. It is appreciated that components of exemplary operating environment100are exemplary and more or fewer components may be present in various configurations. It is appreciated that operating environment may be part of a distributed computing environment, a cloud computing environment, a client server environment, etc.

Client systems102a-caccess information on storage arrays110a-bvia servers106a-busing, for example, a web browser or other suitable client communication software (not shown).FIG. 1depicts the use of a network104such as the Internet for exchanging data, but the present disclosure is not limited to the Internet or any particular network-based environment.

Each of servers106a-bcan have multiple clients (e.g., clients102a-c) connected thereto. Servers106a-bcan be a variety of server types including, but not limited to, database servers, network file system (NFS) servers, and application servers. In some embodiments, servers106a-bhave access to shared storage of storage arrays110a-bwith each of servers106a-bhaving its own respective clustered file system and its own built-in lock manager thereby allowing servers106a-bto access the shared storage. Each of servers106a-bmay communicate with each other over a network (e.g., a redundant private network) (not shown). Servers106a-bmay be linked to storage arrays110a-bin a variety of ways including, fibre channel.

In accordance with embodiments of the present invention, servers106a-bmay respectively use directory partition logics112a-bto determine whether a directory is primed for partitioning. If a directory is primed for partitioning, the directory partition logics112a-bautomatically generate a partitioning trigger signal that causes a file system to partition the directory. Subdirectories may be created based on hash value ranges associated with the name of the content within each subdirectory. One or more of the content of the original directory may be newly placed under a subdirectory with a particular hash value or hash value range. Accordingly, accessing a created subdirectory, e.g., via an exclusive access request, does not turn the partitioned directory inaccessible to other users, applications, threads, etc. Thus, the number of simultaneous accesses to the partitioned directory is increased, thereby reducing the wait time associated with an access request and the granting of the whether the request is exclusive or shared.

The directory partition logics112a-bdetermine whether a directory is primed for partitioning by monitoring the number of directory access requests. Directory access requests may be shared and/or exclusive. In one embodiment, a partitioning trigger signal causing the file system to partition the directory is generated if the number of directory access requests satisfies one or more conditions set by a plurality of heuristics.

For example, the partitioning trigger signal may be generated in accordance with embodiments of the present invention if the number of exclusive access requests reaches a threshold value identified by the plurality of heuristics. In one example, the partitioning trigger signal may be generated if the number of shared access requests reaches a threshold value identified by the plurality of heuristics. It is appreciated that the partitioning trigger signal may be generated in response to any combination of exclusive access requests and shared access requests exceeding a threshold value.

Moreover, it is appreciated that the partitioning trigger signal may be generated if the condition identified by the number of number of access requests is satisfied over a duration of time, e.g., over a threshold period of time. The plurality of heuristics may be user definable and user programmable.

Advantageously, based on the partitioning trigger signal, the file system may automatically partition the directory into multiple subdirectories. In one embodiment, the file system may generate one or more hash values, or one or more hash value ranges, which serve as the created subdirectories. Hash values may be based on content, e.g., directories, files, etc., to be placed within the created subdirectory. Accordingly, files or subdirectories under the directory being partitioned may be placed under one or more of the created subdirectory hash values. It is appreciated that the partitioning of the directory may be based on multiple factors to reduce the wait time to service access, e.g., the number of exclusive and/or shared to a given file and/or subdirectory, etc. Moreover, directory partitioning is performed in a manner to accommodate more users simultaneously in comparison to the conventional system.

A Method and System for Partitioning Directories

Referring now toFIGS. 2A-2E, exemplary embodiments for partitioning a directory in accordance with embodiments of the present invention are shown. Exemplary system200A includes a memory component210, directory partition logic220in accordance with embodiments of the present invention and a file system230.

Memory component210stores content, e.g., files. Content may be structured in a tree structure format, e.g., directories, where each directory may include one or more files and/or directories. According to one embodiment, directory partition logic220monitors access requests to the directory, e.g., /home directory, stored in the memory component210. Based on the monitoring, the directory partition logic220determines whether the /home directory is primed for partitioning. The directory partition logic220generates a partitioning trigger signal if the /home directory is primed for partitioning. The partitioning trigger signal then causes the file system230to partition the /home directory.

It is appreciated that references to partitioning the /home directory are exemplary and not intended to limit the scope of the present invention. The method by which the /home directory is partitioned is equally applicable to partitioning other directories.

The memory component210stores the /home directory and content therein. For example, the /home directory may include File1, File2, File3, File4, Dir1, and Dir2, as shown inFIG. 2A.

It is appreciated that various clients, users, applications, threads, etc., are generically referenced as to clients herein. Clients may request access to the /home directory, e.g., for a read operation, for an update operation, etc. It is appreciated that shared access is needed for a read operation that may include listing of the content within the /home directory, retrieving attributes associated with the /home directory, looking up a specific item in the /home directory, etc. It is further appreciated that an exclusive access is need for an update operation that may include creating a new entry in the /home directory, removing an entry form the /home directory, updating the attributes associated with the /home directory, moving an entry from the /home directory to another directory, etc. For example, clients242,246, and244may request shared access for their respective read operations.

It is appreciated that the structure of the /home directory does not allow an exclusive access to be granted simultaneous with other types of accesses. For example, an update operation that needs an exclusive access to the /home directory cannot occur simultaneous with shared accesses to the /home directory. Accordingly, exclusive access requests by clients248,252, and254are queued to be granted at a later time. Exclusive access request by client248may be to update attributes associated with the /home directory while exclusive access request by client252may be to remove an entry from the /home directory. Access request by client254may be to move an entry within the /home directory to a different directory.

As the amount of content within a directory grows, the number of access requests may increase. Thus, the amount of wait time for the request to be granted may also increase.

In one embodiment, the directory partition logic220monitors the number of access requests. For example, the directory partition logic220may monitor212the number of access requests, e.g., shared and/or exclusive, that are queued to be granted. The directory partition logic220automatically determines whether the /home directory is primed for partitioning based on monitoring the number of access requests.

The determination of whether the /home directory is primed for partitioning is described in more detail with references toFIGS. 3A-3B. According to one embodiment, the directory partition logic220generates a partitioning trigger signal214(hereinafter trigger signal) causing the file system230to partition the /home directory if the /home directory is primed for partitioning.

Referring now toFIG. 2B, an example partitioning of the /home directory in accordance with one embodiment is shown. For example, H1and H2subdirectories are created. Files2-4and Dir1are placed within the H1subdirectory. In comparison File1and Dir2are placed within the H2subdirectory.

In one embodiment, the names of the newly generated subdirectories are based on hash functions associated with the names of the files within each subdirectory. For example, H1subdirectory may be associated with hashing the name of the Files2-4and Dir1. In comparison, the H2subdirectory may be associated with hashing file1and Dir2. It is appreciated that the generated subdirectories may be associated with a range of hash function values. For example, a file, e.g., File5(not shown), that is subsequently added to /home directory may be placed in the H1subdirectory if hashing the name of the File5results in a hash value within a range specified by H1.

Partitioning the /home directory may accommodate additional users/clients. For example, client248that was previously queued to exclusively access to /home directory can now exclusively access subdirectory H2because creating or removing a file associated with the H2subdirectory is in a different subdirectory in comparison to simultaneous shared accesses by clients242,246and244accessing the H1subdirectory. Accordingly, client248may advantageously be provided access, as requested, in a more timely fashion as apposed to an un-partitioned /home directory, shown inFIG. 2A.

It is appreciated that the list of clients and programs seeking access may be updated as time goes on. For example, client256may be a new client that has sought shared access to the created subdirectory H2. However, the shared access request for the created subdirectory H2by client256is denied since client248has exclusive access to the subdirectory H2. Thus, the access request by client256is queued to be granted at a later time, e.g., when client248has finished exclusively accessing the H2subdirectory.

Referring now toFIG. 2C, an example partitioning of the /home directory in accordance with one embodiment is shown. For example, the triggering signal214generated by the directory partition logic220in one embodiment causes the file system230to partition the /home directory. For example, H1, H2, and H3subdirectories may be created resulting from partitioning the /home directory. It is appreciated that the H1subdirectory may further be partitioned to include an H4and H5subdirectories. Files2and4are placed within the H5subdirectory and File3is placed within the H4directory. It is appreciated that File1and Dir2are placed within the H2subdirectory and Dir1is placed within the H3directory.

As presented above, the names of the newly generated subdirectories may be based on hashing the name of the content within each subdirectory. For example, H5subdirectory may be associated with hashing the names of Files2and4. The H2subdirectory may be associated with hashing the names of File1and Dir2while the H3subdirectory may be associated with hashing the name associated with Dir1. H4subdirectory is created by hashing the name associate with File3in this exemplary embodiment. Moreover, as presented above, the generated subdirectories may be associated with one or more ranges of hash functions.

Partitioning the /home directory advantageously enables accommodation of additional users/clients. For example, clients252and254may access File3and Dir1respectively. It is appreciated that accesses by clients252and254is simultaneous with the accesses by clients242,244,246, and248.

Accordingly, the exclusive access request by clients248,252, and254that were previously queued may now be granted due to appropriate partitioning of the /home directory, thereby reducing the access wait time. In this exemplary embodiment, the clients242and246have shared access to subdirectory H5. Client252has exclusive access to subdirectory H4and client244has shared access to subdirectory H5. It is appreciated that client248has exclusive to subdirectory H2and client254has exclusive access to subdirectory H3.

It is appreciated that the list of clients and programs seeking access may be updated. For example, client256seeking a shared access to subdirectory H2is denied access because client248has exclusive access to subdirectory H2. As such, the access request by client256is queued to be granted at a later time.

It is appreciated that new partitioning from a previously partitioned /home directory may occur. For example, the partitioned structure of the /home directory shown inFIG. 2Cmay result from partitioning of the /home directory structure ofFIG. 2B. The process for partitioning the /home directory fromFIG. 2B to 2Cis substantially similar to the partitioning that takes place fromFIG. 2A to 2B.

Referring now toFIG. 2D, the addition of more content to the /home directory and creating an additional subdirectory, in a similar fashion as described above, are shown. The operation and structure ofFIG. 2Dis substantially similar toFIG. 2C. However, Files M and N have been added to the /home directory. File N is placed under the H5subdirectory because a hash associated with File N is within the range identified by the subdirectory H5. On the other hand, a new subdirectory H6may be created for File M. It is therefore appreciated that addition or removal of content to the /home directory may cause the subdirectories to grow or to collapse.

Referring now toFIG. 2E, which shows a collapse of the subdirectories shown inFIG. 2Bto the original structure of /home directory, as presented inFIG. 2A. Thus, it is appreciated that based on monitoring accesses to the /home directory and/or monitoring access requests to the /home directory, the /home directory may be partitioned or restored back to its original form or further restored to a different partitioned structure.

Referring now toFIG. 3A, an exemplary embodiment of the directory partition logic220in accordance with an embodiment of the present invention is shown. The directory partition logic220includes monitoring logic260and partitioning logic270. The directory partition logic220automatically monitors212the number of accesses and/or the number of access requests to the /home directory. It is appreciated that the access requests may include waiting, e.g., denied requests that are queued in a buffer to be granted later. The directory partition logic220automatically determines whether the /home directory is primed for partitioning. Accordingly, the directory partition logic220generates a trigger signal214to cause the file system230to partition the /home directory if the /home directory is primed for partitioning.

According to one embodiment, the monitoring logic260may include counters262and264. In one embodiment, the counter262increments in response to every detected exclusive access and/or exclusive access request. For example, the counter262is incremented twice for one exclusive access that has been granted and for one exclusive access request that has not been granted and is queued for grant at a later time. In contrast, the counter264increments responsive to every shared access and/or shared access request. For example, the counter264is incremented three times for two shared accesses that have been granted and for one shared access request that has not been granted and is queued for grant at a later time.

It is appreciated that the counter262is decremented in response to every exclusive access and/or exclusive access request that has terminated. For example, the counter262is decremented by one when client248completes and terminates its exclusive access of /home directory. Similarly, the counter264is decremented responsive to every shared access and/or shared access request that has terminated. For example, the counter264is decremented by one when client242terminates its shared access of /home directory.

Accordingly, the monitoring logic260automatically tracks and monitors the number of accesses and the number of access requests to the /home directory. As presented above, it is appreciated that the access and/or access request may be either shared or exclusive.

The partitioning logic270includes a programmable threshold272, a comparator274, and a partitioning trigger276. The programmable threshold272receives one or more programmable threshold values. The one or more programmable threshold values may be referred to as a plurality of heuristics and conditions to be satisfied before partitioning the /home directory. For example, one threshold value may be the maximum number of allowed exclusive accesses and/or the maximum number of exclusive access requests. In another embodiment, one threshold value may be the maximum number of allowed shared accesses and/or the maximum number of allowed shared access requests.

It is appreciated that a threshold value may be the total number of accesses and access requests, e.g., total number of exclusive and shared accesses as well as exclusive and shared access requests. Moreover, it is appreciated that the programmable threshold values may be user programmable and may be changed as needed.

The comparator274receives the monitored values of the counters262and264. Moreover, the comparator274receives one or more threshold values from the programmable threshold272.

The comparator274determines whether the /home directory is primed for partitioning by comparing the programmable threshold values to the monitored values. For example, the comparator274may determine that the /home directory is primed for partitioning if the number of exclusive accesses and the number of exclusive access requests received from the counter262exceed the maximum allowed amount, as indicated by a programmable threshold value. In one embodiment, the comparator274may determine that the /home directory is primed for partitioning if the number of shared accesses and the number of shared access requests received from the counter264exceed the maximum allowed amount, as indicated by a programmable threshold value.

It is appreciated that the threshold value may be any combination of exclusive/shared accesses and/or exclusive/shared access requests. For example, the comparator274may determine that the /home directory is primed for partitioning if the number of shared/exclusive accesses and shared/exclusive access requests received from the counters262and264exceed the maximum allowed amount, as indicated by a programmable threshold value. In one exemplary embodiment, the comparator274determines that the /home directory is primed for partitioning if the number of shared accesses and shared access requests exceed a first programmable threshold value and further if the number of exclusive accesses and exclusive access requests exceed a second programmable threshold value.

The determination of whether the /home directory is primed for partitioning is communicated to the partitioning trigger276. The partitioning trigger276generates a triggering signal214when the /home directory is determined to be primed for partitioning. The triggering signal214is communicated to the file system230and causes the file system230to partition the /home directory in accordance with one embodiment.

Referring now toFIG. 3B, one exemplary embodiment of the directory partition logic220in accordance with one exemplary embodiment of the present invention is shown. The directory partition logic220is substantially similar to that ofFIG. 3A. However, the directory partition logic220further includes a time tracker266component within the monitoring logic260. The time tracker266tracks time for a specified amount of time at the end of which it is reset. For example, time tracker266tracks up to time t1and resets to zero and repeats.

The partitioning logic270further includes a threshold time comparator278that receives the tracked time from the time tracker266. In one embodiment, the threshold time comparator278receives the result of the comparison of the number of accesses and/or the number of access requests with the plurality of heuristics. The threshold time comparator278further receives a programmable threshold time value. It is appreciated that the programmable threshold time value may be one of the programmable threshold values and part of the plurality of heuristics.

The threshold time comparator278compares the tracked time with the programmable time threshold value. The threshold time comparator278determines that the /home directory is primed for partitioning if the tracked time exceeds the programmable time threshold value and further if the comparator274determines that the number of accesses and/or the number of access requests, as discussed with respect toFIG. 3A, exceed the programmable threshold values. In other words, the threshold time comparator278determines that the /home directory is primed for partitioning if certain conditions, e.g., the number of accesses and/or the number of access requests, hold true for at least the programmable time threshold value.

The result of the determination by the comparator278is communicated to the partitioning trigger276. The partitioning trigger276generates a partitioning signal214if the /home directory is primed for partitioning.

FIG. 4Ais a flow diagram400A of an embodiment of the present invention that determines a directory is primed for partitioning when a number of queued access requests exceeds a threshold number. At step402, waiting access requests to a directory, e.g., /home directory, are monitored. It is appreciated that the access requests may be for a shared access, an exclusive access, or any combination thereof. It is appreciated that the waiting access requests may be queued to be granted at a later time. At step404, the number of queued access requests, e.g., shared access, exclusive access, or any combination thereof, may be compared to a threshold value.

It is appreciated that steps402and404are repeated if the number of queued access requests does not exceed the threshold value. At step406, a trigger signal is generated if the number of queued access requests exceeds the threshold value. The trigger signal may cause the file system to partition the /home directory. It is appreciated that steps402,404, and406may be repeated for the partitioned /home directory and that the partitioned /home directory may be similarly partitioned to other partitioned directory.

FIG. 4Bis a flow diagram400B of an embodiment of the present invention that determines a directory is primed for partitioning when a number of queued access requests exceeds a threshold number over a threshold period of time. It is appreciated that the flow diagram400B is substantially similar to that of400A except that the trigger signal is generated if the number of queued access requests exceeds a threshold value and if this condition is satisfied for a threshold period of time at step408. It is appreciated that steps402and404are repeated if the number of queued access requests does not exceed the threshold value. Moreover, it is appreciated that the steps402,404, and408may be repeated if the number of queued access requests exceeds the threshold value in less than the threshold period of time.

FIG. 4Cshows an exemplary flow diagram400C in accordance with one embodiment of the present invention. At step440, waiting requests to access one or more content within the /home directory is monitored. The waiting requests may be queued in a buffer to be granted at a later time. At step442, the waiting, e.g., denied, requests may be monitored by incrementing an waiting access counter for every waiting request that is queued. It is appreciated that the requests to access may be for a shared access, exclusive access or any combination thereof. At step444, the waiting access counter is decremented for every queued waiting request that is subsequently granted access to the /home directory.

Optionally at step446, an amount of time within a period that a certain condition or conditions are satisfied is tracked. The conditions may be based on the comparison of the monitored values, e.g., from steps440,442,444or any combination thereof, and a plurality of heuristics that may be user programmable. For example, the plurality of heuristics may include a threshold value associated with the number of shared access requests. The plurality of heuristics may further include a threshold value associated with the number of exclusive access requests. It is appreciated that the plurality of heuristics may further include a threshold value for the number of exclusive access requests, the number of shared access requests, or any combination thereof.

At step448, it is determined whether the /home directory is primed for partitioning. It is appreciated that the determination may be based on whether the condition or conditions specified by the plurality of heuristics are satisfied. For example, it may be determined that the /home directory is primed for partitioning if a number of waiting requests to access the /home directory is greater than a threshold value. In one embodiment, it may be determined that the /home directory is primed for partitioning if the number of waiting requests to access the /home directory is greater than a threshold value for at least a certain amount of time.

At step450, a trigger signal is generated if the directory is primed for partitioning. The trigger signal may cause a file system to partition the /home directory.

Accordingly, a directory is partitioned in response to a surge in the number of access requests for a period of time. As a result, the wait time to process access requests are reduced.

Referring now toFIG. 5, a block diagram of an exemplary computer system in accordance with one embodiment of the present invention is shown. With reference toFIG. 5, an exemplary system module for implementing embodiments includes a general purpose computing system environment, such as computing system environment500. Computing system environment500may include, but is not limited to, servers (e.g., servers106a-b), desktop computers, laptops, tablet PCs, mobile devices, and smartphones. In its most basic configuration, computing system environment500typically includes at least one processing unit502and computer readable storage medium504. Depending on the exact configuration and type of computing system environment, computer readable storage medium504may be volatile (such as RAM), non-volatile (such as ROM, flash memory, etc.) or some combination of the two. Portions of computer readable storage medium504when executed facilitates the determination of whether a directory is primed for partitioning according to embodiments of the present invention (e.g., process400).

Additionally, computing system environment500may also have additional features/functionality. For example, computing system environment500may also include additional storage (removable and/or non-removable) including, but not limited to, magnetic or optical disks or tape. Such additional storage is illustrated by removable storage508and non-removable storage510. Computer storage media includes volatile and nonvolatile, removable and non-removable media implemented in any method or technology for storage of information such as computer readable instructions, data structures, program modules or other data. Computer readable medium504, removable storage508and nonremovable storage510are all examples of computer storage media. Computer storage media includes, but is not limited to, RAM, ROM, EEPROM, flash memory or other memory technology, CD-ROM, digital versatile disks (DVD) or other optical storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other medium which can be used to store the desired information and which can be accessed by computing system environment500. Any such computer storage media may be part of computing system environment500.

Communications connection(s)512may allow computing system environment500to communication over various networks types including, but not limited to, fibre channel, small computer system interface (SCSI), Bluetooth, Ethernet, Wi-fi, Infrared Data Association (IrDA), Local area networks (LAN), Wireless Local area networks (WLAN), wide area networks (WAN) such as the internet, serial, and universal serial bus (USB). It is appreciated the various network types that communication connection(s)512connect to may run a plurality of network protocols including, but not limited to, transmission control protocol (TCP), internet protocol (IP), real-time transport protocol (RTP), real-time transport control protocol (RTCP), file transfer protocol (FTP), and hypertext transfer protocol (HTTP).

Computing system environment500may also have input device(s)514such as a keyboard, mouse, pen, voice input device, touch input device, remote control, etc. Output device(s)516such as a display, speakers, etc. may also be included. All these devices are well known in the art and are not discussed at length.

In one embodiment, computer readable storage medium504includes a directory partition module507which includes an access monitoring module520, a waiting request monitoring module522, an access counter module524, a waiting access counter module526, a time tracker module528, a directory partitioning primed determinor module530, and a trigger signal module532. The directory partition module507communicates with a file system module506that may be integrated within the file system module506.

The access monitoring module520monitors the number of exclusive accesses, the number of shared accesses, or any combination thereof according to embodiments of the present invention. The waiting request monitoring module522monitors the number of exclusive access requests, the number of shared access requests, or any combination thereof according to embodiments of the present invention. For example, access counter module524may be used to increment/decrement based on the number of accesses. It is appreciated that the waiting access counter module526may be used to increment/decrement based on the number of access requests. The time tracker528module operates substantially similar to the time tracker266. The directory partitioning primed determinor module530operates substantially similar to the comparators274and/or threshold time comparator278or any combination thereof. The trigger signal module532operates substantially similar to the partitioning trigger276component.

Referring now toFIG. 6, a block diagram of another exemplary computer system in accordance with one embodiment of the present invention is shown.FIG. 6depicts a block diagram of a computer system610suitable for implementing the present disclosure. Computer system610includes a bus612which interconnects major subsystems of computer system610, such as a central processor614, a system memory617(typically RAM, but which may also include ROM, flash RAM, or the like), an input/output controller618, an external audio device, such as a speaker system620via an audio output interface622, an external device, such as a display screen624via display adapter626, serial ports628and630, a keyboard632(interfaced with a keyboard controller633), a storage interface634, a floppy disk drive637operative to receive a floppy disk638, a host bus adapter (HBA) interface card635A operative to connect with a Fibre Channel network690, a host bus adapter (HBA) interface card635B operative to connect to a SCSI bus639, and an optical disk drive640operative to receive an optical disk642. Also included are a mouse646(or other point-and-click device, coupled to bus612via serial port628), a modem647(coupled to bus612via serial port630), and a network interface648(coupled directly to bus612). System memory617includes directory partition module650which is operable to partition directories according to embodiments of the present invention.

Bus612allows data communication between central processor614and system memory617, which may include read-only memory (ROM) or flash memory (neither shown), and random access memory (RAM) (not shown), as previously noted. The RAM is generally the main memory into which the operating system and application programs are loaded. The ROM or flash memory can contain, among other code, the Basic Input-Output system (BIOS) which controls basic hardware operation such as the interaction with peripheral components. Applications resident with computer system610are generally stored on and accessed via a computer readable medium, such as a hard disk drive (e.g., fixed disk644), an optical drive (e.g., optical drive640), a floppy disk unit637, or other storage medium. Additionally, applications can be in the form of electronic signals modulated in accordance with the application and data communication technology when accessed via network modem647or interface648.

Storage interface634, as with the other storage interfaces of computer system610, can connect to a standard computer readable medium for storage and/or retrieval of information, such as a fixed disk drive644. Fixed disk drive644may be a part of computer system610or may be separate and accessed through other interface systems. Modem647may provide a direct connection to a remote server via a telephone link or to the Internet via an internet service provider (ISP). Network interface648may provide a direct connection to a remote server via a direct network link to the Internet via a POP (point of presence). Network interface648may provide such connection using wireless techniques, including digital cellular telephone connection, Cellular Digital Packet Data (CDPD) connection, digital satellite data connection or the like.

Many other devices or subsystems (not shown) may be connected in a similar manner (e.g., document scanners, digital cameras and so on). Conversely, all of the devices shown inFIG. 6need not be present to practice the present disclosure. The devices and subsystems can be interconnected in different ways from that shown inFIG. 6. The operation of a computer system such as that shown inFIG. 6is readily known in the art and is not discussed in detail in this application. Code to implement the present disclosure can be stored in computer-readable storage media such as one or more of system memory617, fixed disk644, optical disk642, or floppy disk638. The operating system provided on computer system610may be MS-DOS®, MS-WINDOWS®, OS/2®, UNIX®, Linux®, or another known operating system.