LINUX.ORG.RU

Смысл команды SCSI COMPARE_AND_WRITE


0

1

Отцы, подскажите пожалуйста смысл сказевой команды COMPARE_AND_WRITE. Команду эту использует, например, VMWare ESX для «atomic read-modify-write operation» (http://www.emc.com/collateral/hardware/white-papers/h8293-vaai-vnx-wp.pdf, страница 10). Открываем стандарт, там написано:

The COMPARE AND WRITE command requests that the device server perform the following as an uninterrupted series of actions:
1) perform the following operations:
A) read the specified logical blocks; and
B) transfer the specified number of logical blocks from the data-out buffer (i.e., the verify instance of
the data is transferred from the data-out buffer);
2) compare the data read from the specified logical blocks with the verify instance of the data; and
3) If the compared data matches, then perform the following operations:
1) transfer the specified number of logical blocks from the data-out buffer (i.e., the write instance of
the data transferred from the data-out buffer); and
2) write those logical blocks.

То есть:
1) Читаем последовательность блоков с диска
2) Дергаем последовательность блоков из буфера команды
3) Сравниваем - если равно, то записываем данные из буфера на диск.

А теперь, собственно, вопрос. Получается, что при любом раскладе данные на диске будут неизменными. Смысл был бы, если бы команда писала на диск в том случае, если буфер и содержимое диска различны. В чем же смысл команды?

Update: а вот в таргете STGT есть реализация COMPARE_AND_WRITE, правда, она странно работает: автор патча сделал так, чтобы запись выполнялась в любом случае.
https://github.com/fujita/tgt/blob/master/usr/bs_rdwr.c

Его просят поправить. а он не хочет:
http://www.spinics.net/lists/linux-stgt/msg03471.html

Читай внимательнее. Передаются два куска данных, verify и write. Читается кусок с диска, и если он совпадает с verify, write пишется на диск.

i-rinat ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.