Re: [dm-devel] REQUEST for new 'topology' metrics to be moved out of the 'queue' sysfs directory.
From: Martin K. Petersen
Date: Thu Jun 25 2009 - 13:39:33 EST
>>>>> "Neil" == NeilBrown <neilb@xxxxxxx> writes:
[rotational flag]
Neil> So I asked git why it as added, and it pointed to
Neil> commit 1308835ffffe6d61ad1f48c5c381c9cc47f683ec
Neil> which suggests that it was added so that user space could tell the
Neil> kernel whether the device was rotational, rather than the other
Neil> way around.
There's an option to do it via udev for broken devices that don't report
it. But both SCSI and ATA have a setting that gets queried and the
queue flag set accordingly.
Neil> Also, I think you seem to be treating the read-modify-write
Neil> behaviour of a 4K-sector hard drive as different-in-kind to the
Neil> read-modify-write behaviour of raid5. I cannot see that. In both
Neil> cases an error can cause unexpected corruption and in both cases
Neil> getting the alignment right helps throughput a lot.
If you get a write error on a RAID5 component you are able to
reconstruct and remap the stripe given the cache and the remaining
drives.
If you get a write error on a 4KB phys/512 byte logical drive the result
is undefined. In a single machine setting you can treat the 4KB block
as suspect. In a clustered setting, however, the other machines will
unknowingly be reading garbage.
I realize this is moot in the context of MD given that it doesn't
support shared storage. But MD is not the only virtual block device
driver that I need to support with the topology bits.
Neil> So the only difference between these two values is the size. If
Neil> one is 4K and one is 40Meg and you have 512bytes of data that you
Neil> want to write as safely as possibly, you might pad it to 4K, but
Neil> you wont pad it to 40Meg. If you have 32Meg of data that you want
Neil> to write as safely as you can, you may well pad it to 40Meg,
Neil> rather than say "it is a multiple of 4K, that is enough for me".
Neil> So: the difference is only in the size.
Yep. I call the lower boundary minimum_io_size and the upper boundary
optimal_io_size.
People have been putting filesystems and databases on top of RAID
devices for ages. And generally the best practice has been to align and
write in multiples of the chunk size and try to write full stripe
widths.
Given the requirement for read-modify-write on RAID[456] I can
understand your predisposition to set minimum_io_size to the stripe
width. However, I'm not really sure that's what the user wants. Given
the stripe cache I'm also not convinced the performance impact of the MD
RAID[456] RMW cycle is as bad as that of the disk drive. So I set
minimum_io_size to the chunk size in my patch.
If you can come up with better names for minimum and optimal then that's
ok with me. SCSI uses the term granularity. I used that for a while in
my patches but most people thought that was really weird. Minimum and
optimal seemed easier to grasp. Maximum also exists in the storage
device context but is literally the largest I/O the device can receive.
And just to make it clear: I completely agree with your argument that
which knob to choose is I/O size dependent. My beef with your proposal
is that I believe the length of the list should be 2.
How we do report this stuff is really something I'd like the FS guys to
comment on, though. The knobs we have now correspond to what's
currently used by XFS (libdisk) and indirectly by ext2+.
--
Martin K. Petersen Oracle Linux Engineering
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/