Optimize disk settings

The default disk configurations on most Linux distributions are not optimal. Follow these steps to optimize settings for your Solid State Drives (SSDs) or spinning disks.

Complete the optimization settings for either SSDs or spinning disks. Do not complete both procedures for either storage type.

Optimize SSDs

Complete the following steps to ensure the best settings for SSDs.

  1. Ensure that the SysFS rotational flag is set to false (zero).

    This overrides any detection by the operating system to ensure the drive is considered an SSD.

  2. Apply the same rotational flag setting for any block devices created from SSD storage, such as mdarrays.

  3. Determine your devices by running lsblk:

    lsblk
    NAME   MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
    vda    253:0    0  32G  0 disk
    |
    |-sda1 253:1    0   8M  0 part
    |-sda2 253:2    0  32G  0 part /

    In this example, the current devices are sda1 and sda2.

  4. Set the IO scheduler to either deadline or noop for each of the listed devices:

    For example:

    echo deadline > /sys/block/<device_name>/queue/scheduler

    where <device_name> is the name of the device you want to apply settings for.

    • The deadline scheduler optimizes requests to minimize IO latency. If in doubt, use the deadline scheduler.

      echo deadline > /sys/block/<device_name>/queue/scheduler
    • The noop scheduler is the right choice when the target block device is an array of SSDs behind a high-end IO controller that performs IO optimization.

      echo noop > /sys/block/<device_name>/queue/scheduler
  5. Set the nr_requests value to indicate the maximum number of read and write requests that can be queued:

    Machine size Value

    Large machines

    `language-bash echo 128 sys/block/<device_name>/queue/nr_requests `

    Small machines

    `language-bash echo 32 sys/block/<device_name>/queue/nr_requests `

  6. Set the readahead value for the block device to 8 KB.

    This setting tells the operating system not to read extra bytes, which can increase IO time and pollute the cache with bytes that weren’t requested by the user.

    The recommended readahead setting for RAID on SSDs is the same as that for SSDs that are not being used in a RAID installation.

    1. Open /etc/rc.local for editing.

    2. Add the following lines to set the readahead on startup:

      touch /var/lock/subsys/local
      echo 0 > /sys/class/block/sda/queue/rotational
      echo 8 > /sys/class/block/sda/queue/read_ahead_kb
    3. Save and close /etc/rc.local.

Optimize spinning disks

The readahead value specified with the blockdev command doesn’t persist after a reboot. DataStax recommends that you use a run-level init.d script to set readahead during the boot process.

  1. Make sure readahead isn’t set to 65536:

    sudo blockdev --report /dev/<spinning_disk>
  2. Set readahead to the DataStax recommended value of 256 (512-byte sectors):

    sudo blockdev --setra 256 /dev/<spinning_disk>

DataStax recommends a 128 KB readahead for spinning disks. To set the recommended readahead, you must first set the blockdev readahead to 256, as blockdev --setra sets the readahead in 512-byte sectors (see the blockdev utility). Use the following formula to calculate the actual readahead, in bytes:

RA * SSZ = readahead in bytes
256 * 512 B sector size = 131074 B / 1024 = 128 KB

Was this helpful?

Give Feedback

How can we improve the documentation?

© 2025 DataStax | Privacy policy | Terms of use | Manage Privacy Choices

Apache, Apache Cassandra, Cassandra, Apache Tomcat, Tomcat, Apache Lucene, Apache Solr, Apache Hadoop, Hadoop, Apache Pulsar, Pulsar, Apache Spark, Spark, Apache TinkerPop, TinkerPop, Apache Kafka and Kafka are either registered trademarks or trademarks of the Apache Software Foundation or its subsidiaries in Canada, the United States and/or other countries. Kubernetes is the registered trademark of the Linux Foundation.

General Inquiries: +1 (650) 389-6000, info@datastax.com