Chapter 21. Solid-State Disk Deployment Guidelines
Solid-state disks (SSD) are storage devices that use NAND flash chips to persistently store data. This sets them apart from previous generations of disks, which store data in rotating, magnetic platters. In an SSD, the access time for data across the full Logical Block Address (LBA) range is constant; whereas with older disks that use rotating media, access patterns that span large address ranges incur seek costs. As such, SSD devices have better latency and throughput.
Performance degrades as the number of used blocks approaches the disk capacity. The degree of performance impact varies greatly by vendor. However, all devices experience some degradation.
To address the degradation issue, the host system (for example, the Linux kernel) may use discard requests to inform the storage that a given range of blocks is no longer in use. An SSD can use this information to free up space internally, using the free blocks for wear-leveling. Discards will only be issued if the storage advertises support in terms of its storage protocol (be it ATA or SCSI). Discard requests are issued to the storage using the negotiated discard command specific to the storage protocol (
TRIM
command for ATA, and WRITE SAME
with UNMAP
set, or UNMAP
command for SCSI).
Enabling
discard
support is most useful when the following points are true:
- Free space is still available on the file system.
- Most logical blocks on the underlying storage device have already been written to.
For more information about
UNMAP
, see the section 4.7.3.4 of the SCSI Block Commands 3 T10 Specification.
Note
Not all solid-state devices in the market have
discard
support. To determine if your solid-state device has discard
support, check for /sys/block/sda/queue/discard_granularity
, which is the size of internal allocation unit of device.
Deployment Considerations
Because of the internal layout and operation of SSDs, it is best to partition devices on an internal erase block boundary. Partitioning utilities in Red Hat Enterprise Linux 7 chooses sane defaults if the SSD exports topology information. However, if the device does not export topology information, Red Hat recommends that the first partition should be created at a 1MB boundary.
SSD has various types of TRIM mechanism depending on the vendors choice. The early versions of disks improved the performance by compromising possible data leakage after the read command.
Following are the types of
TRIM
mechanism:
- Non-deterministic
TRIM
- Deterministic
TRIM
(DRAT) - Deterministic Read Zero after
TRIM
(RZAT)
The first two types of
TRIM
mechanism can cause data leakage as the read
command to the LBA after a TRIM
returns different or same data. RZAT returns zero after the read
command and Red Hat recommends this TRIM
mechanism to avoid data leakage. It is affected only in SSD. Choose the disk which supports RZAT mechanism.
Type of
TRIM
mechanism used depends on hardware implementation. To find the type of TRIM
mechanism on ATA, use the hdparm
command. See the following example to find the type of TRIM
mechanism:
#
hdparm -I /dev/sda | grep TRIM
Data Set Management TRIM supported (limit 8 block) Deterministic read data after TRIM
For more information, see
man hdparm
.
The Logical Volume Manager (LVM), the device-mapper (DM) targets, and MD (software raid) targets that LVM uses support discards. The only DM targets that do not support discards are dm-snapshot, dm-crypt, and dm-raid45. Discard support for the dm-mirror was added in Red Hat Enterprise Linux 6.1 and as of 7.0 MD supports discards.
Using RAID level 5 over SSD results in low performance if SSDs do not handle
discard
correctly. You can set discard in the raid456.conf
file, or in the GRUB2 configuration. For instructions, see the following procedures.
Procedure 21.1. Setting discard in raid456.conf
The
devices_handle_discard_safely
module parameter is set in the raid456
module. To enable discard in the raid456.conf
file:
- Verify that your hardware supports discards:
#
cat /sys/block/disk-name/queue/discard_zeroes_data
If the returned value is1
, discards are supported. If the command returns0
, the RAID code has to zero the disk out, which takes more time. - Create the
/etc/modprobe.d/raid456.conf
file, and include the following line:options raid456 devices_handle_discard_safely=Y
- Use the
dracut -f
command to rebuild the initial ramdisk (initrd
). - Reboot the system for the changes to take effect.
Procedure 21.2. Setting discard in the GRUB2 Configuration
The
devices_handle_discard_safely
module parameter is set in the raid456
module. To enable discard in the GRUB2 configuration:
- Verify that your hardware supports discards:
#
cat /sys/block/disk-name/queue/discard_zeroes_data
If the returned value is1
, discards are supported. If the command returns0
, the RAID code has to zero the disk out, which takes more time. - Add the following line to the
/etc/default/grub
file:raid456.devices_handle_discard_safely=Y
- The location of the GRUB2 configuration file is different on systems with the BIOS firmware and on systems with UEFI. Use one of the following commands to recreate the GRUB2 configuration file.
- On a system with the BIOS firmware, use:
#
grub2-mkconfig -o /boot/grub2/grub.cfg
- On a system with the UEFI firmware, use:
#
grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
- Reboot the system for the changes to take effect.
Note
In Red Hat Enterprise Linux 7, discard is fully supported by the ext4 and XFS file systems only.
In Red Hat Enterprise Linux 6.3 and earlier, only the ext4 file system fully supports discard. Starting with Red Hat Enterprise Linux 6.4, both ext4 and XFS file systems fully support discard. To enable discard commands on a device, use the
discard
option of the mount
command. For example, to mount /dev/sda2
to /mnt
with discard enabled, use:
#
mount -t ext4 -o discard /dev/sda2 /mnt
By default, ext4 does not issue the
discard
command to, primarily, avoid problems on devices which might not properly implement discard. The Linux swap
code issues discard
commands to discard-enabled devices, and there is no option to control this behavior.
Performance Tuning Considerations
For information on performance tuning considerations regarding solid-state disks, see the Solid-State Disks section in the Red Hat Enterprise Linux 7 Performance Tuning Guide.