У меня есть приложение для пользовательского пространства, которое генерирует большие записи SCSI (подробности ниже). Однако, когда я смотрю на команды SCSI, которые достигают цели SCSI (т. Е. Хранилища, связанные с FC), что-то разделяет эти записи на 512K кусков.Linux: записи разделены на 512K кусков
Применение в основном делает 1M размера прямых операций записи непосредственно в устройство:
fd = open("/dev/sdab", ..|O_DIRECT);
write(fd, ..., 1024 * 1024);
Этот код вызывает два SCSI Пишет для отправки, 512К каждый.
Однако, если я выдаю прямую команду SCSI, без слоя блока, запись не будет разделена. я следующую команду из командной строки:
sg_dd bs=1M count=1 blk_sgio=1 if=/dev/urandom of=/dev/sdab oflag=direct
Я могу видеть одну единственную 1M размером WRITE SCSI.
Вопрос в том, что разделяет запись и, что более важно, настраивается ли она? Линейный блок Linux кажется виноватым (потому что SG_IO не проходит через него), а 512K кажется слишком произвольным числом, чтобы не быть каким-то настраиваемым параметром.
Нет, размеры блоков не имеют значения - это разбивает данные на 512 - ** кило ** байт глыбы, а не 512 байт из них. – Leonid99