Зниження мережевий пропускної здатності Vista при відтворенні мультимедіа. - все про комп'ютери


На різних форумах одноголосно заговорили про зниження мережевий пропускної здатності на Vista-комп'ютерах при відтворенні мультимедіа-контенту. Масло у вогонь підбавить і Slashdot і Едріан Кінгслі-Хьюджс (Adrian Kingsley-Hughes) з Zdnet.


Багато хто з користувачів, що написали про існування проблеми, чітко підмітили, що зниження мережевий пропускної здатності при відтворенні мультимедіа прямо пов'язана з механізмами, які використовуються Multimedia Class Scheduler Service (MMCSS) — абсолютно новим для Windows компонентом, який докладно висвітлений у серії публікацій в TechNet Magazine про зміни в ядрі Windows Vista. Відтворення мультимедіа вимагає постійного рівня потоку, а при його відсутності відтворення може відбуватися з ривками і завмираннями. Служба MMCSS запускає в рамках процесу Svchost.exe, де автоматично проводиться розподіл пріоритетів для відтворення аудіо/відео з метою запобігти перерозподіл ресурсів CPU на інші процеси:


Коли програма починає відтворювати різні мультимедійні API, використовувані даним додатком, звертатися до служби MMCSS з метою підвищити пріоритетність потоку до рівня реального часу, в який входять пріоритети з індексами від 16 до 31, і це повторюється кожні 8мсек в залежності від того, скільки ресурсів потрібно потоку. Оскільки інші потоки працюють в динамічному діапазоні пріоритетів з індексами нижче 15, будь – навіть вимоглива до ресурсів процесора – додаток жодним чином не впливає на відтворення.


Можна бачити стрибок поточного індексу пріоритету при відтворенні аудіо або відео Windows Media Player (WMP), якщо запустити Reliability and Performance Monitor (Start- />Run- />Perfmon), вибрати Performance Monitor і додати значення Priority Current для всіх потоків Wmplayer; в об'єкті Thread. Встановіть масштаб шкали на 31 (максимальне значення пріоритету Windows) і ви не зможете не помітити потік, показаний на наведеному нижче скріншоті з пріоритетом 21:



На додаток до інших потоків, відтворення мультимедіа може страждати від мережевої активності. Коли система приймає мережевий пакет, відбувається звернення до процесора, а драйвер пристрою, який приймає пакет, виробляє переривання шляхом запуску Interrupt Service Routine (ISR). Переривання, що виконуються іншими пристроями, блокуються запущеної процедурою ISR, яка виконує досить тривалу передачу даних на або з пристрою через звернення Deferred Procedure Call (DPC), що запускається з активованим перериванням. Коли виконується DPC з активованим перериванням, воно отримує перевагу над іншими потоками незалежно від пріоритету, що може стати перешкодою потоків, відтворюючим мультимедіа.


DPC-обробка отриманих мережевих пакетів — це найбільш дорога в сенсі ресурсів процесора процедура, оскільки передбачає передачу пакетів TCP/IP-драйверу, що виливається у досить тривалі обчислення. TCP/IP-драйвер вивіряє кожен пакет, що визначає пакетний протокол, оновлює стан з'єднання, знаходить приймає програму і копіює отримані дані в буфер програми. Нижченаведений скріншот Process Explorer ілюструє, наскільки істотно зростає використання ресурсів CPU для DPC при копіюванні великого файлу з іншого комп'ютера:


Тести MMCSS в ході розробки Vista показали, що навіть при активованому розподілі пріоритетів великі обсяги мережевого трафіку можуть стає причиною невідповідності потоків відтворення вимогам, що може викликати завмирання у відтворенні. Використані в MMCSS механізми, що перешкоджають переривання відтворення, були доопрацьовані з метою запобігання переривань мережевою активністю. Була додана команда, яка надсилається NDIS-драйверу, який передає пакети для обробки TCP/IP-драйвером у кількості, що дорівнює 10 пакетів в мілісекунду (10000 пакетів в секунду).


Оскільки стандартний розмір Ethernet-кадр дорівнює 1500 байтам, межа в 10000 пакетів в секунду еквівалентний пропускної здатності в 15МБ/с. 100Мб магістральні мережі мають пропускну здатність у 12МБ/с, тому якщо ви працюєте в мережі 100мбіт, то ви не помітите падіння пропускної здатності. Однак, якщо ви включені в 1Гб-ву мережу, і обидва — відправник і одержувач пакетів — використовують 1Гб-ві адаптери, то ви зіткнетеся з 15% зниженням пропускної здатності мережі.


Більш того, в коді NDIS допущена ця помилка, що посилює проблему при використанні декількох NIC-карт. Якщо, приміром, у вашій системі присутні і дротової і бездротової адаптери, NDIS зможе обробляти не більше 8000 пакетів в секунду, а три адаптера скоротять цю цифру до 6000 пакетів в секунду. 6000 пакетів в секунду еквіваленти пропускної здатності в 9МБ/с, тому при такій схемі падіння продуктивності буде помітно і в 100Мб-ної мережі.


Зверніть увагу на ілюстрацію падіння мережевої продуктивності на ноутбуці з трьома мережевими адаптерами, яке було викликано шляхом об'ємного копіювання файлу з іншого комп'ютера мережі з подальшим запуском WMP і відтворенням аудіотрека. Нижченаведений скріншот наочно показує, як використовуються 20% пропускної здатності мережі падають до позначки 6% після початку відтворення музичного треку:


Можна проконтролювати кількість пакетів, оброблених NDIS, шляхом додавання лічильника "кількість пакетів, одержаних за одну секунду/packets recieved per second" в об'єкті Network в Performance Monitor. Нижче можна бачити істотне зміна кількості прийнятих пакетів після початку експерименту. Кількість пакетів, оброблених NDIS, не досягає теоретичного максимуму в 6000.



Незважаючи на подібний рівень переривання, Інтернет-трафік — навіть при високошвидкісному з'єднанні — жодним чином не постраждає. Це все завдяки численності проміжних з'єднань між вашою системою і іншими комп'ютерами мережі, що скорочує шлях пакета і, як наслідок, зменшує швидкість, з якою система передає інформацію.Запрограмований ліміт був непередбачливим кроком з нашого боку з надією на сучасні комп'ютери з швидкими процесорами з декількома ядрами і гігабітними мережевими адаптерами. Але сьогодні в доповнення до робіт з усунення істотного зниження пропускної здатності на комп'ютерах з кількома адаптерами, команда мережевих розробників Microsoft активно співпрацює з командою MMCSS з метою знизити вплив служби на мережевий трафік, при цьому зберігши стійкість до завмирань.