天天看點

垂直同步之謎 XP/Vista與3D性能測試

在前段時間我們在測試Quadro系列顯示卡性能的時候,出現過SPECviewperf性能過低的情況,現在我們知道這種情況是和一個“垂直同步”的選項相關的,不過,其背後的故事沒有這麼簡單。

垂直同步之謎 XP/Vista與3D性能測試

SPECviewperf 10:基于OpenGL的專業3D性能基準測試程式

  實際上,垂直同步影響到性能不僅僅是在SPECviewperf下,其它程式上也有類似的情況。SPECviewperf是SPEC(Standard Performance Evaluation Corporation)的一個專業3D性能基準測試程式,它基于OpenGL(GL:Graphics Library),OpenGL是專業繪圖領域常用的一種接口。這實際上,在Windows XP系統下,垂直重新整理同步的影響對所有的OpenGL應用都會生效。

垂直同步之謎 XP/Vista與3D性能測試

開放的圖形接口:OpenGL

  要搞清楚這個問題,要先從作業系統的驅動模型講起,在Windows XP裡面,OpenGL ICD(installable client driver)驅動直接與GPU硬體層會話,直接操控硬體并掌握所有的底層功能,如記憶體管理等也包攬在内。

垂直同步之謎 XP/Vista與3D性能測試

Windows XP的Direct3D/GDI驅動架構

  在XP中,3D視窗對于系統來說就像是在桌面上開了一個洞——因為通常的2D視窗使用的是GDI(Graphics Device Interface,圖形裝置接口,負責系統與繪圖程式之間的資訊交換,處理所有Windows程式的圖形輸出),如Direct3D和OpenGL都是用了獨立的輸出路徑。

垂直同步之謎 XP/Vista與3D性能測試

以ATI為例的Windows XP驅動模型

  在Windows XP中,Direct3D、OpenGL、GDI三種圖形接口都需要廠商提供驅動程式來進行處理,并且,最終的混合工作也是由其負責——整個系統的顯示速率都由驅動來控制。垂直同步的功能亦然。

垂直同步之謎 XP/Vista與3D性能測試

NVIDIA驅動中的Vertical sync垂直同步選項

  Vertical sync垂直同步是涉及到顯示卡和顯示器的一個概念。在CRT顯示器中,顯示器上的所有圖像都是一線一線的掃描上去的(無論是隔行掃描還是逐行掃描),是以顯示器都有2種同步參數——水準同步和垂直同步。其中,水準同步信号決定了顯示器畫出一條橫越螢幕線的時間,垂直同步信号決定了顯示器從螢幕頂部畫到底部,再傳回原始位置的時間。換句話說,我們可以将垂直同步的數值了解為CRT顯示器的重新整理率。

  重新整理率隻是次要,垂直同步的重要作用是確定顯示區域處于空白、可重新整理狀态,這樣才可以充填顯示内容。在不同步的情況下會發生同時渲染多個不同的幀的情況,它會引起畫面“撕裂”等各種不自然的情況。對于CRT和LCD來說都是一樣。

  在WIndows XP的驅動模型下,當開啟垂直同步時,顯示卡渲染完成某一圖像之後,在沒有垂直同步信号到達前,顯示卡無法繪制下一幀,這自然限制了SPECviewperf的性能。而在關閉垂直同步的情況下,圖像是能多快就多快地聲稱。實際上,SPECviewperf是要求在Windows XP下關閉垂直同步的。

  在撥開垂直迷霧 榨幹Quadro顯示卡最終性能裡,我們測試了Windows XP Professional x64系統下的垂直同步選項的影響。Windows XP Professional x64系統和Windows XP Professional x86并不是基于相同的代碼樹,它基于Windows Server 2003 x64,不過,同樣為XP系統,它們的大架構确實是一樣的,如驅動模型,如垂直同步的作用方式。

垂直同步之謎 XP/Vista與3D性能測試

SPECviewperf 9

垂直同步之謎 XP/Vista與3D性能測試

SPECviewperf 10:開啟垂直同步

垂直同步之謎 XP/Vista與3D性能測試

SPECviewperf 10:關閉垂直同步

垂直同步之謎 XP/Vista與3D性能測試

SPECviewperf 10:開啟垂直同步

垂直同步之謎 XP/Vista與3D性能測試

SPECviewperf 10:關閉垂直同步

  可以看出明顯的差别。

  到了Windows Vista下,情況又有所不同:微軟在Vista中引入了新的Aero桌面UI和全新的顯示驅動模型,不僅極大地改變了使用者體驗,對與OpenGL的内在影響也非常巨大。Vista是原生支援OpenGL的,這對微軟來說是一個巨大的改變。

  Windows Vista的一個重要特性是Aero使用者界面,它提供了透明度、混合等視窗功能,以及動畫圖示、程式畫面預覽等特性,實際上,Aero本身就是一個3D應用程式,它需要GPU具有一定的3D能力并和其緊密內建。Windows Vista通過DWM(Desktop Window Manager,桌面視窗管理器)來提供Aero的底層支援。

垂直同步之謎 XP/Vista與3D性能測試

OpenGL、Direct3D與DWM:Windows Vista的驅動模型

  為了得到最終的合成桌面,所有視窗的3D内容(OpenGL或Direct3D)都要發送到DWM,由DWM混合得到最終的顯示畫面。DWM下,GDI不再提供硬體加速,而是通過CPU來完成)。Windows Vista同時提供了一個新的顯示驅動模型來支援新的變化(使Direct3D和OpenGL處于對等的地位),新的WDDM(Windows Display Driver Model),或者叫做LDDM(Longhorn Display Driver Model)将會在Aero打開的時候提供3D視窗混合功能(無論是使用Direct3D還是OpenGL接口)。

垂直同步之謎 XP/Vista與3D性能測試

Windows Vista下的WDDM驅動模型

  WDDM提供了一個由Thunk Layer組成的防火牆,它這提高了系統整體的穩定性。在以往(如XP下),驅動程式直接與GPU硬體層會話,并掌握諸多底層功能,這很容易引起問題,現在由顯示卡驅動帶來的問題不太容易影響到整個系統(當然,問題還是有的)。此外,WDDM還改變了圖形API的工作方式,以往如顯存等資源由驅動程式控制,現在則統一交給作業系統管理,又比如在多個程式運作時,OpenGL ICD可以為每個程式都提供最大的材質存儲空間,并且由Vista負責配置設定資源和管理排程,進而提高系統資源的整體利用效率。當然,由于每個程式都配置了獨立的顯存,這樣記憶體占用會有所增加。

垂直同步之謎 XP/Vista與3D性能測試

停止響應的顯示驅動程式

  由于Vista管理着提供給核心層的顯示指令緩沖區,是以現在可以通過OS檢測顯示卡故障,通過Vista的TDR(Timeout Detection and Recovery,逾時檢測恢複)功能,若一個顯示指令2秒内得不到執行,那麼Vista就會重置圖形晶片和恢複顯示卡驅動。并進行如圖上的提示。

  現在Vista下,DWM管理着最終的輸出效果,驅動程式已經無法直接對最終輸出的桌面進行操作,而代之的是一個輸出隊列。每一個程式都具有自己的輸出緩沖區,如下圖所示,實際上Aero就是将所有視窗的送出的最終畫面通過3D變換再輸出:

垂直同步之謎 XP/Vista與3D性能測試

Aero效果;Alt-Tab的任務切換效果類似

  新的DWM模型對OpenGL,或者說,對我們的SPECviewperf有什麼影響呢?

  它影響了OpenGL垂直同步的工作形式。在以往,垂直同步影響着顯示卡生成内容的速率,這影響了OpenGL應用的性能,而現在在Vista下,所有的應用程式之間都是“垂直同步”的,因為如果不同步的話,不同幀率的應用程式會非常容易出現各種畫面異常。在畫面生成速率快過顯示重新整理率的情況下,有兩種方法可以得到正常的畫面效果:

  第一種方法是限制視窗内容重新整理速率為顯示重新整理率,實際上就是強制開啟垂直同步。第二種方法是隻顯示在同步信号到達的那一幀,并丢棄所有其他的幀,這種方法的好處是不會限制住應用程式生成圖像的速度,因為并不是所有生成的圖像都會顯示出來。Windows Vista DWM實作了後面的那種方法。

  基于架構上的改變,垂直同步的意義在XP上和Vista上就顯得很不同,在XP上,打開垂直同步将會限制内容生成的速率,在Vista上,打開垂直同步不過是限制了畫面重新整理的速率,顯示卡盡可能快地生成了圖像,隻不過隻有對應的幀才會顯示出來。也就是說,在Vista下測試3D性能的時候,你不需要像XP那樣特地關閉垂直同步。隻有在需要進行XP和Vista對比的時候,你才需要關閉DWM(進而也關閉了Aero效果)。這個情況并不符合實際使用者的情況:大部分使用者都使用DWM和Aero。對于Vista來說,關閉DWM的測試是沒有意義的,也不符合SPECviewperf的目标:得出真實環境下的圖形性能。

繼續閱讀