減小外圍部件快速互連鏈路中的延遲的制作方法
【專利說明】
【背景技術(shù)】
技術(shù)領(lǐng)域
[0001]本發(fā)明所描述的實施例涉及減小數(shù)據(jù)鏈路上的延遲。更具體地,本發(fā)明所描述的實施例涉及減小端點和主機(jī)之間的外圍部件快速互連鏈路上的延遲。
[0002]相關(guān)領(lǐng)域
[0003]許多現(xiàn)代計算機(jī)系統(tǒng)使用外圍部件快速互連(PCIe)鏈路來在主機(jī)和端點之間通信。當(dāng)未使用PCIe鏈路一段時間時,端點可通過使PCIe鏈路進(jìn)入節(jié)電模式來嘗試節(jié)省電力。通常,通過節(jié)電模式所節(jié)省的電力越多,PCIe鏈路退出節(jié)電模式并再次變得可操作所花的時間量就越長。
[0004]當(dāng)主機(jī)上的操作系統(tǒng)嘗試通過處于節(jié)電模式的PCIe鏈路與端點通信時,操作系統(tǒng)將不得不等待PCIe鏈路退出節(jié)電模式以允許恢復(fù)主機(jī)和端點之間的通信。當(dāng)?shù)却齈CIe鏈路恢復(fù)時,該延遲可能會超過某些操作系統(tǒng)的允許的延遲容限,從而導(dǎo)致意料不到的或不可接受的行為并有可能導(dǎo)致不期望的用戶體驗。
【附圖說明】
[0005]圖1呈現(xiàn)了示出根據(jù)所描述的實施例的主機(jī)和端點之間的PCIe鏈路的框圖。
[0006]圖2呈現(xiàn)了示出根據(jù)所描述的實施例的端點的框圖。
[0007]圖3呈現(xiàn)了示出根據(jù)所描述的實施例的具有通過PCIe鏈路在耦接到端點上的端點固件的主機(jī)上工作的驅(qū)動器的操作系統(tǒng)的框圖。
[0008]圖4呈現(xiàn)了示出根據(jù)所描述的實施例的減小PCIe鏈路中的延遲的過程的流程圖。
[0009]在附圖中,類似的附圖標(biāo)號是指相同的附圖元件。
【具體實施方式】
[0010]呈現(xiàn)以下描述是為了使得本領(lǐng)域的任何技術(shù)人員能夠?qū)崿F(xiàn)并使用所描述的實施例,并且以下描述在特定應(yīng)用的上下文及其要求中被提供。對所描述的實施例的各種修改對于本領(lǐng)域的技術(shù)人員而言將是顯而易見的,并且本文中所限定的一般原理可應(yīng)用于其他實施例和應(yīng)用,而不脫離所描述的實施例的實質(zhì)和范圍。因此,所描述的實施例不限于所示實施例,而是要被賦予符合本文所公開的原理和特征的最寬泛的范圍。
[0011]在該【具體實施方式】中所描述的數(shù)據(jù)結(jié)構(gòu)和代碼通常存儲在計算機(jī)可讀存儲介質(zhì)上,該計算機(jī)可讀存儲介質(zhì)可以是能夠存儲供具有計算能力的端點和/或主機(jī)使用的代碼和/或數(shù)據(jù)的任何設(shè)備或介質(zhì)。例如,計算機(jī)可讀存儲介質(zhì)可包括易失性存儲器或非易失性存儲器,包括閃存存儲器、隨機(jī)存取存儲器(RAM、SRAM、DRAM、RDRAM、DDR/DDR2/DDR3SDRAM等)、磁存儲介質(zhì)或光學(xué)存儲介質(zhì)(例如磁盤驅(qū)動器、磁帶、CD、DVD)、或能夠存儲數(shù)據(jù)結(jié)構(gòu)或代碼的其他介質(zhì)。需注意,在所描述的實施例中,計算機(jī)可讀存儲介質(zhì)不包括非法定的計算機(jī)可讀存儲介質(zhì)諸如傳輸信號。
[0012]該【具體實施方式】中所描述的方法和過程可被包括在硬件模塊中。例如,硬件模塊可包括但不限于一個或多個專用集成電路(ASIC)芯片、現(xiàn)場可編程門陣列(FPGA)、其他可編程邏輯器件、專用邏輯器件和微控制器。當(dāng)硬件模塊被激活時,硬件模塊執(zhí)行被包括在硬件模塊內(nèi)的方法和過程。在一些實施例中,硬件模塊包括被執(zhí)行指令(程序代碼、固件等)配置為執(zhí)行方法和過程的一個或多個通用電路。
[0013]在【具體實施方式】部分中所描述的方法和過程可被實施為代碼和/或數(shù)據(jù),該代碼和/或數(shù)據(jù)可被存儲在如上所述的計算機(jī)可讀存儲介質(zhì)中。當(dāng)具有計算能力的端點和/或主機(jī)讀取和執(zhí)行存儲在計算機(jī)可讀存儲介質(zhì)上的代碼和/或數(shù)據(jù)時,端點和/或主機(jī)執(zhí)行被實施為數(shù)據(jù)結(jié)構(gòu)和代碼并且被存儲在計算機(jī)可讀存儲介質(zhì)內(nèi)的方法和過程。例如,在一些實施例中,處理子系統(tǒng)可從包括計算機(jī)可讀存儲介質(zhì)的存儲器子系統(tǒng)讀取代碼和/或數(shù)據(jù),并且可執(zhí)行代碼和/或使用數(shù)據(jù)以執(zhí)行該方法和過程。
[0014]在以下描述中,我們涉及“一些實施例”。需注意,“一些實施例”描述了所有可能實施例的子集,但并未始終規(guī)定實施例的相同子集。
[0015]綜述
[0016]所描述的實施例執(zhí)行用于減小主機(jī)和端點之間的外圍部件快速互連(PCIe)鏈路中的延遲的操作。在所描述的實施例中,主機(jī)可包括可通過PCIe鏈路與端點通信的任何主機(jī)設(shè)備。一般來講,主機(jī)包括將主機(jī)上的處理器和存儲器耦接到PCIe鏈路的根復(fù)合體。端點通常為通過PCIe鏈路與主機(jī)通信的設(shè)備。PCIe鏈路可為符合PCI特別興趣小組(PIC-SIG)PCIe規(guī)范(例如,PCI Express 3.0基本規(guī)范修訂版3.0)的PCIe鏈路。
[0017]端點可通過PCIe鏈路與主機(jī)交換數(shù)據(jù)和/或其他信息。然而,當(dāng)PCIe鏈路保持空閑一段時間時,端點可實現(xiàn)可用節(jié)電模式中的一種節(jié)電模式,以便在不使用PCIe鏈路時減少其所消耗的電力。端點通過從L狀態(tài)LO (最高電力狀態(tài))過渡到由PCIe規(guī)范所定義的較低電力L狀態(tài)(例如,LI子狀態(tài)L1.0、L1.1和L1.2)來減少PCIe鏈路的電力消耗。
[0018]LI子狀態(tài)允許PCIe鏈路通過使該鏈路的一個或多個子系統(tǒng)進(jìn)入一種或多種較低電力消耗狀態(tài)來實現(xiàn)節(jié)能。然而,在從LI子狀態(tài)退出并進(jìn)入LO狀態(tài)的過程中存在延遲。這種退出延遲是指PCIe鏈路重新上電使得主機(jī)和端點能夠再次通過該鏈路進(jìn)行通信所花的時間量。一般來講,L狀態(tài)(例如,LI子狀態(tài))下減少的用電量越大,在過渡到LO狀態(tài)以使PCIe鏈路重新上電的過程中的延遲就越長。
[0019]端點可用于實現(xiàn)電源管理的另一種方法是延遲容限報告(LTR)機(jī)制。端點可向根復(fù)合體發(fā)送LTR值,從而通知該根復(fù)合體在使PCIe鏈路從節(jié)電模式上電時端點能夠承受的延遲。根復(fù)合體隨后使用LTR值來對PCIe鏈路的一種或多種節(jié)電模式進(jìn)行管理。
[0020]在操作期間,除了與主機(jī)交換數(shù)據(jù)以外,端點還可向主機(jī)發(fā)送消息,針對該主機(jī),該端點期望一個響應(yīng)。例如,端點可向主機(jī)發(fā)出中斷,并期望主機(jī)上的操作系統(tǒng)將最終基于中斷對端點作出響應(yīng)。然而,如果主機(jī)上的操作系統(tǒng)直到PCIe鏈路變?yōu)榭臻e并且進(jìn)入節(jié)電模式之后才對中斷作出響應(yīng),則操作系統(tǒng)不得不等待PCIe鏈路退出節(jié)電模式(例如,退出延遲)。在該一段時間期間,可能會阻止主機(jī)上的操作系統(tǒng)執(zhí)行其他操作,從而導(dǎo)致主機(jī)上的意想不到或不想要的行為。
[0021]在所描述的實施例中,當(dāng)主機(jī)和端點首次通過PCIe鏈路進(jìn)行通信時,主機(jī)會通知端點該主機(jī)操作系統(tǒng)的延遲容限(例如,操作系統(tǒng)可等待來自端點的響應(yīng)的最大延遲)。主機(jī)操作系統(tǒng)的最大延遲可基于多種因素,包括但不限于主機(jī)上的操作系統(tǒng)可等待來自端點的響應(yīng)的最大時間周期,或者可基于一種或多種樣本使用配置下的主機(jī)的所計算的、所測量的或所模擬的性能的統(tǒng)計最大延遲。
[0022]在端點被通知該主機(jī)操作系統(tǒng)的延遲容限之后,當(dāng)端點期望來自主機(jī)操作系統(tǒng)的響應(yīng)時,該端點基于主機(jī)操作系統(tǒng)的延遲要求來操作。例如,如果主機(jī)操作系統(tǒng)的延遲容限為30微秒,并且L子狀態(tài)L1.0到L狀態(tài)LO的退出延遲小于30微秒,而L子狀態(tài)L1.1和L1.2到L狀態(tài)LO的退出延遲大于30微秒,則當(dāng)端點期望來自主機(jī)上的操作系統(tǒng)的響應(yīng)時,端點可能會阻止PCIe鏈路進(jìn)入子狀態(tài)L1.1和L1.2,僅允許PCIe鏈路進(jìn)入LO或L1.0。在一些實施例中,端點可能不允許PCIe鏈路進(jìn)入LI狀態(tài)。另外,在一些實施例中,端點可能會請求PCIe鏈路進(jìn)入LI狀態(tài),并且當(dāng)主機(jī)確認(rèn)該請求后,端點將通過不釋放CLKREQ#并抑制其自身進(jìn)入L1.1或L1.2子狀態(tài)來允許PCIe鏈路進(jìn)入L1.0子狀態(tài)。最后,端點可向根復(fù)合體發(fā)送消息,從而將LTR值更改為基于主機(jī)操作系統(tǒng)的延遲容限的值。
[0023]當(dāng)端點不再期望來自主機(jī)上的操作系統(tǒng)的響應(yīng)時(例如,因為已接收到期望的響應(yīng)并且不期望進(jìn)一步的響應(yīng)),端點可恢復(fù)到其先前的延遲要求(例如,基于其自身的延遲容限)。端點可能允許PCIe鏈路進(jìn)入適合端點自身的電力節(jié)省或延遲要求的任何L狀態(tài)或子狀態(tài)。另外,如果當(dāng)端點期望來自主機(jī)上的操作系統(tǒng)的響應(yīng)時,端點向根復(fù)合體發(fā)送消息,從而將LTR值更改為基于主機(jī)操作系統(tǒng)的延遲容限的值,則端點可能會向根復(fù)合體發(fā)送消息,從而將LTR值改回到基于端點自身要求的值。
[0024]需注意,端點可跟蹤何時期望來自主機(jī)上的操作系統(tǒng)的響應(yīng),因此針對PCIe鏈路將其延遲要求更改為服從主機(jī)上的操作系統(tǒng)的延遲容限。端點可使用任何方法來跟蹤何時期望來自主機(jī)上的操作系統(tǒng)的響應(yīng),包括但不限于將此信息作為狀態(tài)信息存儲在端點上的存儲器中,或者使用存儲在端點上的任何其他信息來跟蹤何時期望來自主機(jī)OS的響應(yīng),諸如確定是否存在來自端點的并且主機(jī)尚未對其作出響應(yīng)的未完成中斷。
[0025]鏈路環(huán)培
[0026