All of this is probably the reason that this command exists: hdparm --write-sector <sectornum> I believe it directly sends the scsi/ata layer commands. On Sun, Jun 29, 2014 at 6:50 PM, Martin K. Petersen <martin.petersen@xxxxxxxxxx> wrote: >>>>>> "Chris" == Chris Murphy <lists@xxxxxxxxxxxxxxxxx> writes: > > Chris, > > Chris> The SCSI layer is clearly combining the bs=512 count=8 into a > Chris> single write command. This is inhibited with oflag=direct. > > It's not really the SCSI layer that does any of this but the VM and/or > the I/O scheduler (depending on how things were submitted). > > Chris> I also found intermittent issuance of READ_10 to the drive, > Chris> before WRITE_10, but wasn't able to figure out why it's > Chris> intermittant. > > It's either the page cache doing readahead or you doing partial writes > to uncached pages. > > You can flush the page cache like this: > > echo 3 > /proc/sys/vm/drop_caches > >>> You do know that drives are physically incapable of writing partial >>> sectors? It has to be emulated, either in drive firmware or OS >>> driver stack. What you've written suggests you've missed that basic >>> reality. The rest is operator error. Roman and Wolfgang were too >>> polite when pointing out the need for bs=4096 -- it isn't 'should', >>> it is 'must'. > > Chris> That's true for oflag=direct, it's not true without it. > > Correct. > > In general, a buffered write() call in dd or any other userland app does > not have a 1:1 mapping with a SCSI WRITE command at the bottom of the > stack. The pages in question will simply be marked dirty and eventually > flushed to disk. > > You can force a more block-centric behavior by using synchronous/direct > I/O. > > Chris> Also included for interest is the result of issue an hdparm write > Chris> command. It works without a size specification, so I don't > Chris> actually know what happens on the drive itself, plus the command > Chris> that gets issued to the drive isn't "WRITE_10" but "ATA_16". > > That's because the ATA command gets encapsulated in a SCSI command so it > can pass through the SCSI layer. > > -- > Martin K. Petersen Oracle Linux Engineering > -- > To unsubscribe from this list: send the line "unsubscribe linux-raid" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-raid" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html