Я пытаюсь понять значение счетчика разделенных операций ввода-вывода в секунду для физического диска в мониторе производительности Windows и не совсем понимаю, почему одна операция ввода-вывода может быть разделена на несколько. Согласно документации Microsoft:
Показывает скорость, с которой эти запросы ввода-вывода к диску были разделены на несколько запросов. Разделенный ввод-вывод может быть результатом запроса данных, размер которых слишком велик, чтобы поместиться в один ввод-вывод, или из-за того, что диск фрагментирован в однодисковых системах.
Как операционные системы узнают, что запрошенные данные слишком велики и запрос нужно разделить? Есть ли фиксированное пороговое значение или оно рассчитывается? Фрагментация - это концепция файловой системы. И, насколько я понимаю, счетчик разделенного io собирается из внутренних компонентов драйвера диска, который находится ниже уровня файловой системы и, таким образом, не знает, принадлежит ли запрошенный блок (или группа последовательных блоков) фрагментированному файлу. Я ошибся?
Каждое блочное устройство может указывать (как минимум) два разных размера ввода-вывода:
Из вышесказанного ясно, что если устройство указывает, например, максимальный размер блока 64 КБ, но ваше приложение записывает 128 КБ за раз, каждая запись будет разделена на два различные запросы ввода-вывода.
Из Вот (обратите внимание, что это старый документ):
Использование запросов размером 64 КБ обеспечивает более высокую пропускную способность при очень небольшом процессоре. Максимальная пропускная способность обычно составляет 64 КБ, хотя некоторые устройства могут иметь более высокий максимальный размер пропускной способности. При передаче блоков данных размером более 64 КБ подсистема ввода-вывода разбивает передачи на блоки по 64 КБ. Выше 64 КБ скорость передачи резко падает, а пропускная способность выравнивается. Использование процессора и прерывания также снизились до 64 КБ.