TECHNICAL FIELD

The present disclosure relates generally to mass data storage networks and data storage filing systems. More particularly, aspects of this disclosure relate to methods, non-transitory computer readable media, and devices for efficiently administering locks for shared resources, such as data buffers, stored on a storage system.

BACKGROUND

A storage server is a computer system that is used to store and retrieve data on behalf of one or more clients on a network. A storage server can be used for many different purposes, such as to provide multiple users with access to shared data or to backup mission critical data. One example of a storage server is a file server. A file server operates on behalf of one or more clients to store and manage shared files in a set of mass storage devices, such as magnetic or optical storage based disks or tapes. The mass storage devices may be organized into one or more volumes of Redundant Array of Inexpensive Disks (RAID). These storage servers provide multiprocessors that may execute tasks on behalf of the multiple users. These multiprocessors can include several or several hundred processors running concurrently.

Managing the concurrent execution involves safeguarding data from modification by multiple processes. Indeterminate results, deadlocks, and data corruption may result if multiple tasks modify or access the same dataset. Accordingly, concurrent execution conditions on multiprocessor systems are managed to assure the proper access of data. Conventionally, fine-grained locking manages concurrent execution on multiple processors by dividing a task into many smaller pieces of code. Placing locks around these small pieces of code keeps them from being accessed or modified by other tasks.

The resources of a storage server are limited. Under current operation, numerous tasks must be frequently locked and unlocked. Both locking and unlocking becomes expensive because a significant fraction of the execution time may be spent unlocking tasks. Any time a lock is acquired or released, the state of the lock must be reflected in the storage server's global memory. Some of the drawbacks of locking include bringing the relevant cache line into the CPU's cache and invalidating it on other CPUs' caches. However, frequent cache line invalidations and cache misses negatively impact performance.

