# Optimize I/O

> For the complete documentation index, see [llms.txt](https://docs.redpanda.com/llms.txt). Component-specific: [streaming-full.txt](https://docs.redpanda.com/streaming-full.txt)

---
title: Optimize I/O
latest-operator-version: v26.1.4
# EOL = End-of-Life (support lifecycle status)
page-is-nearing-eol: "false"
page-is-past-eol: "true"
page-eol-date: December 22, 2024
latest-console-tag: v3.7.3
latest-connect-version: 4.93.0
docname: io-optimization
page-component-name: streaming
page-version: "23.3"
page-component-version: "23.3"
page-component-title: Streaming
page-relative-src-path: io-optimization.adoc
page-edit-url: https://github.com/redpanda-data/docs/edit/v/23.3/modules/manage/pages/io-optimization.adoc
description: Learn how to optimize I/O performance.
page-git-created-date: "2023-05-30"
page-git-modified-date: "2024-02-26"
support-status: past end-of-life
---

<!-- Source: https://docs.redpanda.com/streaming/23.3/manage/io-optimization.md -->

Redpanda relies on its own disk I/O scheduler, and by default, it tells the kernel to use the `noop` scheduler. Additionally, `rpk` comes with an embedded database of I/O settings, which are specific combinations of CPUs, SSD types, and VM sizes. Because running software on four VCPUs isn’t the same as running on an EC2 i3.metal with 96 physical cores, Redpanda tries to predict the best known settings for VM cloud types.

[rpk iotune](https://docs.redpanda.com/streaming/23.3/reference/rpk/rpk-iotune/) is a tool to optimize I/O performance for a specific Redpanda instance and its hardware. It runs benchmarks to capture the read/write IOPS and bandwidth capabilities of a node, then it outputs parameters to an I/O configuration file (`io-config.yaml`) that Redpanda reads upon startup to optimize itself for the node. `rpk iotune` by default saves its I/O configuration file to `/etc/redpanda/io-config.yaml`, and Redpanda by default reads from there at startup.

> 📝 **NOTE**
>
> `rpk iotune` differs from `rpk redpanda tune`:
>
> -   `rpk iotune` runs benchmarks to produce an I/O configuration file that Redpanda reads on startup to optimize its I/O performance.
>
> -   `rpk redpanda tune` (autotuner) is a suite of tuners that automatically modify Linux kernel settings to optimize performance.
>
>
> For reference, see [rpk iotune](https://docs.redpanda.com/streaming/23.3/reference/rpk/rpk-iotune/) and [rpk redpanda tune](https://docs.redpanda.com/streaming/23.3/reference/rpk/rpk-redpanda/rpk-redpanda-tune/)

It isn’t necessary to run `rpk iotune` each time Redpanda is started, as its I/O output configuration file can be reused in nodes running on the same type of hardware. Reuse an I/O output configuration file by starting Redpanda with the `--io-properties-file` flag and the path to the file:

```bash
rpk redpanda start --io-properties-file '<io-properties-file-path>'
```

Alternatively, the contents of the I/O configuration file can be converted to a string, and the string can be passed with the `--io-properties` flag:

```bash
rpk redpanda start --io-properties '<io-properties-string>'
```

Currently in its database of I/O settings, Redpanda has well-known-types for AWS and GCP. On startup, `rpk` tries to detect the cloud and instance type from the cloud’s metadata API, setting the correct `iotune` properties.

If access to the metadata API isn’t allowed from the instance, you can hint the desired setup by passing the `--well-known-io` flag with the cloud vendor, VM type, and storage type:

```bash
rpk redpanda start --well-known-io 'aws:i3.xlarge:default'
```

It can also be specified in the `redpanda.yaml` configuration file, under the `rpk` object:

```yaml
rpk:
  well_known_io: 'gcp:c2-standard-16:nvme'
```

> 💡 **TIP**
>
> -   If `well-known-io` is specified in the config file and also as a flag, then the flag takes precedence.
>
> -   Both `--well-known-io` and `rpk.well_known_io` cannot be set at the same time as `--io-properties-file` or `--io-properties`.

If a certain cloud vendor, machine type, or storage type isn’t found, or if the metadata isn’t available and no hint is given, then `rpk` prints a warning and continues to use the default values.

## Suggested labs

-   [Redpanda Iceberg Docker Compose Example](https://docs.redpanda.com/labs/docker-compose/iceberg/)
-   [Enable Unified Identity with Azure Entra ID for Redpanda and Redpanda Console](https://docs.redpanda.com/labs/docker-compose/oidc/)
-   [Owl Shop Example Application in Docker](https://docs.redpanda.com/labs/docker-compose/owl-shop/)
-   [Migrate Data with Redpanda Migrator](https://docs.redpanda.com/labs/docker-compose/redpanda-migrator/)
-   [Start a Single Redpanda Broker with Redpanda Console in Docker](https://docs.redpanda.com/labs/docker-compose/single-broker/)
-   [Start a Cluster of Redpanda Brokers with Redpanda Console in Docker](https://docs.redpanda.com/labs/docker-compose/three-brokers/)
-   [Iceberg Streaming on Kubernetes with Redpanda, MinIO, and Spark](https://docs.redpanda.com/labs/kubernetes/iceberg/)

See more

[Search all labs](https://docs.redpanda.com/labs)