page_title: Solid-state drive
section_title: Linux performance considerations
hierarchical_section_title: Solid-state drive / File system support for SSDs / Linux / Linux performance considerations
caption_attribution_description: English: Top view of a 400 GB add-in card model of the Intel SSD 750 series, which is a PCI Express&#160;3.0 ×4 expansion card using NVM Express as the logical device interface and MLC flash as the storage media (p/n: SSDPEDMW400G4R5)
context_page_description: A solid-state drive is a solid-state storage device that uses integrated circuit assemblies to store data persistently, typically using flash memory, and functioning as secondary storage in the hierarchy of computer storage. It is also sometimes called a solid-state device or a solid-state disk, even though SSDs lack the physical spinning disks and movable read–write heads used in hard drives or floppy disks.
  Compared with the electromechanical drives, SSDs are typically more resistant to physical shock, run silently, and have quicker access time and lower latency. SSDs store data in semiconductor cells. As of 2019, cells can contain between 1 and 4 bits of data. SSD storage devices vary in their properties according to the number of bits stored in each cell, with single-bit cells being generally the most reliable, durable, fast, and expensive type, compared with 2- and 3-bit cells, and finally quad-bit cells being used for consumer devices that do not require such extreme properties and are the cheapest of the four.
context_section_description: During installation, Linux distributions usually do not configure the installed system to use TRIM and thus the /etc/fstab file requires manual modifications. This is because of the notion that the current Linux TRIM command implementation might not be optimal. It has been proven to cause a performance degradation instead of a performance increase under certain circumstances. As of January 2014, Linux sends an individual TRIM command to each sector, instead of a vectorized list defining a TRIM range as recommended by the TRIM specification. This deficiency has existed for years and there are no known plans to eliminate it.
  For performance reasons, it is recommended to switch the I/O scheduler from the default CFQ (Completely Fair Queuing) to NOOP or Deadline. CFQ was designed for traditional magnetic media and seek optimizations, thus many of those I/O scheduling efforts are wasted when used with SSDs. As part of their designs, SSDs offer much bigger levels of parallelism for I/O operations, so it is preferable to leave scheduling decisions to their internal logic –  especially for high-end SSDs.
  
  A scalable block layer for high-performance SSD storage, known as blk-multiqueue or blk-mq and developed primarily by Fusion-io engineers, was merged into the Linux kernel mainline in kernel version 3.13, released on 19 January 2014. This leverages the performance offered by SSDs and NVM Express, by allowing much higher I/O submission rates. With this new design of the Linux kernel block layer, internal queues are split into two levels (per-CPU and hardware-submission queues), thus removing bottlenecks and allowing much higher levels of I/O parallelization. As of version 4.0 of the Linux kernel, released on 12 April 2015, VirtIO block driver, the SCSI layer (which is used by Serial ATA drivers), device mapper framework, loop device driver, unsorted block images (UBI) driver (which implements erase block management layer for flash memory devices) and RBD driver (which exports Ceph RADOS objects as block devices) have been modified to actually use this new interface; other drivers will be ported in the following releases.
caption: An SSD that uses NVM Express as the logical device interface, in form of a PCI Express 3.0 ×4 expansion card
exif: {"Image Make": "Nokia", "Image Model": "N95 8GB", "Image Orientation": "Horizontal (normal)", "Image XResolution": "300", "Image YResolution": "300", "Image ResolutionUnit": "Pixels/Inch", "Image YCbCrPositioning": "Centered", "Image ExifOffset": "140", "Thumbnail Compression": "JPEG (old-style)", "Thumbnail XResolution": "72", "Thumbnail YResolution": "72", "Thumbnail ResolutionUnit": "Pixels/Inch", "Thumbnail JPEGInterchangeFormat": "3098", "Thumbnail JPEGInterchangeFormatLength": "4706", "EXIF ExposureTime": "29/1000", "EXIF FNumber": "14/5", "EXIF ISOSpeedRatings": "100", "EXIF ExifVersion": "0220", "EXIF DateTimeOriginal": "2015:07:14 03:58:20", "EXIF DateTimeDigitized": "2015:07:14 03:58:20", "EXIF ComponentsConfiguration": "YCbCr", "EXIF ShutterSpeedValue": "5107/1000", "EXIF ApertureValue": "297/100", "EXIF LightSource": "Unknown", "EXIF Flash": "Flash did not fire, auto mode", "EXIF FocalLength": "28/5", "EXIF FlashPixVersion": "0100", "EXIF ColorSpace": "sRGB", "EXIF ExifImageWidth": "2592", "EXIF ExifImageLength": "1944", "EXIF CustomRendered": "Normal", "EXIF ExposureMode": "Auto Exposure", "EXIF WhiteBalance": "Auto", "EXIF DigitalZoomRatio": "1", "EXIF SceneCaptureType": "Standard", "EXIF GainControl": "Low gain up", "EXIF OffsetSchema": "12"}