Patent Publication Number: US-9842059-B2

Title: Wear leveling in storage devices

Description:
TECHNICAL FIELD 
     This disclosure relates to data storage management. 
     BACKGROUND 
     Solid-state drives (SSDs) may be used in computers in applications where relatively low latency and high capacity storage are desired. Additionally, SSDs may utilize multiple, parallel data channels to read from and write to memory devices, which may result in high sequential read and write speeds. 
     SSDs may utilize non-volatile memory (NVM) devices, such as flash, PCM, ReRAM, or MRAM memory devices. In some examples, an SSD may write data to a particular memory device more often than the SSD writes data to other memory devices. Writing data to NVM devices many times over many writes may cause physical changes to the NVM memory device, which may cause the NVM memory device to lose the ability to store data. Some SSDs utilize wear leveling techniques to prevent a particular NVM  1  memory device from being written to much more frequently than other NVM memory devices in an attempt to prolong the lifespan of the NVM memory devices. 
     SUMMARY 
     In one example, a system includes a plurality of memory devices and a processor. The plurality of memory devices include a plurality of physical locations at which data is stored. The processor may be configured to determine, based on a value of a first transient write counter associated with a first logical block address collection and a value of a second transient write counter associated with a second logical block address collection, whether to swap physical locations of data stored at logical block addresses in the first logical block address collection and physical locations of data stored at logical block addresses in the second logical block address collection. The value of the first transient write counter may equal a number of times data has been written to the first logical block address collection since a prior data swap involving the first logical block address collection, and the value of the second transient write counter may equal a number of times data has been written to the second logical block address collection since a prior data swap involving the second logical block address collection. The processor may be further configured to, in response to determining to swap the physical locations of the data stored at logical block addresses in the first logical block address collection and the physical locations of the data stored at logical block addresses in the second logical block address collection, swap the physical locations of the data stored at the logical block addresses in the first logical block address collection and the physical locations of the data stored at the logical block addresses in the second logical block address collection. 
     In another example, a method may include determining, by a processor, based on a value of a first transient write counter associated with a first logical block address collection and a value of a second transient write counter second logical block address collection associated, whether to swap physical locations of data stored in the first logical block address collection and physical locations of data stored in the second logical block address collection. The value of the first transient write counter may equal a number of times data has been written to the first logical block address collection since a prior data swap involving the first logical block address collection, and the value of the second transient write counter may equal a number of times data has been written to the second logical block address collection since a prior data swap involving the second logical block address collection. The method may further include, in response to determining to swap the physical locations of the data stored at logical block addresses in the first logical block address collection and the physical locations of the data stored at logical block addresses in the second logical block address collection, causing, by the processor, the physical locations of the data stored at the logical block addresses in the first logical block address collection to be swapped with the physical locations of the data stored at the logical block addresses in the second logical block address collection. 
     In another example, a computer-readable storage medium stores instructions that, when executed, cause a processor to determine, based on a value of a first transient write counter associated with a first logical block address collection and a value of a second transient write counter associated with a second logical block address collection, whether to swap physical locations of data stored in a first logical block address collection of a storage device and physical locations of data stored in a second logical block address collection of a storage device. The value of the first transient write counter may equal a number of times data has been written to the first logical block address collection since a prior data swap involving the first logical block address collection, and the value of the second transient write counter may equal a number of times data has been written to the second logical block address collection since a prior data swap involving the second logical block address collection. The instructions may further cause the processor to, in response to determining to swap the physical locations of the data stored at logical block addresses in the first logical block address collection and the physical locations of the data stored at logical block addresses in the second logical block address collection, cause the physical locations of the data stored at the logical block addresses in the first logical block address collection to be swapped with the physical locations of the data stored at the logical block addresses in the second logical block address collection. 
     The details of one or more examples are set forth in the accompanying drawings and the description below. Other features, objects, and advantages will be apparent from the description and drawings, and from the claims. 
    
    
     
       BRIEF DESCRIPTION OF DRAWINGS 
         FIG. 1  is a conceptual and schematic block diagram illustrating an example system including a storage device connected to a host device. 
         FIG. 2  is a conceptual block diagram illustrating an example memory device, in accordance with one or more techniques of this disclosure. 
         FIG. 3  is a conceptual and schematic block diagram illustrating an example controller. 
         FIGS. 4A-4B  are conceptual and schematic block diagram illustrating example details of a write counter table, in accordance with one or more techniques of this disclosure. 
         FIG. 5  is a flow diagram illustrating example wear leveling operations of a solid state drive. 
         FIG. 6  is a flow diagram illustrating example wear leveling operations of a solid state drive. 
     
    
    
     DETAILED DESCRIPTION 
     The disclosure describes techniques for performing wear leveling for a storage device, such as a solid state drive (SSD), which may help increase longevity of the storage device. A storage device may include a plurality of memory devices that each includes a plurality of physical blocks. A host device storing data to the storage device may utilize logical block addresses, which the storage device translates to physical block addresses using, e.g., an indirection or logical-to-physical table. In wear leveling techniques described herein, sets of logical block addresses may be associated in a logical block address collection. A processor, such as a processor in the controller of the storage device, may maintain a write counter associated with each logical block address collection, and may swap data between physical block addresses associated with different logical block address collections based on the value of the write counter for the respective logical block address collection. Based on the write counter of the respective logical block address collection, the processor may determine whether to swap data from the respective logical block address collection to physical block addresses associated with logical block addresses in another logical block address collection to level writes across logical block address collections. 
     For example, the write counter may be a transient write counter, and may be a count of writes associated with the respective logical block address collection since the last time data from the respective logical block address collection was swapped with data from another logical block address collection. A high transient write counter value thus indicates that the respective logical block address collection has been written to frequently since the last data swap. In some instances, this may suggest that the respective logical block address collection will be written to frequently in the near future, such that swapping the data stored at logical block addresses in the respective logical block address collection to physical block addresses associated with logical block addresses in another logical block address collection will effectively spread writes across the physical block addresses of the memory devices. Thus, the processor may swap physical locations (physical block addresses) of data from the respective logical block address collection with physical locations (physical block addresses) of data from another logical block address collection that has a lower transient write counter value. In some examples, in addition to basing the determination on the transient write counter value, the processor additionally may base the determination of whether to swap data between physical locations associated with different logical block address collections on a permanent write count value, which tracks a number of writes to a logical block address collection prior to the last data swap involving the logical block address collection. 
     Maintaining write counters for logical block address collections rather than individual logical blocks may consume less space overhead compared to maintaining write counters for each respective logical block. Similarly, maintaining write counters for logical block collections rather than continuously swapping data between physical blocks may reduce a number of writes for each physical block while still providing sufficient wear leveling. By utilizing less space overhead for the write counters and moving data between physical blocks of the storage device less frequently, techniques of the disclosure may improve the longevity and performance of the storage device. 
     In some examples, the processor may additionally and optionally rearrange physical locations (e.g., physical blocks) of data within a logical block collection to reduce the probability of writing data to a particular physical location associated with the logical block address collection much more frequently than other physical locations associated with the logical block address collection. By moving physical locations of data within a particular logical block address collection, techniques of this disclosure may reduce the probability of certain physical locations associated with a logical block address collection wearing out prematurely. 
       FIG. 1  is a conceptual and schematic block diagram illustrating an example storage environment  2  in which storage device  6  may function as a storage device for host device  4 , in accordance with one or more techniques of this disclosure. For instance, host device  4  may utilize non-volatile memory devices included in storage device  6  to store and retrieve data. In some examples, storage environment  2  may include a plurality of storage devices, such as storage device  6 , which may operate as a storage array. For instance, storage environment  2  may include a plurality of storages devices  6  configured as a redundant array of inexpensive/independent disks (RAID) that collectively function as a mass storage device for host device  4 . 
     Storage environment  2  may include host device  4  which may store data to and/or retrieve data from one or more storage devices, such as storage device  6 . As illustrated in  FIG. 1 , host device  4  may communicate with storage device  6  via interface  14 . Host device  4  may include any of a wide range of devices, including computer servers, network attached storage (NAS) units, desktop computers, notebook (i.e., laptop) computers, tablet computers, set-top boxes, telephone handsets such as so-called “smart” phones, so-called “smart” pads, televisions, cameras, display devices, digital media players, video gaming consoles, video streaming device, and the like. 
     As illustrated in  FIG. 1 , storage device  6  may include controller  8 , non-volatile memory array  10  (NVMA  10 ), power supply  11 , volatile memory  12 , and interface  14 . In some examples, storage device  6  may include additional components not shown in  FIG. 1  for sake of clarity. For example, storage device  6  may include a printed board (PB) to which components of storage device  6  are mechanically attached and which includes electrically conductive traces that electrically interconnect components of storage device  6 , or the like. In some examples, the physical dimensions and connector configurations of storage device  6  may conform to one or more standard form factors. Some example standard form factors include, but are not limited to, 3.5″ hard disk drive (HDD), 2.5″ HDD, 1.8″ HDD, peripheral component interconnect (PCI), PCI-extended (PCI-X), PCI Express (PCIe) (e.g., PCIe x1, x4, x8, x16, PCIe Mini Card, MiniPCI, etc.), M.2, or the like. In some examples, storage device  6  may be directly coupled (e.g., directly soldered) to a motherboard of host device  4 . 
     Storage device  6  may include interface  14  for interfacing with host device  4 . Interface  14  may include one or both of a data bus for exchanging data with host device  4  and a control bus for exchanging commands with host device  4 . Interface  14  may operate in accordance with any suitable protocol. For example, interface  14  may operate in accordance with one or more of the following protocols: advanced technology attachment (ATA) (e.g., serial-ATA (SATA), and parallel-ATA (PATA)), Fibre Channel, small computer system interface (SCSI), serially attached SCSI (SAS), peripheral component interconnect (PCI), PCI-express, Non-Volatile Memory Express (NVMe), or the like. The electrical connection of interface  14  (e.g., the data bus, the control bus, or both) is electrically connected to controller  8 , providing electrical connection between host device  4  and controller  8 , allowing data to be exchanged between host device  4  and controller  8 . In some examples, the electrical connection of interface  14  may also permit storage device  6  to receive power from host device  4 . 
     Storage device  6  includes NVMA  10 , which includes a plurality of memory devices  16 Aa- 16 Nn (collectively, “memory devices  16 ”). Each of memory devices  16  may be configured to store and/or retrieve data. For instance, a memory device of memory devices  16  may receive data and a message from controller  8  that instructs the memory device to store the data. Similarly, the memory device of memory devices  16  may receive a message from controller  8  that instructs the memory device to retrieve data. In some examples, each of memory devices  16  may be referred to as a die. In some examples, a single physical chip may include a plurality of dies (i.e., a plurality of memory devices  16 ). In some examples, each of memory devices  16  may be configured to store relatively large amounts of data (e.g., 128 MB, 256 MB, 512 MB, 1 GB, 2 GB, 4 GB, 8 GB, 16 GB, 32 GB, 64 GB, 128 GB, 256 GB, 512 GB, 1 TB, etc.). 
     In some examples, memory devices  16  may include any type of non-volatile memory devices. Some examples of memory devices  16  include, but are not limited to flash memory devices (e.g., NAND or NOR), phase-change memory (PCM) devices, resistive random-access memory (ReRAM) devices, magnetoresistive random-access memory (MRAM) devices, ferroelectric random-access memory (F-RAM), holographic memory devices, and any other type of non-volatile memory devices. Unlike flash memory devices, PCM devices, ReRAM devices, MRAM devices, and F-RAM devices may not require stale block reclamation (e.g., garbage collection), but still may utilize wear leveling to reduce effects of limited write endurance of individual memory cells. 
     In some examples, memory devices  16  may include flash memory devices. Flash memory devices may include NAND or NOR based flash memory devices, and may store data based on a charge contained in a floating gate of a transistor for each flash memory cell. In NAND flash memory devices, the flash memory device may be divided into a plurality of blocks which may be divided into a plurality of pages. Each block of the plurality of blocks within a particular memory device may include a plurality of NAND cells. Rows of NAND cells may be electrically connected using a word line to define a page of a plurality of pages. Respective cells in each of the plurality of pages may be electrically connected to respective bit lines. In some examples, controller  8  may write data to and read data from NAND flash memory devices at the page level and erase data from NAND flash memory devices at the block level. Additional details of memory devices  16  are discussed below with reference to  FIG. 2 . 
     In some examples, it may not be practical for controller  8  to be separately connected to each memory device of memory devices  16 . As such, the connections between memory devices  16  and controller  8  may be multiplexed. As an example, memory devices  16  may be grouped into channels  18 A- 18 N (collectively, “channels  18 ”). For instance, as illustrated in  FIG. 1 , memory devices  16 Aa- 16 An may be grouped into first channel  18 A, and memory devices  16 Na- 16 Nn may be grouped into N th  channel  18 N. The memory devices  16  grouped into each of channels  18  may share one or more connections to controller  8 . For instance, the memory devices  16  grouped into first channel  18 A may be attached to a common I/O bus and a common control bus. Storage device  6  may include a common I/O bus and a common control bus for each respective channel of channels  18 . In some examples, each channel of channels  18  may include a set of chip enable (CE) lines which may be used to multiplex memory devices on each channel. For example, each CE line may be connected to a respective memory device of memory devices  18 . In this way, the number of separate connections between controller  8  and memory devices  18  may be reduced. Additionally, as each channel has an independent set of connections to controller  8 , the reduction in connections may not significantly affect the data throughput rate as controller  8  may simultaneously issue different commands to each channel. 
     Storage device  6  may include power supply  11 , which may provide power to one or more components of storage device  6 . When operating in a standard mode, power supply  11  may provide power to the one or more components using power provided by an external device, such as host device  4 . For instance, power supply  11  may provide power to the one or more components using power received from host device  4  via interface  14 . In some examples, power supply  11  may include one or more power storage components configured to provide power to the one or more components when operating in a shutdown mode, such as where power ceases to be received from the external device. In this way, power supply  11  may function as an onboard backup power source. Some examples of the one or more power storage components include, but are not limited to, capacitors, super capacitors, batteries, and the like. 
     Storage device  6  also may include volatile memory  12 , which may be used by controller  8  to store information. In some examples, controller  8  may use volatile memory  12  as a cache. For instance, controller  8  may store cached information in volatile memory  12  until the cached information is written to memory devices  16 . Volatile memory  12  may consume power received from power supply  11 . Examples of volatile memory  12  include, but are not limited to, random-access memory (RAM), dynamic random access memory (DRAM), static RAM (SRAM), and synchronous dynamic RAM (SDRAM (e.g., DDR1, DDR2, DDR3, DDR3L, LPDDR3, DDR4, and the like). 
     Storage device  6  includes controller  8 , which may manage one or more operations of storage device  6 . For example, controller  8  may manage the reading of data from and/or the writing of data to memory devices  16 . In some instances, controller  8  may receive a command from host device  4  that includes data and specifies a logical block address (LBA) at which to write the data. Controller  8  may write the data to a physical block address (PBA) of memory devices  16  that corresponds to the LBA specified by host device  4 . However, writing data to a particular PBA of a particular memory device  16  many times may cause the particular memory device  16  to wear out faster than other memory devices  16 . 
     In some examples, host  4  includes wear management module (WMM)  31 . In other examples, controller  8  includes wear management module (WMM)  30 . In other examples, host  4  includes WMM  31  and controller  8  includes WMM  30 . WMM  30 ,  31  may be configured to manage the write locations for data received from host device  4  in order to improve the lifespan of storage device  6  by spreading writes across memory devices  16 . For example, WMMs  30 ,  31  may attempt to distribute writes evenly amongst memory devices  16  by managing the number of writes to a block. In some examples, WMMs  30 ,  31  may attempt to distribute writes evenly amongst memory devices by managing the number of writes to a logical block address collection, which may include a group of two or more logical block addresses. For example, WMMs  30 , 31  may swap physical locations at which data associated with a first logical block address collection is stored with physical locations at which data associated with a second logical block address collection is stored if the first logical block address collection has been written many times and the second logical block address collection has been written fewer times. 
     In some examples, WMMs  30 ,  31  may maintain a respective transient write counter associated with each logical block address collection, a respective permanent write counter associated with each logical block address collection, and a device write counter associated with NVMA  10 . Each respective transient write counter may store a count of the number of times data has been written to the respective logical block address collection over a certain amount of time (e.g., since the last wear leveling operation performed by controller  8  involving the respective logical block address collection). Each respective permanent write counter may store a count of the number of times data has been written to the respective logical block address collection over the life of storage device  6 , or over the life of storage device  6  prior to the last wear leveling operation involving the respective logical block address collection. The device write counter may store a count of the number of times data has been written to NVMA  10  (across all block collections). In some examples, the device write counter may count the number of times data has been written to NVMA  10  over the life of NVMA  10 . 
     In some examples, controller  8  includes WMM  30 , and controller  8  may receive a write command including data and an LBA from host device  4 . Controller  8  may determine a PBA corresponding to the LBA (e.g., based on an indirection or logical-to-physical table) and may write the received data to a memory device  16  at a PBA corresponding to the LBA. Alternatively, controller  8  may write the data to an available PBA (that is not currently storing valid data) and update the indirection table to reflect the LBA-to-PBA correspondence. In some examples, WMM  30  may increment (e.g., increase by one) the value of the device write counter to indicate that controller  6  has performed another write operation and increment the value of the transient write counter associated with the logical block address collection that includes the LBA specified by host device  4 . In response to incrementing the value of the device write counter, WMM  30  may determine whether to perform a comparison of the respective transient write counters associated with each respective logical block address collection. For example, WMM  30  may determine whether to perform a comparison of the respective transient write counters by comparing the device write counter to a threshold device write count. If the device write counter satisfies a threshold device write count (e.g., greater than or equal to the threshold write counter, such as 500 thousand writes, 1 million writes, 2 million writes, or the like), WMM  30  may determine whether to swap physical locations (e.g., PBAs) of data stored at LBAs in a first logical block address collection with physical locations (e.g., PBAs) of data stored at LBAs in a second logical block address collection. In some examples, WMM  30  may make the determination based on a value of a first transient write counter associated with the first logical block address collection and a value of a second transient write counter associated with the second logical block address collection. 
     In response to WMM  30  determining to swap the physical locations of data stored at the first logical block address collection with the physical locations of the data stored at the second logical block address collection, controller  8  may swap the physical locations of the data stored at the first and second logical block address collections. WMM  30  may set the values of the first transient write counter and the second transient write counter equal to a baseline value (e.g., zero). In some examples, WMM  30  may the add the value of the first transient write counter to a value of a first permanent write counter associated with the first logical block address collection prior to setting the first transient write counter to the baseline value. Similarly, WMM  30  may the add the value of the second transient write counter to a value of a second permanent write counter associated with the second logical block address collection prior to setting the second transient write counter to the baseline value. By adding the value of each transient write counter to a respective permanent write counter, WMM  30  may track the total number of writes to each respective logical block address collection. In this way, WMM  30  may track the total number of writes to each respective logical block address collection without updating each respective permanent write counter each time controller  8  writes to a respective logical address block collection. 
     In some examples, host device  4  may include WMM  31 . Host device  4  may send a write command including data and an LBA to controller  8 . In response to controller  8  writing data to a memory device  16  at a PBA corresponding to the LBA received from host device  4 , WMM  31  may increment the value of the device write counter to indicate that controller  6  has performed another write operation, and may increment the value of the transient write counter associated with the logical block address collection that includes the LBA specified by host device  4 . In response to incrementing the value of the device write counter, WMM  31  may determine whether to perform a comparison of the respective transient write counters associated with each respective logical block address collection. For example, WMM  31  may determine whether to perform a comparison of the respective transient write counters by comparing the device write counter to a threshold device write count. If the device write counter satisfies a threshold device write count, WMM  31  may determine whether to swap physical locations of data stored at LBAs in a first logical block address collection with physical locations of data stored at LBAs in a second logical block address collection. In some examples, WMM  31  may make the determination based on a value of a first transient write counter associated with the first logical block address collection and a value of a second transient write counter associated with the second logical block address collection. 
     In response to WMM  31  determining to swap the physical location of data stored at the first logical block address collection with physical location of data stored at the second logical block address collection, controller  8  may swap physical locations of the data in the first and second logical block address collections. WMM  31  may set the value of the first transient write counter and the second transient write counter equal to a baseline value. In some examples, WMM  31  may the add the value of the first transient write counter and the value of the second transient write counter to a value of respective permanent write counter associated with the respective logical block address collection prior to setting the transient write counters to the baseline value. By adding the value of the transient write counter to a respective permanent write counter, WMM  31  may track the total number of writes to the respective logical block address collection. 
     In this manner, WMMs  30 ,  31  may provide improved wear leveling techniques. By maintaining write counters for each logical block address collection rather than each logical block address, WMMs  30 ,  31  may reduce the number of counters while still providing sufficient wear leveling. Reducing the number of counters may reduce the space overhead consumed by the counters and may improve performance of storage device  6 . By swapping physical locations of the data only when a certain logical block address collection has been written more times than another logical block address collection, rather than continuously swapping the physical locations of the data, WMMs  30 ,  31  may perform wear leveling as needed, which may reduce the amount of unnecessary swapping. By reducing the number of write counters and performing wear leveling as needed, the described techniques may improve the longevity and performance of storage device  6 . 
       FIG. 2  is a conceptual block diagram illustrating an example memory device  16 Aa that includes a plurality of blocks  17 A- 17 N (collectively, “blocks  17 ”), each block including a plurality of pages  19 Aa- 19 Nm (collectively, “pages  19 ”). Each block of blocks  17  may include a plurality of NAND cells. Rows of NAND cells may be serially electrically connected using a word line to define a page (one page of pages  19 ). Respective cells in each of a plurality of pages  19  may be electrically connected to respective bit lines. Controller  8  may write data to and read data from NAND flash memory devices at the page level and erase data from NAND flash memory devices at the block level. A group of two or more blocks may be referred to a logical block address collection. For example, logical block address collection  20 A may include blocks  17 A- 17 B and logical block address collection  20 B may include blocks  17 M- 17 N. 
       FIG. 3  is a conceptual and schematic block diagram illustrating example details of controller  8 . In some examples, controller  8  may include an address translation module  22 , a write module  24 , a scheduling module  26 , a read module  28 , a wear management module (WMM)  30 , and a plurality of channel controllers  32 A- 32 N (collectively, “channel controllers  32 ”). In other examples, controller  8  may include additional modules or hardware units, or may include fewer modules or hardware units. Controller  8  may include one or more microprocessors, digital signal processors (DSP), application specific integrated circuits (ASIC), field programmable gate arrays (FPGA), or other digital logic circuitry. 
     Controller  8  may interface with the host device  4  via interface  14  and manage the storage of data to and the retrieval of data from memory devices  16 . For example, write module  24  of controller  8  may manage writes to memory devices  16 . For example, write module  24  may receive a message from host device  4  via interface  14  instructing storage device  6  to store data associated with a logical address and the data, which may be referred to as user data. Write module  24  may manage writing of the user data to memory devices  16 . 
     For example, write module  24  may communicate with address translation module  22 , which manages translation between logical addresses used by host device  4  to manage storage locations of data and physical block addresses used by write module  24  to direct writing of data to memory devices. Address translation module  22  of controller  8  may utilize a flash translation layer or indirection table that translates logical addresses (or logical block addresses) of data stored by memory devices  16  to physical block addresses of data stored by memory devices  16 . For example, host device  4  may utilize the logical block addresses of the data stored by memory devices  16  in instructions or messages to storage device  6 , while write module  24  utilizes physical block addresses of the data to control writing of data to memory devices  16 . (Similarly, read module  28  may utilize physical block addresses to control reading of data from memory devices  16 .) The physical block addresses correspond to actual, physical blocks of memory devices  16 . In some examples, address translation module  22  may store the flash translation layer or table in volatile memory  12 . 
     In this way, host device  4  may be allowed to use a static logical block address for a certain set of data, while the physical block address at which the data is actually stored may change. Address translation module  22  may maintain the flash translation layer or indirection table to map the logical block addresses to physical block addresses to allow use of the static logical block address by the host device  4  while the physical block address associated with the data may change, e.g., due to wear leveling, garbage collection, or the like. 
     As discussed above, write module  24  of controller  8  may perform one or more operations to manage the writing of data to memory devices  16 . For example, write module  24  may manage the writing of data to memory devices  16  by selecting one or more physical blocks within memory devices  16  to store the data and causing memory devices of memory devices  16  that include the selected physical blocks to actually store the data. As discussed above, write module  24  may cause address translation module  22  to update the flash translation layer or indirection table based on the selected physical blocks. For instance, write module  24  may receive a message from host device  4  that includes data and a logical block address, select a physical block within a particular memory device of memory devices  16  to store the data, cause the particular memory device of memory devices  16  to actually store the data (e.g., via a channel controller of channel controllers  32  that corresponds to the particular memory device), and cause address translation module  22  to update the flash translation layer or indirection table to indicate that the logical block address corresponds to the selected physical block within the particular memory device. 
     Read module  28  may similarly control reading of data from memory devices  16 . For example, read module  28  may receive a message from host device  4  requesting data with an associated logical block address. Address translation module  22  may convert the logical block address to a physical block address using the flash translation layer or table. Read module  28  then may control one or more of channel controllers  32  to retrieve the data from the physical block addresses. Similar to write module  24 , read module  28  may select one or more physical blocks and communicate a message to channel controllers  32  that may cause channel controllers  32  to read the data from the selected physical blocks. 
     Scheduling module  26  of controller  8  may perform one or more operations to schedule activities to be performed by memory devices  16 . For instance, scheduling module  26  may schedule requests received from other components of controller  8  to command one or more of memory devices  16  to perform one or more activities during run-time. In some examples, scheduling module  30  may schedule the requests to be performed in the order in which they were received (e.g., first-in first-out or FIFO). In some examples, scheduling module  26  may schedule the requests based one or more factors which may include, but are not limited to, the type of request (e.g., a read request, a write request, an erase request, a garbage collection request, etc.), an amount of time elapsed since the request was received, an amount of power that would be consumed by performance of the request, bandwidth considerations, and the like. 
     Controller  8  may receive a first write command from host device  4  that includes data and at least one logical block address associated with the data. In response to receiving the first write command from host device  4 , write module  24  may determine at which physical locations of memory devices  16  to write the data. For example, write module  24  may request from address translation module  22  one or more physical block addresses that are empty (e.g., store no data), partially empty (e.g., only some pages of the physical block store data), or store at least some invalid (or stale) data. Upon receiving the one or more physical block addresses, write module  24  may define and/or select one or more physical blocks, and communicate a message to channel controllers  32 A- 32 N (collectively, “channel controllers  32 ”), which causes the channel controllers  32  to write the data to the physical blocks. 
     Each channel controller of channel controllers  32  may be connected to a respective channel of channels  18 . In some examples, controller  8  may include the same number of channel controllers  32  as the number of channels  18  of storage device  2 . Channel controllers  32  may perform the intimate control of addressing, programming, erasing, and reading of memory devices  16  connected to respective channels, e.g., under control of write module  24  and/or read module  28 . 
     In some examples (e.g., where memory devices  16  include flash memory devices), a large current may be used in order to write a bit with a logical value of 0 (charged) to a bit with a previous logical value of 1 (uncharged). This current may be sufficiently large that it may cause inadvertent changes to the charge of adjacent flash memory cells. To protect against inadvertent changes, an entire block of flash memory cells may be erased to a logical value of 1 (uncharged) prior to writing any data to cells within the block. Because of this, flash memory cells may be erased at the block level and written at the page level. However, writing data and erasing data may cause flash memory cells to wear. For instance, wear to flash memory cells may occur when flash memory cells are erased due to the relatively high voltages used to erase the flash memory cells. Over a plurality of erase cycles, the relatively high voltages may result in changes to the flash memory cells. Eventually, the flash memory cells may wear out, such that data may no longer be written to the cells. Similarly, other types of non-volatile memory (e.g., PCM, ReRAM, MRAM, or the like) may also wear out over time such the memory device may no longer write data to particular cells. 
     In some examples, controller  8  may perform wear leveling operations to reduce the probability of a particular memory cell wearing out prematurely. By utilizing wear leveling techniques, controller  8  may spread writes among different memory cells, which may help increase the longevity of the memory devices. In some examples, the described wear leveling techniques may apply to any type of NVM (e.g., flash, PCM, ReRAM, MRAM, or the like). 
     WMM  30  may manage wear leveling operations. In some examples, WMM  30  may manage different types of wear leveling operations. In one example, WMM  30  may manage inter-block collection wear leveling. For example, WMM  30  may perform in inter-block collection wear leveling by periodically moving data associated with a first logical block address collection from a first physical location to a second physical location not associated with the first logical block address collection. For example, WMM  30  may swap the physical location of data stored at logical block addresses in a first logical block address collection with the physical location of data stored at logical block addresses in a second logical block address collection. In another example, WMM  30  may manage intra-block collection wear leveling. For example, WMM  30  may manage intra-block collection wear leveling by periodically rearranging data stored at physical locations associated with the first logical block address collection. For example, WMM  30  may rearrange data stored at physical locations associated with the first logical block address collection by swapping the physical location of data stored at a first logical address (e.g., a logical page, word, or byte) associated with the first logical block address collection and a physical location of data stored at a second logical address (e.g., logical page, word, or byte) associated with first logical block address collection. 
     In some examples, WMM  30  may determine whether to perform a wear leveling operation based on one or more write counters. For example, WMM  30  may maintain a device write counter, a plurality of transient write counters, and a plurality of permanent write counters. As described above with reference to  FIG. 1 , the device write counter may store a count of the number of times data has been written to NVMA  10 . The plurality of permanent write counters may include a respective permanent write counter associated with each respective logical block address collection of the plurality of logical block address collections. Each respective permanent write counter may store a count of the number of times data has been written to the respective logical block address collection (e.g., over the life of storage device  6  or over the life of storage device  6  prior to the last wear leveling operation involving the respective logical block address collection). Likewise, the plurality of transient write counters may include a respective transient write counter associated with each respective logical block address collection of the plurality of logical block address collections. Each respective transient write counter may store a count of the number of times data has been written to the respective logical block address collection within a certain amount of time (e.g., since the last inter-block collection wear leveling operation involving the respective logical block address collection). 
     In some examples, WMM  30  may determine whether to perform an inter-block collection wear leveling operation based on a comparison of at least one write counter associated with a first logical block address collection and at least one write counter associated with a second logical block address collection. In some instances, WMM  30  may compare the respective write counters after every write. 
     In other instances, WMM  30  may compare the respective write counters after a certain number of writes. For example, if the value of the device write counter satisfies a threshold device write count, WMM  30  may determine that a certain number of writes have occurred and that WMM  30  should compare the respective write counters. In some examples, in response to performing a first write, WMM  30  may update (e.g., increment by one) the value of the device write counter and determine whether the value of the device write counter satisfies a threshold device write count. 
     In some examples, WMM  30  may determine that the device write counter satisfies a threshold if the value stored at the device write counter is equal to or exceeds one of a plurality of threshold device write counts. For instance, WMM  30  may include multiple threshold device write counts (e.g., 500 thousand writes, 1 million writes, 1.5 million writes, or the like). In other words, WMM  30  may determine that the device write counter satisfies the threshold after every 500 thousand writes. Thus, if the device write counter reaches one of the plurality of threshold device write counts, the value of the device write counter may satisfy the threshold and WMM  30  may compare the respective transient write counters. 
     In other examples, WMM  30  may determine that the device write counter satisfies the threshold if the value stored at the device write counter is greater than or equal to a threshold device write count. For instance, WMM  30  may include a single threshold device write count (e.g., 1 million writes). In response to determining that the value of the device write counter is greater than or equal to the threshold device write count, WMM  30  may reset the device write count to a baseline value (e.g., zero) and compare the respective transient write counters. 
     In still other examples, WMM  30  may determine that the device write counter satisfies a threshold if the device write counter is divisible by an integer. In some instances, the device write counter may be divisible by an integer if performing a modulo operation of the device write counter and the threshold device write count equals a particular value. The modulo operation may calculate the remainder after dividing the device write counter by the threshold device write count. WMM  30  may, in some examples, determine that the device write counter is divisible by an integer if the remainder equals a particular value (e.g., zero). In some examples, in response to determining that the device write counter satisfies the threshold, WMM  30  may compare the respective transient write counters. 
     As discussed above, WMM  30  may determine whether to perform an inter-block collection wear leveling operation based on one or more write counters in response to determining that the value of the device write counter satisfies a threshold. WMM  30  may determine whether to perform an inter-block collection wear leveling operation based on a comparison of a first transient write counter associated with a first logical block address collection and a second transient write counter associated with a second logical block address collection. In other words, WMM  30  may determine whether to swap the physical locations of the data stored at logical block addresses in the first logical block address collection and the physical locations of the data stored at logical block addresses in the second logical block address collection based on respective transient write counters associated with the respective logical block address collections. For example, WMM  30  may determine to swap physical locations of the data associated with the respective logical block address collections if the value of the first transient write counter (denoted as C 1,TRANS ) is greater than a predetermined number (denoted as P) multiplied by the value of the second transient write counter (also denoted as C 2,TRANS ). In other words, WMM  30  may determine to swap physical locations of data associated with the respective logical block collections if:
 
 C   1,TRANS   &gt;P*C   2,TRANS .  Equation 1:
 
     For example, if C 1,TRANS =1200, C 2,TRANS =200, and the predetermined number P equals 5, WMM  30  may determine to swap the physical locations of the data stored at logical block addresses in the first logical block address collection and the physical locations of the data stored at logical block addresses in the second logical block address collection because C 1,TRANS  (1200) is greater than the predetermined number P multiplied by C 2,TRANS  (5*200=1000). It should be understood that the predetermined number shown here is given for illustrative purposes only and that other values may be used for the predetermined number. 
     In some examples, WMM  30  may determine whether to perform an inter-block collection wear leveling operation based on a first transient write counter associated with a first logical block address collection, a first permanent write counter associated with the first logical block address collection, a second transient write counter associated with a second logical block address collection, and a second permanent write counter associated with the second logical block address collection. In other words, WMM  30  may determine whether to swap the physical locations of the data stored at logical block addresses in the first logical block address collection and the physical locations of the data stored at logical block addresses in the second logical block address collection based on respective transient write counters associated with the respective logical block address collections and respective permanent write counters associated with the respective logical block address collections. For example, WMM  30  may sum the value of the first transient write counter (C 1,TRANS ) and the value of the first permanent write counter (denoted as C 1,PERM ) to determine a first total write value (also denoted as C 1,TOTAL ) and may sum the value of the second transient write counter (C 2,TRANS ) and the value of the second permanent write counter (denoted as C 2,PERM ) to determine a second total write value (also denoted as C 2,TOTAL ). WMM  30  may determine to swap physical locations of the data associated with the respective logical block address collections in response to determining the first total write value is greater than a predetermined number P multiplied by the second total write value. In other words, WMM  30  may determine to swap physical locations of the data associated with the respective logical block address collections if:
 
 C   1,TOTAL   &gt;P*C   2,TOTAL .  Equation 2:
 
     For example, if C 1,TRANS =1200, C 1,PERM ==2000, C 2,TRANS =200, and C 2,PERM =400, C 1,TOTAL =3200 and C 2,TOTAL =600. In this example, if the predetermined number P=5, WMM  30  may determine to swap the physical locations of the data stored at logical block addresses in the first logical block address collection and the physical locations of the data stored at logical block addresses in the second logical block address collection because C 1,TOTAL  (3200) is greater than the predetermined number P multiplied by C 2,TOTAL  (5*600=3000). 
     In some examples, WMM  30  may determine whether to perform an inter-block collection wear leveling operation based on the first total write value, the second total write value, the first transient write value, and the second transient write value. In other words, WMM  30  may determine whether to swap the physical locations of the data stored at logical block addresses in the first logical block address collection and the physical locations of the data stored at logical block addresses in the second logical block address collection based on respective transient write counters associated with the respective logical block address collections and respective total write values associated with the respective logical block address collections. For example, WMM  30  may determine to swap physical locations of the data associated with the respective logical block address collections in response to determining that the first total write value is greater than the predetermined number P multiplied by the second total write value and that value of the first transient write counter is greater than the value of the second transient write counter. In other words, WMM  30  may determine to swap physical locations of the data associated with the respective logical block address collections if:
 
 C   1,TOTAL   &gt;P*C   2,TOTAL  and  Equation 3:
 
 C   1,TRANS   &gt;C   2,TRANS .  Equation 4:
 
     For example, if C 1,TRANS =1200, C 1,TOTAL =3200, C 2,TRANS =200, C 2,TOTAL =600, and the predetermined number P=5, then C 1,TOTAL  (3200) is greater than the predetermined number multiplied by C 2,TOTAL  (5*600=3000) and C 1,TRANS  (1200) is greater than C 2,TRANS  (200). In this example, WMM  30  may determine to swap the physical locations of the data stored at logical block addresses in the first logical block address collection and the physical locations of the data stored at logical block addresses in the second logical block address collection because both conditions given by Equations 3 and 4 are satisfied. 
     In response to determining to swap the physical locations of the data stored at logical block addresses in the first logical block address collection and the physical locations of the data stored at logical block addresses in the second logical block address collection, WMM  30  may swap the physical locations of the data stored at logical block addresses in the first logical block address collection and the physical locations of the data stored at logical block addresses in the second logical block address collection. For example, WMM  30  may copy data stored at a first physical location associated with the first transient write counter to a third physical location (e.g., a different memory device  16  or volatile memory  12 ), copy data stored at the second physical location associated with the second transient write counter to the first physical location, and copy the data from the third physical location to the second physical location. WMM  30  may cause address translation module  22  to update the flash translation layer or indirection table to indicate that the first logical block address collection now corresponds to the second physical location and that the second logical block address collection now corresponds to the first physical location. In further response to determining to perform a wear leveling operation, WMM  30  may reset the value of the first transient write counter and the value of the second transient write counter to a baseline value (e.g., zero). 
     Controller  8  may receive a second write command including data and a logical block address from host device  4 . The logical block address may correspond to a third logical block address collection, which be associated with a third transient write counter and a third permanent write counter. In response to receiving the second write command from host device  4 , write module  24  may determine at which physical locations of memory devices  16  to write the data in a manner similar to the manner described above with reference to the first write command. For example, write module  24  may cause the received data to be written at a physical location associated with the third logical block collection. In some examples, in response to writing data associated with the third logical block address collection, WMM  30  may update the third transient write counter. 
     WMM  30  may determine whether to perform an intra-block collection wear leveling operation based on the value of the third transient write counter or based on the sum of the of the third transient write counter and the value of at the third permanent write counter, the sum being referred to as the third total write value. In other words, WMM  30  may determine whether to rearrange data stored at physical locations associated with the third logical block address collection based on whether the value of at the third transient write counter satisfies a threshold block collect count or the third total write value satisfies a threshold block collection count. 
     In some examples, WMM  30  may determine that the third transient write counter (or third total write value) satisfies a threshold block collection count if the value of the third transient write counter (or the third total write value) is equal to one of a plurality of threshold block collection counts. For instance, WMM  30  may include multiple threshold block collection counts (e.g., one thousand writes, two thousand writes, or the like). Thus, if the third transient write counter (or the third total write value) reaches one of the plurality of threshold block collection counts, the value of the third transient write counter (or the third total write value) may satisfy the threshold block collection counts and WMM  30  may determine to rearrange data stored at pages associated with the first logical block address collection. 
     In other examples, WMM  30  may determine that the third transient write counter (or third total write value) satisfies a threshold block collection count if the third transient write counter (or third total write value) is divisible by an integer. In some instances, the third transient write counter (or third total write value) is divisible by an integer if performing a modulo operation of the third transient write counter (or third total write value) and the threshold block collection count equals a particular value. The modulo operation may calculate the remainder after dividing the third transient write counter (or third total write value) by the threshold block collection count. WMM  30  may, in some examples, determine that the third transient write counter (or third total write value) is divisible by an integer if the remainder equals a particular value (e.g., zero). In some examples, in response to determining that the third transient write counter or the third total write value satisfies the threshold block collection count, WMM  30  may WMM  30  may determine to rearrange data stored at pages associated with the first logical block address collection. 
     It is to be understood that the threshold write counts described herein (whether they be a threshold device write count, a threshold block collection count, or any other threshold write counts described herein) are merely examples and that any value may be used for the various threshold write counts. 
     In response to determining to rearrange data at physical locations associated with the third logical block address collection, WMM  30  may rearrange the data stored at physical locations associated with the third logical block address collection by swapping the physical location of data stored at a first logical address (e.g., a logical page, word, or byte) associated with the third logical block address collection and a physical location of data stored at a second logical address associated with third logical block address collection. In some examples, WMM  30  may perform the swap based on an offset value associated with the third logical block address collection. For example, WMM  30  may swap data from a first physical location to a second physical location that is offset from the first physical location by the offset value. In some examples, WMM  30  manages a single offset value for all of the logical block address collections. In other examples, WMM  30  may maintain a respective offset value associated with each respective logical block address collection. 
     In some examples, the offset value may be a fixed offset value. For instance, consider an example where the fixed offset value associated with the third logical block address collection equals 50 and the third logical block address collection includes 256 pages. In this example, in response to determining that the value of the third transient write counter (or the third total write value) satisfies the threshold, WMM  30  may copy a logical unit of data (e.g., a page) of data from a first physical location (e.g., physical page-1) to a second physical location (e.g., physical page-51), a logical unit of data (e.g., a page) from a third physical location (e.g., physical page-2) to a fourth physical location (e.g., physical page-52), and so on. The next time WMM  30  determines to rearrange data stored at physical locations associated with the third logical block address collection, WMM  30  may again copy a logical unit of data (e.g., a page) from the first physical location (e.g., physical page-1) to the second physical location (e.g., physical page-51), a logical unit of data (e.g., a page) from the third physical location (e.g., physical page-2) to the fourth physical location (e.g., physical page-52), and so on. Thus, after two rearranging operations, WMM  30  may have moved a logical page of data that was originally stored physical page-1 to physical page-51 and then to physical page-101. 
     In other examples, the offset value may be a random offset value. For example, WMM  30  may periodically change the offset value associated with the third logical block address collection. For instance, in some examples, WMM  30  may update the random offset value from a first random offset value (e.g., 50) to a second random offset value (e.g., 121). WMM  30  may update the random value based on a random number generator In some examples, the random number generator may generate a value between 1 and Z, where Z equals a number of physical units of data (e.g., pages, words, or bytes) associated with the logical block address collection. For example, consider an example where the fixed offset value associated with the third logical block address collection initially equals 50 and the third logical block address collection includes 256 pages. In this example, WMM  30  may copy a logical unit of data (e.g., a page) from a first physical location (e.g., physical page-1) to a second physical location (e.g., physical page-51), a logical unit of data (e.g., a page) from a third physical location (e.g., physical page-2) to a third physical location (e.g., physical page-52), and so on. WMM  30  may update the random offset value from a value of 50 to a value of 121. The next time WMM  30  determines to rearrange data stored at physical locations associated with the third logical block address collection, WMM  30  may copy a logical unit of data (e.g., a page) from the first physical location (e.g., physical page-1) to a fifth physical location (e.g., physical page-122), a logical unit of data (e.g., a page) from the third physical location (e.g., physical page-2) to a sixth physical location (e.g., physical page-123), and so on. Thus, after two rearranging operations, WMM  30  may have moved a logical page of data that was originally stored at a physical page-1 to physical page-51 and then to physical page-172. 
     In some examples, WMM  30  may store the various write counters (e.g., the device write counter, the respective transient write counters, the respective permanent write counters, or any combination therein) in volatile memory  12 , NVMA  10 , or a combination thereof. In some examples, WMM  30  may store all of the respective transient write counters and the respective permanent write counters in NVMA  10  and may store a subset of the respective transient write counters and permanent write counters in volatile memory  12 . 
     For instance, in response to storage device  6  turning on, WMM  30  may load block collection specific parameters at device start up. In other words, WMM  30  may retrieve a subset of transient write counters, permanent write counters, or both, and may load the subset of transient write counters and permanent write counters to volatile memory  12 . In some examples, the subset of write counters may include the respective counters corresponding to the most frequently written logical block address collections, the most frequently read logical block address collections, or both. 
     WMM  30  may retrieve additional subsets of the write counters associated with respective additional logical block address collections as controller  8  receives write commands or read commands involving the respective additional logical block address collections. In some examples, WMM  30  may retrieve additional subset of writes counters associated with one or more respective additional logical block address collections if controller  8  determines the respective additional logical block address collections are likely to be used, even if controller  8  has not received a command involving the additional one or more logical block address collections. By loading the respective write counters as they are used (or likely to be used), WMM  30  may reduce the number of counters stored in volatile memory  12 , which may improve the performance of storage device  6 . 
     In some examples, where WMM  30  loads at least some of the respective write counters to volatile memory  12 , WMM  30  may periodically update the respective write counters stored at NVMA  10 . WMM  30  may update the respective write counters stored at NVMA  10  when storage device  6  is turned off (e.g., due to an intentional shut off or power failure). In this way, WMM  30  may retain a more accurate count for each of the respective write counters if storage device  6  loses power. 
       FIGS. 4A-4B  are conceptual and schematic block diagram illustrating example details of a write counter table, in accordance with one or more techniques of this disclosure.  FIG. 4A  illustrates example details of a write counter table  40  before performing an inter-block collection wear leveling operation. In other words, the write counter table  40  shown in  FIG. 4A  illustrates the respective values of the respective write counters before swapping the physical locations of the data stored at the logical block addresses in a first logical block address collection and the physical locations of data stored at logical block address in a second logical block address collection. Similarly,  FIG. 4B  illustrates the respective values of the respective write counters after swapping the physical locations of the data stored at the logical block addresses in a first logical block address collection and the physical locations of data stored at logical block address in a second logical block address collection. For ease of illustration only, the data structure will be described as a write counter table  40 ; however, the information within write counter table  40  may be stored in any type of data structure, such as an array, database, or the like. For purposes of illustration, the write counter table  40  will be described with reference to  FIGS. 1 and 3 . 
     Write counter table  40  may store write counter values associated with each respective logical block address collection. For example, write counter table  40  may include “n” rows, one row for each logical block address collection. Each row may include a plurality of columns, each column including respective write counters associated with respective logical block address collections. 
     For example, write counter table  40  may include at least one of the columns Logical Block Address Collection  42 , Physical Block Address Range  44 , Transient Write Counter  46 , Permanent Write Counter  48 , or Total Count Value  50 . In some examples, write counter table  40  may omit one or more of columns  42 - 50 , may include other columns storing other information, or a combination thereof. Logical Block Address Collection  42  may include a unique logical block address identifier to identify the logical block address collection. Physical Block Address Range  44  may store an indication of the physical block addresses corresponding to the logical block address within the respective logical block address collection. Transient write counter  46  may store a count of the number of times data has been written to the respective logical block address collection over a certain amount of time (e.g., since the last wear leveling operation performed by controller  8  that involved the respective logical block address collection). Permanent write counter  48  may store a count of the number of times data has been written to the respective logical block address collection over the life of storage device  6 , or over the life of storage device  6  prior to the last inter-block collection wear leveling operation involving the respective logical block address collection. Total Write Value  50  store a count of the total number of times data has been written to the respective logical block address collection. In some examples, WMM  30  may not actually store the Total Write Value  50  (e.g., in order to reduce the amount of memory required to store the counters) and may calculate the total number of times data has been written to a logical block address collection by summing the value of the respective transient write counter and the value of the respective permanent write counter. 
     In some examples, in response to determining that a device write counter satisfies a threshold, WMM  30  may determine whether to swap physical locations of the data stored at the logical block addresses in a first logical block address collection and the physical locations of data stored at logical block address in a second logical block address collection. WMM  30  may determine whether to swap based on the respective transient write counters  46 , the respective permanent write counters  48 , the total write value  50 , or a combination thereof. In some examples, WMM  30  may determine whether to swap based on comparing the write counter (e.g., transient write counter  46 , permanent write counter  48 , or total write value  50 ) with the largest value to write counter with the largest value. In some instances, may determine which write counter stores the largest value and which write counter stores the smallest value by sorting the transient write count values  44  from largest to smallest. In other instances, WMM  30  may determine which write counter stores the largest value and which write counter stores the smallest value by utilizing a priority queue. 
     In some examples, WMM  30  may determine whether to swap physical locations based on the swapping conditions shown in Equations 3 and 4, as described above. Referring to  FIG. 4A , WMM  30  may determine that the largest total write value  50  is associated with logical block address collection (#5) and that the smallest total write value  50  is associated with logical block address collection (#3). Thus, the value of the transient write counter associated with logical block address collection (#5) may be denoted as C 5,TRANS , the total write value associated with logical block address collection (#5) may be denoted as C 5,TOTAL , the value of the transient write counter associated with logical block address collection (#3) may be denoted as C 3,TRANS , and the total write value associated with logical block address collection (#3) may be denoted as C 3,TOTAL . Substituting into Equations 3 and 4 results in Equations 5 and 6:
 
 C   5,TOTAL   &gt;P*C   3,TOTAL  and  Equation 5:
 
 C   5,TRANS   &gt;C   3,TRANS .  Equation 6:
 
     If C 5,TRANS =1100, C 5,TOTAL =5350, C 3,TRANS =50, C 3,TOTAL =550, and the predetermined number P=2, WMM  30  may determine to swap the physical location of data stored at the logical block address in logical block address collection (#5) and the physical location of data stored at the logical block address in logical block address collection (#3) because both equations 5 and 6 are true. Thus, as illustrated by  FIG. 4B , the physical location of data associated with logical block address collection (#5) may be swapped from physical block address range (9,10) to physical block address range (5,6). Similarly, the physical location of data associated with logical block address collection (#3) may be swapped from physical block address range (5,6) to physical block address range (9,10). 
     In a similar manner, WMM  30  may determine the second largest total write value, the second smallest total write value, and may determine whether to swap physical locations of the data associated with the second largest total write value and the second smallest total write value. Referring to  FIG. 4A , WMM  30  may determine that the second largest total write value  50  is associated with logical block address collection (#1) and that the smallest total write value  50  is associated with logical block address collection (#2). Thus, the value of the transient write counter associated with logical block address collection (#1) may be denoted as C 1,TRANS , the total write value associated with logical block address collection (#1) may be denoted as C 1,TOTAL , the value of the transient write counter associated with logical block address collection (#2) may be denoted as C 2,TRANS , and the total write value associated with logical block address collection (#2) may be denoted as C 2,TOTAL . Substituting into Equations 3 and 4 results in Equations 7 and 8:
 
 C   1,TOTAL   &gt;P*C   2,TOTAL  and  Equation 7:
 
 C   1,TRANS   &gt;C   2,TRANS   Equation 8:
 
     If C 1,TRANS =1200, C 1,TOTAL =3200, C 2,TRANS ==200, C 2,TOTAL =600, and predetermined number P=2, WMM  30  may determine to swap the physical location of data stored at the logical block address in logical block address collection (#1) and the physical location of data stored at the logical block address in logical block address collection (#2) because both equations 7 and 8 are true. Thus, as illustrated by  FIG. 4B , the physical location of data associated with logical block address collection (#1) may be swapped from physical block address range (1,2) to physical block address range (3,4). Similarly, the physical location of data associated with logical block address collection (#2) may be swapped from physical block address range (3,4) to physical block address range (1,2). 
     WMM  30  may continue this process until there are no combinations of logical block address collections and write counters associated with the respective logical block address collections that satisfy the swapping equations. 
     In response to swapping physical locations of data stored at logical block addresses in a first logical block address collection and physical locations of data stored at logical block address in the second logical block address collection, WMM  30  may increase the value of the first permanent write counter associated with the first logical block address collection by the value of the first transient write counter. Similarly, WMM  30  may increase the value of the second permanent write counter associated with the second logical block address collection by the value of the second transient write counter. For example, WMM  30  may sum the respective values of the transient write counter and the respective values of the permanent write counter associated with logical block address collection (#5). Thus, WMM  30  may increase the value of the transient write counter associated with logical block address collection (#5) from 4250 to 5350. Similarly, WMM  30  may increase the value of the permanent write counters associated with logical block address collections (#s 1, 2, and 3). 
     In some examples, WMM  30  may swap the value of the respective permanent write counters and the value of the respective total write counters associated with each respective logical block address collection after summing the value of the respective transient write counter and the permanent write counter. For example, if C 5,PERM =5350 and C 3,PERM =550 after summing the respective transient write counters and the respective permanent write counters, WMM  30  may swap the value of the updated permanent write counters such that, after the swap, C 5,PERM =550 and C 3,PERM =5350. Thus, after the swap, the permanent write counter C 3,PERM  reflects the total number of writes to the physical block address range (9, 10) and the permanent write counter C 5,PERM  reflects the total number of writes to the physical block address range (5,6). In this way, permanent write counters  50  may correspond to the physical locations of the data and may track the actual number of writes to the respective physical block addresses. 
     In further response to swapping physical locations of data stored at logical block addresses in a first logical block address collection and physical locations of data stored at logical block address in the second logical block address collection, WMM  30  may update the respective transient write counters  46  by setting the value of the respective transient write counters to a baseline value (e.g., zero). For example, WMM  30  may set the value of the transient write counters associated with logical block address collections (#s 1, 2, 3, and 5) to zero. 
       FIG. 5  is a flow diagram illustrating example wear leveling operations of a solid state drive, in accordance with one or more techniques of this disclosure. For ease of illustration, the exemplary technique of  FIG. 5  will be described with concurrent reference to storage device  6  and controller  8  of  FIGS. 1 and 3 . However, the techniques may be used with any combination of hardware or software. 
     WMM  30  may determine whether to swap physical locations of data stored at logical block addresses in a first logical block address collection and physical locations of data stored at logical block addresses in a second logical block address collection ( 52 ). In some examples, WMM  30  may determine whether to swap the physical locations of the data based on a value of a first transient write counter associated with the first logical block address collection and a value of a second transient write counter associated with the second logical block address collection. In other examples, WMM  30  may determine whether to swap the physical locations of the data based on the sum of the value of a first transient write counter and a first permanent write counter associated with the first logical block address collection, also referred to as the first total write value, and the sum of the value of a second transient write counter and a second permanent write counter associated with the second logical block address collection, also referred to as the second total write value. In other examples, WMM  30  may determine whether to swap the physical locations of data based on the first transient write value and the first total write value associated with the first logical block address collection, and the second transient write value and the second total write value associated with the second logical block address collection. 
     In response to determining to swap the physical locations of the data stored at logical block addresses in the first logical block address collection and the physical locations of the data stored at logical block addresses in the second logical block address collection, WMM  30  may swap the physical locations of the data stored at logical block addresses in the first logical block address collection and the physical locations of the data stored at logical block addresses in the second logical block address collection ( 54 ). For example, WMM  30  may copy data stored at a first physical location associated with the first transient write counter to a third physical location (e.g., a different memory device  16  or volatile memory  12 ), copy data stored at the second physical location associated with the second transient write counter to the first physical location, and copy the data from the third physical location to the second physical location. 
       FIG. 6  is a flow diagram illustrating example wear leveling operations of a solid state drive, in accordance with one or more techniques of this disclosure. For ease of illustration, the exemplary technique of  FIG. 7  will be described with concurrent reference to storage device  6  and controller  8  of  FIGS. 1 and 3 . However, the techniques may be used with any combination of hardware or software. 
     In some examples, WMM  30  may load block collection specific parameters on devices startup ( 62 ). For example, WMM  30  may retrieve a plurality of transient write counters that are each associated with a respective logical block address collection of a plurality of logical block address collections, a plurality of permanent write counters that are each associated with a respective logical block address collection of the plurality of logical block address collections, or both. WMM  30  may load the plurality of transient write counters and/or permanent write counters to volatile memory  12 . In some examples, the plurality of transient and/or permanent write counters may include the respective of transient and/or permanent write counters corresponding to the most frequently written logical block address collections, the most frequently read logical block address collections, or both. 
     Write module  24  may write data to a first logical block address collection ( 64 ). For example, write module  24  may receive a write command from host device  4  that includes data and a logical block address, select a physical location (e.g., a PBA) within a particular memory device  16  to store the data, and store the data to the selected physical location. In some examples, WMM  30  may determine a first logical block address collection that includes the logical block address. In response to writing the data to the first physical location, WMM  30  may update a first transient write counter (C 1,TRANS ) associated with the first logical block address collection ( 66 ). For example, WMM  30  may increase by one the value of the first transient write counter. 
     In some examples, WMM  30  may determine whether to rearrange data stored at physical locations associated with the first logical block address collection based on a sum of the first transient write counter (C 1,TRANS ) and the first permanent write counter (C 1,PERM ) associated with the first logical block collection. For example, WMM  30  may determine whether a total number of writes to the first logical block address collection (C 1,TRANS +C 1,PERM ) satisfies a threshold block collection count ( 68 ). In some examples, WMM  30  may determine that the total number of writes to the first logical block address collection satisfies a threshold block collection count if the total number of writes to the first logical block address collection is equal to or exceeds one of a plurality of threshold block collection counts. In other examples, WMM  30  may determine that the total number of writes to the first logical block address collection satisfies a threshold block collection count if the total number of writes to the second logical block address collection is divisible by an integer. 
     In response to determining that the total number of writes to the first logical block address collection satisfies a threshold block collection count, WMM  30  may rearrange data stored at physical locations associated with the first logical block address collection based on a random offset value ( 70 ). For example, WMM  30  may rearrange the data stored at physical locations associated with the first logical block address collection by swapping the physical location of data stored at a first logical address (e.g., a logical page word, or byte) associated with the first logical block address collection and a physical location of data stored at a second logical address (e.g., a logical page or word) associated with first logical block address collection. In some examples, WMM  30  may perform the swap based on a random offset value associated with the first logical block address collection. For example, WMM  30  may swap data from a first physical location to a second physical location that is offset from the first physical location by the random offset value. 
     WMM  30  may update the random offset value ( 72 ). For example, WMM  30  may generate a random number and may set the random offset value equal to the value generated by the random number generator. 
     In some examples, WMM  30  may determine whether a total number of writes to storage device  6  since the last swap (e.g., the most recent inter-block collection wear leveling) satisfies a threshold number of writes ( 74 ). In some instances, WMM  30  may determine that the total number of writes to storage device  6  since the swap satisfies a threshold if a value of a device write counter is equal to one of a plurality of threshold device write counts. In other instances, WMM  30  may determine that the device write counter satisfies the threshold if the value of the device write counter is greater than or equal to a threshold device write count. In yet other instances, WMM  30  may determine that the total number of writes to storage device  6  since the last swap satisfies a threshold if the device write counter is divisible by an integer. 
     In response to determining that the total number of writes to storage device  6  satisfies the threshold number of writes, WMM  30  may determine whether to swap the physical locations of the data stored at logical block addresses in the second logical block address collection and the physical locations of the data stored at logical block addresses in the third logical block address collection. WMM  30  may determine whether to swap the physical locations of the data by determining whether a total write value associated with second block collection (C 2,TOTAL ) is greater than a predetermined number P multiplied by the total write value associated with a third block collection (C 3,TOTAL ) and whether a transient write counter associated with second block collection (C 2,TRANS ) is greater than a transient write counter associated with the third block collection (C 3,TRANS ) ( 76 ). 
     In response to determining that C 2,TOTAL &gt;P*C 3,TOTAL  and C 2,TRANS &gt;C 3,TRANS , WMM  30  may swap the physical locations of the data stored at logical block addresses in the second logical block address collection and the physical locations of the data stored at logical block addresses in the third logical block address collection ( 80 ). For example, WMM  30  may copy data stored at a first physical location associated with the first transient write counter to a third physical location (e.g., a different memory device  16  or volatile memory  12 ), copy data stored at the second physical location associated with the second transient write counter to the first physical location, and copy the data from the third physical location to the second physical location. WMM  30  may cause address translation module  22  to update the flash translation layer or indirection table to indicate that the first logical block address collection now corresponds to the second physical location and that the second logical block address collection now corresponds to the first physical location. 
     The techniques described in this disclosure may be implemented, at least in part, in hardware, software, firmware, or any combination thereof. For example, various aspects of the described techniques may be implemented within one or more processors, including one or more microprocessors, digital signal processors (DSPs), application specific integrated circuits (ASICs), field programmable gate arrays (FPGAs), or any other equivalent integrated or discrete logic circuitry, as well as any combinations of such components. The term “processor” or “processing circuitry” may generally refer to any of the foregoing logic circuitry, alone or in combination with other logic circuitry, or any other equivalent circuitry. A control unit including hardware may also perform one or more of the techniques of this disclosure. 
     Such hardware, software, and firmware may be implemented within the same device or within separate devices to support the various techniques described in this disclosure. In addition, any of the described units, modules or components may be implemented together or separately as discrete but interoperable logic devices. Depiction of different features as modules or units is intended to highlight different functional aspects and does not necessarily imply that such modules or units must be realized by separate hardware, firmware, or software components. Rather, functionality associated with one or more modules or units may be performed by separate hardware, firmware, or software components, or integrated within common or separate hardware, firmware, or software components. 
     The techniques described in this disclosure may also be embodied or encoded in an article of manufacture including a computer-readable storage medium encoded with instructions. Instructions embedded or encoded in an article of manufacture including a computer-readable storage medium encoded, may cause one or more programmable processors, or other processors, to implement one or more of the techniques described herein, such as when instructions included or encoded in the computer-readable storage medium are executed by the one or more processors. Computer readable storage media may include random access memory (RAM), read only memory (ROM), programmable read only memory (PROM), erasable programmable read only memory (EPROM), electronically erasable programmable read only memory (EEPROM), flash memory, a hard disk, a compact disc ROM (CD-ROM), a floppy disk, a cassette, magnetic media, optical media, or other computer readable media. In some examples, an article of manufacture may include one or more computer-readable storage media. 
     In some examples, a computer-readable storage medium may include a non-transitory medium. The term “non-transitory” may indicate that the storage medium is not embodied in a carrier wave or a propagated signal. In certain examples, a non-transitory storage medium may store data that can, over time, change (e.g., in RAM or cache). 
     Various examples have been described. These and other examples are within the scope of the following claims.