Read_realloc is a Data ONTAP feature since version 7.3.1. It was designed to improve sequential read performance for workloads with a mixture of large sequential reads and random writes.
How does it work? As its name suggests, read_realloc is initiated by an application’s read operation (and the subsequent read-ahead operation). Data ONTAP then analyzes the IO pattern and the associated data blocks. If it is a sequential read and the associated data blocks are not largely contiguous, Data ONTAP optimizes the data layout by relocating those blocks to another location on the disk. In theory, the sequential read performance should be improved thereafter, since the data layout has been optimized.
How do I use this feature? Read_realloc is a FlexVol volume level option. You can enable it on a per volume basis. Use the following Data ONTAP command to enable it (default: off).
>vol options <myvol> read_realloc on
How do we know if the theory is correct? The best way is to test the theory. Here is one way to test it, by using Iometer to simulate a workload with a mixture of random reads, random writes and sequential reads.
- Step 1: Create a 50GB test file using Iometer on a LUN from a NetApp controller (Note: the test file size should be larger than the controller cache size).
- Step 2: Run the simulated workload with the following IO pattern for 20 minutes:
- 32KB IO size
- 50% read, 50% write
- 70% sequential, 30% random
- Step 3: Run the baseline sequential read test (i.e. read_realloc off) with the following IO pattern for 10 minutes:
- 64KB IO size
- 100% read
- 100% sequential
- Step 4: Run the same test as in Step 3, except with read_realloc enabled
- Step 5: Repeat Step 4 (if the theory is correct, we should see some improvement in sequential read performance in this second pass)
The table below summarizes the test results. The result from 1st trial after enabling read_realloc is very close to that of the baseline (when read_realloc was off). This may indicate that in our test, read_realloc had very little overhead. The sequential read throughput from the 2nd trial is 6% better than the 1st trial, indicating that read_realloc actually does what it supposed to do.
|Sequential Read Throughput (MB/s)|
|Baseline (read_realloc off)||159|
|1st Trial (read_realloc on)||161|
|2nd Trial (read_realloc on)||170|
Figure 1 below shows the same results in a bar chart.
Figure 1. read_realloc and sequential read performance
You may think to yourself, so what? It’s only a 6% improvement. Well, a small but measurable improvement is probably what we want to see, as it is an indication of Data ONTAP doing a pretty good job of data layout in general.
Thanks for reading.