Windows Vista播放多媒體減慢網(wǎng)速原因
著名Windows專家、《Windows Internals》一書作者Mark Russinovich近日在其Blog上對近幾天一些論壇上提出的Windows Vista在播放多媒體文件時導致網(wǎng)絡速度嚴重減慢提出了解釋,他在博客中提到:
很多人正確地指出了導致媒體播放時網(wǎng)絡性能下降問題的根源在于多媒體類計劃程序(MMCSS),一項曾在Technet雜志上連續(xù)三期介紹的Vista內核新改變。多媒體播放需要媒體流具有一個穩(wěn)定的速率,否則當要求達不到時播放就會出現(xiàn)“卡”的現(xiàn)象。MMCSS服務運行于服務宿主Svchost.exe 中,它自動提升音視頻播放的優(yōu)先級以防止其他軟件過分占用播放軟件應得到的CPU時間。
當一個多媒體應用程序開始播放,多媒體API自動請求MMCSS服務在每10毫秒中的最多8毫秒時間將其播放線程的優(yōu)先級提升至級別16-31的最高級 (Realtime),而這決定于播放線程需要多少CPU時間。由于其它線程運行在動態(tài)優(yōu)先級15以下,就算是CPU占用相當大的應用程序都不會影響播放。
你能夠通過在WMP中播放一段音視頻剪輯來看到這一變化。在播放時運行可靠性與性能監(jiān)視器(perfmon.exe),選中性能監(jiān)視器,在Thread對 象中對所有WMPlayer.exe的線程加入Priority Current選項。將圖像范圍調整至31(Windows中最高優(yōu)先級)你就能夠輕易看到被提升的線程,在這里是優(yōu)先級21:
不僅是其他線程的活動,媒體播放也能受到網(wǎng)絡活動的影響。當一個數(shù)據(jù)包到達系統(tǒng),觸發(fā)一個CPU中斷,將會使網(wǎng)絡設備的驅動程序執(zhí)行一個中斷服務程序 (ISR)。其它設備的中斷請求在ISR運行時將被阻止,因此ISR通常用于執(zhí)行一些設備記錄并且在一個DPC(Deferred Procedure Call)中進行一些在一個更長的數(shù)據(jù)傳輸。當DPC在中斷啟用的狀態(tài)被執(zhí)行,它們將無視優(yōu)先級而優(yōu)先于任何線程,因此可能對媒體播放線程造成沖擊。
而網(wǎng)絡DPC的處理要求幾乎是最高的,因為它將把數(shù)據(jù)包傳送至TCP/IP驅動,這需要長時間的計算才能完成。TCP/IP驅動校驗每個數(shù)據(jù)包、確定每個 包使用的協(xié)議、更新連接狀態(tài)、尋找接收應用程序,并將接收到的數(shù)據(jù)復制到應用程序的緩沖區(qū)內。這一個Process Explorer截圖顯示了當我將一個大文件復制到其它系統(tǒng)時,DPC的CPU占用率的上升。
在Vista開發(fā)時對MMCSS的測試中,發(fā)現(xiàn)即使增加線程優(yōu)先級,大規(guī)模的網(wǎng)絡傳輸也會使長時間運行的DPC影響到播放線程。因此MMCSS將會發(fā)送一條消息至NDIS驅動,使其每毫秒僅傳輸10個數(shù)據(jù)包(每秒1萬個)。
標準以太網(wǎng)的幀大小大約為1500字節(jié),1萬個包每秒的限制使得速度被限制在15兆每秒左右。這對于百兆網(wǎng)絡沒有影響,但將會使千兆網(wǎng)絡的性能下降到最大值的15%。
同時在NDIS的這段限制代碼中,一個BUG將使得這種限制在多網(wǎng)卡的系統(tǒng)中放大。比如如果你有一臺同時擁有有線和無線網(wǎng)卡的機器,這個限制將擴大到8000包/秒,而三塊網(wǎng)卡時則進一步擴大到6000包/秒。這個限制此時在百兆網(wǎng)絡上也顯而易見。
我在我的3網(wǎng)卡筆記本上也發(fā)現(xiàn)了這一限制。在我向另一臺機器復制文件的同時,我打開WMP播放音樂。任務管理器顯示千兆網(wǎng)絡的使用率從20%降低至6%。
你能通過在性能監(jiān)視器視圖的Network對象中添加“每秒接收數(shù)據(jù)包”來監(jiān)視NDIS的數(shù)據(jù)包接收情況。下面你能看到我在實驗中接收數(shù)據(jù)率的變化。NDIS處理的數(shù)據(jù)包數(shù)沒有達到6000的“理論最大值”,可能是因為與對方機器進行的連接準備有關。
就算限制如此之大,Internet傳輸也不會受影響,因為多次中轉遠遠降低了數(shù)據(jù)包的傳輸率。
Vista的這個限制來自在百兆網(wǎng)絡上高傳輸率的同時達到低延遲流暢播放的實驗結果。這個硬編碼的限制是短視的,它忽略了今日多處理器系統(tǒng)和千兆網(wǎng)絡普及的現(xiàn)狀。現(xiàn)在Windows的網(wǎng)絡開發(fā)組正和MMCSS組共同努力,開發(fā)一個補丁來應對此問題。
(譯者評論:不是一個BUG,是一個功能。難道為了那該死的多媒體組件,就要犧牲網(wǎng)絡性能?那些超高端的視頻編輯系統(tǒng),通過千兆網(wǎng)編輯文件服務器 上那些碼率上百Mbps的低壓縮率高清視頻素材,這樣一來不就“卡”到死了嗎?再進一步說,如果Windows Server 2008正式版上這個MMCSS服務還是默認啟用的,那么攻擊者就有了一種新的DoS服務器的方法,只要他有服務器的一般用戶權限,3389上去一放歌, 外面瘋狂DDoS、CC,服務器的當機還會遠嗎?)
在評論中有人提出了解決方案:
修改注冊表
HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesAudiosrvDependOnService
將Windows Audio服務的依存服務選項中的MMCSS服務去掉,
再禁止MMCSS服務,就能破解掉這一限制。
