11.定時(shí)器庫
定時(shí)器庫為DPDK執(zhí)行單元提供定時(shí)器服務(wù),使得執(zhí)行單元可以為異步操作執(zhí)行回調(diào)函數(shù)宪巨。定時(shí)器庫的特性如下:
- 定時(shí)器可以周期執(zhí)行捅伤,也可以執(zhí)行一次。
- 定時(shí)器可以在一個(gè)核心加載并在另一個(gè)核心執(zhí)行难衰。但是必須在調(diào)用rte_timer_reset()中指定它股毫。
- 定時(shí)器提供高精度(取決于檢查本地核心的定時(shí)器到期的rte_timer_manage()的調(diào)用頻率)。
- 如果應(yīng)用程序不需要召衔,可以在編譯時(shí)禁用定時(shí)器铃诬,并且程序中不調(diào)用rte_timer_manage()來提高性能。
定時(shí)器庫使用rte_get_timer_cycles()獲取高精度事件定時(shí)器(HPET)或CPU時(shí)間戳計(jì)數(shù)器(TSC)提供的可靠時(shí)間參考苍凛。
該庫提供了添加趣席,刪除和重新啟動(dòng)定時(shí)器的接口。API基于BSD callout()醇蝴,可能會(huì)有一些差異宣肚。詳細(xì)請(qǐng)參考callout手冊(cè)。
11.1.實(shí)現(xiàn)細(xì)節(jié)
定時(shí)器以每個(gè)邏輯核為基礎(chǔ)進(jìn)行跟蹤悠栓,一個(gè)邏輯核上要維護(hù)的所有掛起的定時(shí)器霉涨,按照定時(shí)器到期順序插入到跳躍表數(shù)據(jù)結(jié)構(gòu)按价。
所使用的跳躍表有十個(gè)層,表中的每個(gè)條目都以1/4的概率顯示在每個(gè)層上笙瑟。這意味著所有條目都存在于第0層中楼镐,每4個(gè)條目中的1個(gè)條目存在于第一層,每16個(gè)中1個(gè)條目存在于第2層往枷,等等框产。同時(shí),這意味著從邏輯核的定時(shí)器列表中添加和刪除條目可以在log(n)時(shí)間內(nèi)完成错洁,最多4 ^ 10個(gè)條目秉宿,即每個(gè)邏輯核約有1,000,000個(gè)定時(shí)器。
定時(shí)器結(jié)構(gòu)包含一個(gè)稱為狀態(tài)的特殊字段屯碴,它是定時(shí)器狀態(tài)(stopped描睦,pending,running导而,config)及其所有者(lcore id)的聯(lián)合體酌摇。根據(jù)定時(shí)器狀態(tài),我們可以知道定時(shí)器當(dāng)前是否存在于列表中:
- STOPPED:沒有所有者嗡载,不再鏈表中窑多。
- CONFIG:由一個(gè)邏輯核持有,其他邏輯核不能修改洼滚,是否存在于跳表中取決于以前的狀態(tài)埂息。
- PENDING:由一個(gè)邏輯核持有,當(dāng)前在跳表中遥巴。
- RUNNING:由一個(gè)邏輯核持有千康,當(dāng)前在跳表中,不能由其他邏輯核修改铲掐。
不允許在定時(shí)器處于CONFIG或RUNNING狀態(tài)時(shí)復(fù)位或停止定時(shí)器拾弃。當(dāng)修改定時(shí)器的狀態(tài)時(shí),應(yīng)使用CAP指令來保證狀態(tài)修改操作(狀態(tài)+所有者)是原子操作摆霉。
在rte_timer_manage()函數(shù)里面豪椿,跳躍表作為常規(guī)的鏈表,通過沿著包含所有計(jì)時(shí)器條目的第0層鏈表迭代携栋,直到遇到尚未到期的條目為止搭盾。當(dāng)列表中有條目,但是沒有任何條目定時(shí)器到期時(shí)婉支,為了提高性能鸯隅,第一個(gè)定時(shí)器條目的到期時(shí)間保存在每個(gè)邏輯和計(jì)時(shí)器列表結(jié)構(gòu)本身內(nèi)部。在64位平臺(tái)上向挖,可以直接檢查該值蝌以,而無需對(duì)整個(gè)結(jié)構(gòu)進(jìn)行鎖定炕舵。(由于到期時(shí)間維持為64位值,所以在32位平臺(tái)上無法直接對(duì)該值進(jìn)行檢查跟畅,而不使用(CAS)指令或使用鎖機(jī)制咽筋,因此,一旦數(shù)據(jù)結(jié)構(gòu)被上鎖碍彭,此額外的檢查將被跳過晤硕。)在64位和32位平臺(tái)上悼潭,在調(diào)用邏輯核的計(jì)時(shí)器列表為空的情況下庇忌,對(duì)rte_timer_manage()的調(diào)用將直接返回而不進(jìn)行鎖定。=
11.2.用例
定時(shí)器庫用于定期調(diào)用舰褪,如垃圾收集器或某些狀態(tài)機(jī)(ARP皆疹,橋接等)。
11.3.參考
- callout manual :喚醒功能占拍,提供定時(shí)器到期執(zhí)行的功能略就。
- HPET :有關(guān)高精度事件定時(shí)器(HPET)的信息。