Дано: Windows 7, копируем с нее данные (обычно происходит на крупных файлах) на какой-нибудь компьютер по сети, т.е. через сетевое окружение.
Через какое-то время что наблюдается: все начинает дико тупить, в диспетчере задач видно что занято много оперативки, на закладке "Процессы" всё как обычно, ничего криминального, а вот на вкладке "Быстродействие" творится нечто, половина или больше памяти занята. Помогает только перезагрузка.
Вложения
[Расширение png было запрещено, вложение больше недоступно.]
посылая процессору не 5000, а 500 000 прерываний в секунду
Не вдаваясь в работу сетевой карты и описания работы прерываний скажу только одно
10Мбит = 14800п/s, 100Mбит = 148000п/s только учтите что пакеты бываю и маленькие от 60байт до 1500байт (но работа идет в обе стороны - получил данные (проверка контрольных сумм) и подтверждение полученных данных), и есть буфер на сетевой карте (может до 1Mb) через который происходит работа с сетью, и если он будет заполнен, то приход любого следующего пакета затрет данные в буфере, что влечет за собой повтор передачи, поэтому существуют алгоритмы которые это контролируют протоколы и т.д. за всем этим следит ОС. Не говоря о приоритетах по прерываниям и по обслуживанию их диспетчером ОС, который может менять все это --- Описания работы ядра Windows Vista на данном сайте.
Та же забыл упомянуть про режим DMA в данном случае, что так же имеет место быть.
А теперь вопрос про память - причем тут сетевая при якобы расходе памяти?
wsimons,
дайте данные по загруженным программам, если нет сторонних системных программ, то хотя бы монитор ресурсов закладка память до процесса копирования по сети и после, и конечно хорошо бы посмотреть сколько памяти кто берет.
Через какое-то время что наблюдается: все начинает дико тупить, в диспетчере задач видно что занято много оперативки, на закладке "Процессы" всё как обычно, ничего криминального, а вот на вкладке "Быстродействие" творится нечто, половина или больше памяти занята.
Нечего удивительного тут нет, процесс копирования идет через память она быстрее чем сеть, раз она доступна то ее и будем задействовать и в добавок использовать наверное большой кэш LargeSystemCache=1, так же IoPageLockLimit - Сколько памяти (в килобайтах) может заблокировать система под операцию ввода-вывода и т.д.
В данном случае используется протокол SMB - это протокол для работы с файловой системой по сети, основанный на технологии клиент-сервер.
Цитата:
Mark Russinovich
Внутреннее устройство Vista SP1 – улучшения в части копирования файлов
...
Механизм копирования файлов в предыдущих версиях Windows
Механизм копирования файлов Windows нацелен на успешную работу в любых сценариях – настолько, насколько это вообще возможно, учитывая неизбежность компромиссных решений и нехватку значимой информации. До появления ОС Windows Vista механизм был тривиален. Исходный и конечный файлы открывались в режиме кэширования, затем исходный файл последовательно считывался фрагментами по 64 КБ (при создании сетевых копий вследствие ограничений по размеру блоков чтения, налагаемых протоколом SMB1.0, размер фрагмента уменьшался до 60 КБ), и эти фрагменты передавались в конечный файл. При доступе к файлу путем ввода-вывода с кэшированием (в отличие от ввода-вывода в режиме отображения в памяти и ввода-вывода без буферизации) данные, подлежащие чтению и записи, сохраняются в памяти как минимум до того момента, когда диспетчер памяти решит, что эта память нужна для других целей (в частности, для кэширования данных других файлов).
Асинхронное упреждающее чтение в ходе копирования производилось диспетчером кэша Windows. Пока исходный файл считывался в фоновом режиме, проводник записывал данные на другом диске или в удаленной системе. Посредством механизма записи с задержкой, реализованной диспетчером кэша, содержимое скопированного файла своевременно перемещалось из памяти на диск. Таким образом, при необходимости ресурсы памяти можно было направить на решение других задач, а в случае неисправности диска или сбоя системы ущерб от потери данных должен был быть минимальным.
...
Кроме того, механизм копирования инициирует четыре начальных блока ввода-вывода в размере от 128 КБ до 1 МБ (в зависимости от размера копируемого файла). После этого поток чтения с опережением диспетчера кэша начинает инициировать крупные операции ввода-вывода. Изменения, внесенные в платформу в ходе разработки пакета обновления 1 (SP1), касаются диспетчера кэша и позволяют ему обрабатывать более крупные операции ввода-вывода с помощью чтения с опережением и записи с задержкой. Укрупнение блоков ввода-вывода стало возможным лишь благодаря работе, проведенной при разработке первоначальной версии системы ввода-вывода ОС Windows Vista. Эта работа была направлена на поддержку блоков размером свыше 64 КБ и тем самым на снятие ограничения, характерного для предыдущих версий ОС Windows. Ввод-вывод большими блоками повышает производительность и при локальном копировании, так как сокращается частота обращений к диску и операций позиционирования головки. Кроме того, он помогает потоку записи с задержкой диспетчера кэша поспевать за скоростью заполнения памяти скопированными данными файлов. Это уменьшает, хотя и не исключает вероятность критической нехватки памяти, при которой активное содержимое памяти в ходе копирования уничтожается. Наконец, при удаленном копировании крупные блоки ввода-вывода позволяют драйверу SMB2 задействовать конвейерную обработку. Диспетчер кэша может инициировать блоки ввода-вывода на чтение, которые по размеру в два раза больше блоков, генерируемых приложениями – до 2 МБ в Windows Vista и до 16 МБ в Windows Server 2008. Блоки ввода-вывода на запись в Windows Vista могут достигать 1 МБ, а в Windows Server 2008 – 32 МБ.
...
К этому если еще добавить и нововведение в сетевом стеке - TCP Auto-Tuning и Compound TCP (CTCP), ECN Capability, RSS то действительно можно предположить несогласованности сетевых действий в передаче файлов с Windows 7 куда то например на windows xp.