Unsolved
This post is more than 5 years old
2 Posts
0
1424
Write-Back cache questions
I have an application that needs to make frequent small durable writes. I want to make sure the LUNs I'm writing to are in write-back mode. I assume that would mean the write would not return until it made it to the battery backed cache. That should satisfy my durability requirement.
Is it possible to configure the CX300 write cache to be write-back? Or is that the way it works by default?
My linux hosts list the write caches for the LUNs as write-through. Should I trust what it's saying?
How can I verify that the caching is write-back and not write-through?
I am using an fsync to push the data though the OS buffers to the array. Ideally, that op would return once the data made it to the CX300 cache and would not wait for the data to be written to disk. Are there any configuration gotchas I should be looking for?
Is it possible to configure the CX300 write cache to be write-back? Or is that the way it works by default?
My linux hosts list the write caches for the LUNs as write-through. Should I trust what it's saying?
How can I verify that the caching is write-back and not write-through?
I am using an fsync to push the data though the OS buffers to the array. Ideally, that op would return once the data made it to the CX300 cache and would not wait for the data to be written to disk. Are there any configuration gotchas I should be looking for?
DGM3
238 Posts
0
January 6th, 2008 16:00
There are quite possibly configuration options for caching within the host operating system; those would be independent from the storage system's functionality as outlined above.
Regards,
DGM
llowrey
2 Posts
0
January 7th, 2008 13:00
ksnell
38 Posts
0
January 8th, 2008 01:00
If you are just looking to get the most IOPs then small read IO from cache will effectively hit a limit at what the host can achieve after you have the data loaded into cache e.g. read several MB of data and then keep re-reading it. On the other hand you get the same effect if you write a small file and then keep re-writing it. Other operations will enforce a disk hit, random reads for example and these will then be a combination of disk speed, array utilisation, and IO characteristics; sequential or random, small or large IO.
Typically though, if you're limited to a number of IOPs the most likely issue is concurrency. Especially if random access, to get the most IOPs you will need to get multiple threads accessing each raid group. In this scenario, you get all the drives working with great efficiency, and the array will scale. The single HBA wouldn't be limiting you unless your target queue depth is set low. Typically this would be set to 256 with a LUN queue depth of 32 or 64. There is some good reference information in the CLARiiON Best Practices Guide that I recommend you read.
As a reference point, in a file serverving type application environment with a 4:1 read to write ratio, 8KB random IO, full array should be able to achieve in excess of 11000 IOPs. With any level of sequential activity, that will rise. As I suggested, the array scales so with only a few disks servicing load, you need to ensure concurrency but will be limited by the disks themselves unless serviced entirely by cache.
Back to your operation, it appears to be a single thread operation but you're not specific on that. If single thread to write cache, small IO size, then 1800 IOPs fits with one LUN access if 8KB IO. This does indicate an average response time of 0.56ms. If you can muti-thread, 16 threads with the same profile to a single 4+1 R5 LUN can yield in excess of 5600 IOPs. Alternatively, if you can access two LUNs concurrently, single thread each, you should increase to 2800 IOPs.
To summarise then, concurrency is the best option to increase IOPs with small IO sizes, then adding disks by way of more LUNs in seperate raid groups will scale. With single threaded applications, sometimes a way to increase throughput is to use a volume manager to stripe data on the host so mutiple host buffers are then used to read/write that file system i.e. force multiple threads below the application level. I'm not sure if that could be applied to your configuration though and no guarantess it would work - may depend on IO sizes and volume management stripe options.