Почему передача файлов между дисками использует ОЗУ

Я заметил, что всякий раз, когда я скопировать или переместить большие файлы с SSD, который я использую в качестве системного диска, на мой жесткий диск или на внешний жесткий или флешку, скорость диаграммы, показанной на Windows всегда выглядит одинаково: скорость передачи данных начинается на уровне 450 МБ/с, и через несколько секунд падает до где-то между 90 и 130 МБ/с и остается стабильной до конца операции копирования/перемещения.

Transfer speed graph

Это вызвало мое любопытство, поэтому я решил выяснить, что является причиной этого. Некоторые мои мысли были такими:

может быть, это реальная скорость, с которой происходит передача

сомнительно. В то время как 450 МБ/с скорость соответствует номинальной скорости моего SSD, учитывая, что я также имею некоторый другой диск, чтение/запись происходит в фоновом режиме, нет возможности 7200 оборотов в минуту жесткий диск в состоянии идти в ногу с ним, как 130 МБ/с скорость я вам позже тоже самое я могу ожидать от него. Итак, откуда берутся дополнительные данные идти?

дополнительные данные хранятся в кэш-памяти жесткого диска

это имеет немного больше смысла, но если принять во внимание продолжительность более высокой скорости передачи, кэш моего жесткого диска должен быть более 3 ГБ, что определенно не так. Что еще это может быть?

дополнительные данные хранятся в оперативной памяти

это имеет смысл. Моя рама-это только часть моей системы, которая может соответствовать скорости моей памяти, и я много. Давайте проверим эту теорию!

Я открываю Диспетчер задач и посмотри на вкладке быстродействие. Использование памяти стабильно-3,7 Гб. Затем я начинаю еще 15 ГБ передачи файлов. Использование памяти начинает расти, и останавливается на 5,3 ГБ, как только скорость передачи падает до 130 МБ / с. Он остается неизменным до конца передачи файлов(диалоговое окно "передача" закрывается), а затем медленно снижается до уровня 3,7 Гб, который был до передачи.

Итак, моя последняя теория верна. Еще одним подтверждением является то, что лишняя используемая память помечена как Modified

Modified.

какой смысл?

мой вопрос в том, какова цель этого? Хотя я не против того, чтобы часть моей оперативной памяти использовалась для передачи файлов, так как даже во время самых тяжелых моих многозадачных сеансов я никогда не видел, чтобы ее использование превышало 70%, в чем преимущество хранения 1,6 Гб данных, которые вы не будете обрабатывать в своем Оперативной памяти?

Я не вижу никакой пользы с точки зрения целостности данных, так как вы просто копируете файлы, и в случае сбоя питания ни ОЗУ, ни жесткий диск не будут особенно успешными в сохранении данных при передаче.

Я мог видеть преимущество в том, что исходный диск (SSD) быстро освобождается, так что если другой процесс должен выполнять много операций чтения / записи на нем, он может сделать это без передачи файлов, препятствующих ему, но если это кейс, почему бы не загрузить все 15 ГБ на максимальной скорости в память?

кроме того, этот процесс вводит пользователя в заблуждение, так как передача файлов продолжается даже после закрытия диалога передачи, поскольку некоторые данные все еще копируются из памяти на жесткий диск. Это может привести к пользователю подключить съемный диск в то время как данные все еще записываются на него, возможно, развращает съемный диск, потому что не все беспокоит безопасное извлечение оборудования.

сохранить имейте в виду, что я не тщательно протестировал это со съемными дисками, так как Windows может обрабатывать их по-другому, делая мой последний пункт недействительным.

15
задан magicandre1981
06.11.2022 21:22 Количество просмотров материала 2639
Распечатать страницу

2 ответа

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

различные операционные системы имеют различное управление памятью.

Ваш вопрос был очень интересный. Я разделяю MSDN страница что объясняет часть управления памятью в windows, и более конкретно "Файлы, Отображенные"

это документация для разработчиков программного обеспечения, но Windows-это программное обеспечение слишком.

одним из преимуществ использования MMF ввода / вывода является то, что система выполняет все передачи данных для него в 4K страниц данных. внутренне все страницы памяти управляются Virtual-memory manager (VMM). Он определяет, когда страница должна быть выгружена на диск, какие страницы должны быть освобождены для использования другими приложениями, и сколько страниц каждое приложение может иметь из всего объема физической памяти. поскольку VMM выполняет все дисковые операции ввода-вывода в одном и том же манера чтения или записи памяти по одной странице за раз-она была оптимизирована, чтобы сделать его как можно быстрее. ограничение инструкций чтения и записи на диске последовательностями страниц 4K означает, что несколько небольших операций чтения или записи эффективно кэшируются в одну большую операцию, уменьшая количество перемещений головки чтения/записи на жестком диске. чтение и запись страниц памяти в то время, иногда называют подкачки и является общим для управления виртуальной памяти операционной системный.

к сожалению, мы не можем легко понять, как Microsoft реализует чтение/запись - это не открытый источник.

Но мы знаем, что у него очень разные ситуации:

From      To
==================
SSD       HDD
HDD       Busy SSD ??
NTFS      FAT
NTFS      ext4
Network   HDD
IDE0slave IDE0master // IDE cable support disk to disk transfer.
IDE       SATA // in this case you have separated device controllers.

вы получите точку... Жесткий диск может быть занят, файловые системы могут отличаться (или могут быть одинаковыми)...

например: dd команда копирования данных в linux "байт за байтом" - это крайне быстро (т. к. головки обоих жестких дисков движутся синхронно), но если файл системы разные (например, с разными размерами блоков) - скопированные данные не будут читаемы, так как файловая система имеет разную структуру.

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

также представьте, что вы справляетесь с файлом непосредственно из-в.

Что произойдет, если перегрузить источник другими потоками данных? Что о пункт назначения?

Что делать, если у вас почти нет свободной оперативной памяти в этот момент?

...

знают только инженеры Microsoft.

0
отвечен Ifch0o1 2022-11-08 05:10

почему при передаче файлов между дисками используется ОЗУ?

потому что операции ввода-вывода (почти всегда) находятся между периферийным устройством и ОЗУ.

Таким образом, копия файла-это действительно две дисковые операции: чтение (в ОЗУ), а затем запись (из ОЗУ).

некоторые системы могут выполнять операции от периферии к периферии (и поэтому не требуют буфера в ОЗУ). Я видел хост-адаптеры SCSI, которые могут выполнять передачу с диска на диск (без участия Процессор и ОЗУ с помощью встроенного процессора и ОЗУ / FIFO). Я видел контроллеры DMA, которые могут выполнять передачу от периферии к периферии. Это исключения, а не правило или общее использование.

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

мой вопрос в том, какова цель делать это?

исходные данные (читаемый/копируемый файл) должны быть считаны в оперативную память просто потому, что такова природа компьютерной архитектуры (в сочетании с использованием DMA).

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

В настоящее время с относительно большая память и сложные алгоритмы, типичная ОС попытается использовать любую/всю свободную/неиспользуемую память для буфера для чтения этих исходных данных.

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

И если данные были помечены или каталогизированы для идентификации файла, то эти данные может кэшироваться для возможного повторного использования.

обратите внимание, что этот кэш файлов по существу свободен; не было никакой нагрузки дополнительного ввода/вывода на ОС для получения этого кэша. Единственная стоимость-это обслуживание каталога содержимого, которое может быть смещено при попадании в кэш (и сохранении ввода-вывода при перечитывании).


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


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

это компромисс между доступностью системы для пользователя и гарантированной записью.

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

в операции записи (или копирования) современная ОС будет пытаться быть доступной пользователю, как только все операции записи будут по крайней мере поставлены в очередь (это означает, что они могут не иметь завершенный.)

Это облегчает многозадачность. Если вы хотите сделать что-то еще, что даже не связано с этим диском, почему вы должны ждать операций на этом диске, чтобы закончить, чтобы сделать что-то еще?

Компромисс заключается в том, что вы должны быть образованным пользователем и осознавать, что (запоминающие устройства) должны быть правильно размонтированы.

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


Примечание

Передача данных не может использовать буфер ОЗУ, если:

1. программируемый ввод / вывод (с использованием ЦП) выполняется как для операций ввода, так и для операций вывода,

и

2. входные и выходные данные имеют соответствующие скорости передачи данных и размеры передачи,

и

3. оба устройства являются символьными, а не блочными устройствами. (Это исключит дисковые накопители.)

однако ОС редко предпочитают использовать программируемый ввод/вывод, когда DMA или шиной, а также, вероятно, чтобы быть запрограммированы, чтобы справиться с двойной сложности парный вход+выход переноса.

1
отвечен sawdust 2022-11-08 07:27

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя

Похожие вопросы про тегам:

file-transfer
hard-drive
memory
ssd
windows
Вверх