{"record":{"id":"db7022e4508eca45","repo":"apache/cassandra","slug":"detected-high-setting-of-for-device-o","errorCode":null,"errorMessage":"Detected high '{}' setting of {} for device '{}' of data directory '{}'. It is recommended to set this value to 8KB (or lower) on SSDs or 64KB (or lower) on HDDs to prevent excessive IO usage and page cache churn on read-intensive workloads.","messagePattern":"Detected high '(.+?)' setting of (.+?) for device '(.+?)' of data directory '(.+?)'\\. It is recommended to set this value to 8KB \\(or lower\\) on SSDs or 64KB \\(or lower\\) on HDDs to prevent excessive IO usage and page cache churn on read-intensive workloads\\.","errorType":"console","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"src/java/org/apache/cassandra/service/StartupChecks.java","lineNumber":763,"sourceCode":"                try\n                {\n                    Path readAheadKBPath = StartupChecks.getReadAheadKBPath(blockDeviceDirectory);\n\n                    if (readAheadKBPath == null || Files.notExists(readAheadKBPath))\n                    {\n                        logger.debug(\"No 'read_ahead_kb' setting found for device {} of data directory {}.\", blockDeviceDirectory, dataDirectory);\n                        continue;\n                    }\n\n                    final List<String> data = Files.readAllLines(readAheadKBPath);\n                    if (data.isEmpty())\n                        continue;\n\n                    int readAheadKbSetting = Integer.parseInt(data.get(0));\n\n                    if (readAheadKbSetting > MAX_RECOMMENDED_READ_AHEAD_KB_SETTING)\n                    {\n                        logger.warn(\"Detected high '{}' setting of {} for device '{}' of data directory '{}'. It is \" +\n                                    \"recommended to set this value to 8KB (or lower) on SSDs or 64KB (or lower) on HDDs \" +\n                                    \"to prevent excessive IO usage and page cache churn on read-intensive workloads.\",\n                                    readAheadKBPath, readAheadKbSetting, blockDeviceDirectory, dataDirectory);\n                    }\n                }\n                catch (final IOException e)\n                {\n                    logger.warn(\"IO exception while reading file {}.\", blockDeviceDirectory, e);\n                }\n            }\n        }\n    };\n\n    public static final StartupCheck checkMaxMapCount = new StartupCheck()\n    {\n        @Override\n        public String name()\n        {","sourceCodeStart":745,"sourceCodeEnd":781,"githubUrl":"https://github.com/apache/cassandra/blob/88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1/src/java/org/apache/cassandra/service/StartupChecks.java#L745-L781","documentation":"The checkReadAheadKbSetting startup check reads /sys/block/*/queue/read_ahead_kb for each data directory's block device. If the value exceeds MAX_RECOMMENDED_READ_AHEAD_KB_SETTING, it warns that read-ahead is too high and recommends 8KB on SSDs or 64KB on HDDs to avoid excessive IO and page-cache churn on read-intensive workloads. Startup continues.","triggerScenarios":"Any data directory's block device reports read_ahead_kb greater than the maximum recommended value during startup.","commonSituations":"Default 128KB (or 4096KB on some NVMe drivers) kernel read-ahead on SSD-backed nodes, cloud instance images with generic block tuning, devices never tuned post-provisioning.","solutions":["Set read-ahead low for the device: `blockdev --setra 16 /dev/<dev>` (16 sectors = 8KB) or echo the value to /sys/block/<dev>/queue/read_ahead_kb.","Persist the setting with a udev rule or /etc/rc.local / systemd unit so it survives reboots.","On HDDs keep it at or below 64KB; on SSDs 8KB or lower.","Restart Cassandra and confirm the warning is gone."],"exampleFix":"# before\ncat /sys/block/nvme0n1/queue/read_ahead_kb -> 128\n# after\necho 8 > /sys/block/nvme0n1/queue/read_ahead_kb  # persist via udev rule","handlingStrategy":"validation","validationCode":"#!/bin/sh\nfor dev in $(df --output=source /var/lib/cassandra/data | tail -n +2 | xargs -n1 basename); do\n  ra=$(cat /sys/block/${dev%/[^ ]*}/queue/read_ahead_kb 2>/dev/null || echo unknown);\n  [ \"$ra\" != unknown ] && [ \"$ra\" -le 64 ] || echo \"read_ahead_kb too high on $dev: $ra\";\ndone","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Tune read_ahead_kb to 8 (SSD) or <=64 (HDD) in provisioning and persist via udev rules.","Re-apply block device tuning after disk replacement or instance type changes.","Include read_ahead_kb in node-health dashboards.","Use `blockdev --getra /dev/<dev>` to verify persistence after reboot."],"tags":["io","readahead","startup-check","performance"],"backgroundTag":"invalid-config-value","analyzedSha":"88fd0f6a0eaed8943f05ac9e8f947882b8ddc8f1","analyzedAt":"2026-09-10T07:29:22.284Z","contentChangedAt":"2026-09-10T07:29:22.284Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}