7

У меня есть рабочая станция с Windows 10 Professional, которую я использую для имитации потока материалов в оттисках. Программное обеспечение FEA, которое я использую, создает большие файлы базы данных объемом 50-100 ГБ для каждого запуска симуляции. Копирование этих файлов на вращающийся носитель для хранения данных, похоже, не использует объем оперативной памяти, которую эта система имеет во время передачи, быстрого запуска на секунду или две, а затем сброса на собственную скорость передачи данных на два диска RAID0 7200RPM 300 МБ / с. (171-342 секунд). Файлы поступают с программного RAID0 двух разделов по 600 ГБ на двух 1,2 ТБ твердотельных накопителях Intel 750 PCIe NVMe по 1,2 ТБ, поэтому производительность чтения не является проблемой. Система работает от ИБП 2200 ВА с EBM и еженедельно резервируется на наш сервер хранения, поэтому не стоит беспокоиться о потере данных.

Что мне интересно, так это:

Если я смогу настроить параметры кэша Windows 10, чтобы прочитать все файлы 50-100 ГБ в ОЗУ со скоростью 4 ГБ / с (12-25 секунд), на которые способны два процессора Intel 750, а затем прозрачно записать их на диск. У меня сложилось впечатление, что встроенная функция Windows "кеширование диска" на это способна, но некоторые настройки размера кэша по умолчанию в Windows ограничивают кэш примерно до 5 ГБ (отсюда небольшой всплеск скорости в начале ). Я не думаю, что этот всплеск исходит из скупого кеша 128 МБ на целевых дисках, так как использование "модифицированной" физической памяти в первую секунду или около того увеличивается примерно на 5 ГБ. Эти 5 ГБ записываются на диск после исчезновения диалогового окна переноса. Использование оперативной памяти уменьшается со скоростью двух дисков 7200RPM в RAID0. После завершения вы увидите, что активность диска обнуляется, а использование ОЗУ возвращается к норме. Это говорит мне о том, что кеширование диска, по крайней мере, работает, но не более 5 ГБ.

Система будет в порядке, используя 50-100 ГБ доступной оперативной памяти для этой передачи, так как для моделирования обычно используется до 80 ГБ ОЗУ, а для моделирования не используется этот объем ОЗУ до последних этапов моделирования.

У меня есть рабочая станция Dell Precision T7910 со следующими характеристиками:

2P Xeon E5-2687W v4
256GB LRDIMM ECC DDR4 2400MHz
Quadro M4000
x2 Intel 750 1.2TB PCIe NVMe, one boot, 600GB RAID0 Two Partitons
x2 WD Gold 8TB in software RAID0 on SAS 12 GB Ports (128MB Cache)
Eaton 5PX 2200 IRT 240V UPS
Windows 10 Pro 1703 - System is old enough to not have Windows 10 Pro for Workstations

Что я пробовал:

Checked/Enabled: "Enable write caching on the device." - On each Disk
Checked/Enabled: "Turn off Windows write-cache buffer flushing on the device." - On each Disk
Made sure Superfetch service is running (for whatever good that does).
Moved away from built-in hardware RAID, as there is NO cache anyway.

Я исследовал другие темы со схожими проблемами и наткнулся на другую более старую ветку, упоминающую инструмент "CacheSet":

Как увеличить кеш диска Windows 7

Будет ли это применимо к моему варианту использования или я должен продолжать искать?

Правильно ли я понимаю, как работает кэширование диска на платформе Windows, или оно работает иначе, чем я ожидал? Я просто ищу кэширование записи в основную память, используя, возможно, до 100 ГБ ОЗУ, и ничего больше.

Спасибо за помощь! Любые предложения приветствуются.

РЕДАКТИРОВАТЬ: Запуск этого программного обеспечения cacheset.exe в качестве ADMIN сообщает "Пиковый размер" "663732 КБ", который кажется слишком маленьким (648 МБ?). Просто не уверен, что я хочу изменить этот параметр и, возможно, испортить эту производственную систему. Предел, в который я продолжаю работать, составляет около 5 ГБ.

ДВОЙНОЕ РЕДАКТИРОВАНИЕ: я пересмотрел кажущиеся ГБ, которые, кажется, фактически кешируются. Ключ просматривал "Модифицированную физическую память" и видел "5" ГБ в верхней части передачи. Все еще пытаюсь увеличить это до 100 ГБ.

Еще раз спасибо!

1 ответ1

2

Большой кеш не поможет, не с любым стандартным приложением для копирования файлов.

Независимо от того, насколько велик кэш файлов Windows, никакой нормальный инструмент копирования файлов не закроет входные файлы для задачи копирования (что позволит вам удалить их) до того, как все данные будут записаны в место назначения. Это верно, даже если все входные данные были прочитаны в кэш.

Причина в том, что данные в кеше небезопасны - они могут исчезнуть в любое время. Любая оперативная память, используемая кешем, которая не была изменена с момента ее чтения с диска, считается сбрасываемой диспетчером памяти. То есть, если для чего-то еще требуется ОЗУ, ОЗУ, используемое кешем, может быть извлечено из кеша и "перенаправлено", то есть отдано чему-то другому, в любой момент. Конечно, это возможно - в конце концов, нигде не должно быть никаких данных, которые находятся только в кеше. (Если только он не был изменен с момента чтения с диска. В этом случае он автоматически ставится в очередь для обратной записи, которая произойдет в течение четырех секунд; он не может быть перенаправлен до завершения обратной записи.)

Таким образом, со стандартной программой копирования вам придется подождать, пока вращающиеся диски запишут данные, прежде чем вы сможете удалить исходные файлы - независимо от того, сколько в буфере находится в кеше.

Обратите внимание, что программа копирования (или любое другое приложение) не может даже определить, находится ли что-то в кэше. Там нет интерфейса для этого. Даже если бы она существовала, информация считалась бы "устаревшей" в тот момент, когда она была извлечена, даже до того, как приложение ее просмотрело. Предполагается, что файловый кеш работает автоматически, прозрачен для приложений, и часть прозрачности заключается в том, что на нем очень мало элементов управления.

Подумайте об этом так: вам нужна безопасная промежуточная копия ваших результатов - что-то функционально эквивалентное другой копии ваших исходных файлов в другом каталоге, возможно, даже отдельной букве диска, прежде чем вы сможете безопасно удалить оригиналы. Кэш файлов Windows никогда не даст вам этого. Даже если Windows решит полностью залить исходные файлы в файловый кеш (что очень маловероятно), файловый кеш этого не дает.

(Вам может быть интересно "Так что же хорошего в любом случае?"«Основная цель файлового кэша - ускорить повторный доступ к многочисленным мелким файлам (и метаданным файловой системы). И это делает это довольно хорошо.)

SuperFetch

Версия TL, DR: SuperFetch тоже этого не дает.

Вы правы в своем выраженном сомнении относительно SuperFetch. Хотя SuperFetch эффективен в том, что он пытается сделать, это не поможет в этом случае. Что делает SuperFetch, так это отслеживает файлы, к которым часто обращаются, скажем, при каждой загрузке, и пытается записывать их в оперативную память заранее.

Это различие важно, если вы хотите понять кеширование Windows в целом. Файловый кеш Windows (который я описал в предыдущем разделе) является реактивным, то есть он никогда ничего не кэширует, пока программа не попытается его прочитать. Это было в семействе Windows NT с первого выпуска (NT 3.1).

SuperFetch - это отдельный механизм, изначально добавленный в Vista. Он является упреждающим, пытаясь заранее выбрать вещи, к которым часто обращались в прошлом.

SuperFetch управляет своей оперативной памятью отдельно от файлового кэша Windows. SuperFetch использует "низкоприоритетные" страницы в списке резервных страниц Windows - и что забавно, он просто оставляет их в этом списке, поэтому они остаются частью "доступной" оперативной памяти. (Таким образом, при прочих равных условиях вы не заметите разницы в "Доступной" ОЗУ с нашей без SuperFetch, но вы заметите разницу в объеме сообщенного "Кэша".) Оперативная память, выделенная для файлового кэша, находится в рабочем наборе, и, следовательно, для переназначения потребуется немного больше времени, если возникнет такая необходимость. Благодаря такому дизайну кэш SuperFetch даже быстрее "удаляется", чем файловый кеш Windows, поэтому он не дает вам надежной временной копии чего-либо, равно как и файловый кеш.

Так что вы можете сделать?

Чтобы решить вашу проблему, я бы посмотрел на выделенное оборудование. Возможно, получите один не очень дорогой или быстрый SSD, скажем, 120 ГБ и скопируйте данные из вашего массива SSD в него, а затем скопируйте их оттуда на жесткий диск. Это, увы, будет означать, что вы не сможете начать запись на жесткие диски, пока все ваши данные не будут скопированы во временные, поэтому это займет больше времени, чем то, что вы делаете сейчас. Но исходные данные будут освобождены раньше.

Более простая идея состоит в том, чтобы получить больше жестких дисков и поместить их в более широкий набор полос для увеличения скорости записи.

Может помочь специальная программа копирования, которая знает структуру ваших данных.

Кстати, я надеюсь, что ваше программное обеспечение FEA использует сопоставленный доступ к файлам при создании набора данных - это намного быстрее, чем традиционные вызовы чтения / записи.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .