Я смонтировал экспорт NFS и начал процесс, который, как я ожидал, должен записать значительный объем данных на общий диск. Скорость общего диска была настолько низкой, что я прервал процесс, но после этого количество операций ввода-вывода на машине, экспортирующей диск, оставалось высоким в течение 90 минут.
Где в цепочке данных NFS эти данные были бы кэшированы, и что я мог сделать, чтобы предотвратить их запись на диск?
Это интересный вопрос. На этот вопрос сложно ответить, потому что он довольно разнообразен и зависит от:
В общем, для сервера вполне нормально кэшировать операции записи. Штраф за запись в RAID довольно высок *, и его можно существенно уменьшить, кэшируя и объединяя операции записи.
Также, как правило, невероятно сложно «облажаться» или иным образом прервать ожидающую запись из кеша, потому что это влечет за собой всевозможные неприятные последствия. (например, повреждение данных).
Если количество операций ввода-вывода на экспортирующей машине было высоким, это могло быть признаком неисправности диска - у вас может быть относительно небольшой объем данных «в кеше», но он дает сбой и повторяет попытку при записи. (Потому что, если он «находится в кеше», это не вариант, потому что вы уже сказали, что «получили это»).
Трудно догадаться, в каком кэше он находился. Есть несколько уровней кеширования. Я бы не ожидал, что кеш-память сохранится до 90 м - данные в кеше - это данные, которые не являются постоянными, поэтому они более уязвимы для сбоев питания.
* Для каждой записи в RAID6 контроллер должен прочитать: перезаписать блок, 2 блока четности, пересчитать, а затем перезаписать все 3 блока. Это означает 6 операций записи на запись. Если вы правильно сгруппируете записи, эта проблема значительно уменьшится.