很多讀者對(duì)AXI是如何提高吞吐量,提高帶寬的方式還不夠Make sense。本篇文章將從概念本身,結(jié)合配圖,帶大家充分理解AXI是如何提高性能的。
1、如何評(píng)估性能?
性能中一個(gè)關(guān)鍵的指標(biāo)就是延遲,什么是延遲(Latency)呢?
比如有個(gè)人,叫做小明,在上大學(xué)需要用錢,因此給父親寄信。父親收到信以后將錢寄給小明同學(xué)。整個(gè)過程一共花費(fèi)了2+3=5days。這就是整個(gè)寄信加寄錢所花費(fèi)的延遲。
我們假設(shè)每次寄錢只能夠寄兩萬,由此我們又可以引出帶寬(Bandwidth)的概念。所謂的帶寬即單位時(shí)間可以傳輸?shù)臄?shù)據(jù)量多少。在上述的例子中BW=2W/5days = 0.4W/day。
如果按照這樣的一個(gè)帶寬速度,寄100萬需要多久呢?我們用數(shù)據(jù)量除以帶寬:100W/(0.4W/day)=250days!
如何讓寄100萬更快呢?一種很直接的方法,就是在收到錢之前,狂發(fā)信。父親每收到一封就把錢寄回去。理論上這樣只需要5天多一點(diǎn),就可以寄100W!
2、Outstanding對(duì)性能的影響
有了上面的例子,大家已經(jīng)知道了什么是延遲和帶寬了。由此我們接著往下講。在之前的文章已經(jīng)講過,AXI提高傳輸速度主要有三板斧,以下排名分先后順序:
Outstanding
Out-of-orde(ooo)
Interleave
最直截了當(dāng)提高總線性能的方法是什么呢?首先就是提高頻率,再一個(gè)就是提高數(shù)據(jù)位寬。這兩種方式對(duì)所有的總線實(shí)際上都是成立的,但由于過于簡(jiǎn)單粗暴,一般不能作為某個(gè)總線的優(yōu)勢(shì)或者賣點(diǎn)所在。
因此我們重點(diǎn)講一下AXI的三板斧,首先是Outstanding。所謂的Outstanding就是在任務(wù)完成之前就可以下達(dá)新的任務(wù),即“在路上”。Outstanding是上面三種方法中,提高總線性能最有效最簡(jiǎn)單的方法!
我們看一下Outstanding的延遲怎么算。下圖顯然是不支持Outstanding的例子,可以看到AR發(fā)出以后,需要15個(gè)Cycle準(zhǔn)備數(shù)據(jù),又需要5個(gè)Cycle傳回?cái)?shù)據(jù)。因此總共需要20個(gè)Cycle。
這個(gè)例子中絕對(duì)延遲和平均延遲都是20s。
這個(gè)例子中帶寬BW=30B/60s=0.5Bps,然而最大的瞬時(shí)帶寬是2Bps。
有75%的時(shí)間都因?yàn)镸aster和Slave之間的巨大延遲而浪費(fèi)掉了!
我們?cè)倏匆幌翺utstanding做到3的時(shí)候是怎樣的結(jié)果,下圖這個(gè)例子中,絕對(duì)延遲依然是20s。但是平均延遲變?yōu)榱?0s/3=10s。相應(yīng)的帶寬也變成了1Bps。
上面那個(gè)例子中,是過了5s再發(fā)出下一個(gè)Outstanding命令,實(shí)際上一般不會(huì)考慮這么多。當(dāng)還沒有發(fā)滿的時(shí)候,就接著發(fā)。我們看下面這個(gè)例子:
絕對(duì)延遲分別是20/24/28s。由此可以看到Outstanding有可能還會(huì)使絕對(duì)延遲變長(zhǎng)(當(dāng)然B、C也可以向流水線一樣和A緊貼著,這個(gè)取決于具體設(shè)計(jì)。當(dāng)需要維持住5個(gè)Cycle的時(shí)候,那自然就需要等待了)
平均延遲是50/6=8.33s。
BW=60B/50s=1.2Bps
也可以用平均延遲算,BW=10B/8.33=1.2Bps
上面那個(gè)例子中,R這個(gè)信道實(shí)際上也是沒有占滿的,當(dāng)Outstanding為4的時(shí)候呢?可以看看下圖這個(gè)例子:
絕對(duì)延遲分別是20/24/28/32s
平均延遲是55s/8=6.875s,極限是lim?→∞(15+??5)/?=5?
BW=80B/55s=1.45Bps,極限是lim?→∞(10??)/(15+??5)=2???
可以看到理論極限就是5s,這個(gè)時(shí)間對(duì)應(yīng)于真正需要傳輸數(shù)據(jù)或者是維持住某個(gè)數(shù)據(jù)不變的時(shí)間。極限的帶寬實(shí)際上就是10/5=2Bps
我們?cè)賮硭伎家粋€(gè)問題:Outstanding數(shù)量越多越好嗎?
答案當(dāng)然是否定的,更多的Outstanding意味著更多的硬件資源開銷,比如就需要很多的Buffer去存儲(chǔ)已經(jīng)發(fā)送的CMD。但通過上面的例子我們可以看出,當(dāng)Outstanding再增加,其性能也已經(jīng)飽和了,不會(huì)再增加。因此選擇一個(gè)合適的Outstanding數(shù)量,基于此進(jìn)行設(shè)計(jì)很重要。
既然Outstanding不是越大越好,那我們?cè)趺慈ス烙?jì)Outstanding數(shù)量呢?
我們考慮一個(gè)非常簡(jiǎn)單的例子:
假設(shè)始終頻率是500MHz,相應(yīng)的周期是2ns
假設(shè)AXI cmd是基于burst-8傳輸?shù)摹<磳?duì)于一個(gè)cmd,至少需要8個(gè)cycle傳輸相應(yīng)的數(shù)據(jù)。
第一筆數(shù)據(jù)返回的時(shí)候,需要200ns
由此可以估算Outstanding的數(shù)量為200/(2ns*8),可以設(shè)置為8或者16(一般是用2的冪次方)。實(shí)際中會(huì)比這個(gè)例子復(fù)雜的多,該例子只是幫助大家梳理一下基本思路。
我們?cè)倏匆幌翺utstang的優(yōu)缺點(diǎn):
優(yōu)點(diǎn):提高帶寬,減少平均延遲
缺點(diǎn):可能會(huì)增加絕對(duì)延遲,一定會(huì)增加面積(需要Buffer存CMD,如果沒有亂序,這個(gè)時(shí)候額外的面積其實(shí)還不太多,如果要支持亂序,那額外的面積開銷就大了,因?yàn)檫€要存DATA)
此外,Outstanding是ooo和Interleave的基礎(chǔ),沒有Outstanding,后面二者是無從談起的。
3、Out of Order對(duì)性能的影響
講完了Outstanding,我們來看一下亂序。在上面的例子中,大家可能會(huì)覺得:咦?不是R信道已經(jīng)占滿了嗎?難道還可以提速嗎?為什么還需要亂序?
因?yàn)樵谏厦娴睦又校覀兪羌俣ǜ鱾€(gè)模塊準(zhǔn)備數(shù)據(jù)的延遲是一樣久的。但是在下面這個(gè)例子中,可以看到B需要更多的周期去準(zhǔn)備相應(yīng)的數(shù)據(jù),又浪費(fèi)了Cycle!假如B的數(shù)據(jù)是來自DDR的,此時(shí)還用這種方式且不支持亂序,那就非常Naive了,可能百分之九十多的周期都被浪費(fèi)了。
這種情況下,我們就要使出第二板斧,亂序。可以看到下圖這個(gè)例子,我們可以讓快速的Slave先傳,然后再傳慢的Buffer。
如果要做Out of Order。那么Master端就需要一個(gè)非常大的Buffer了。以上圖例子中,就需要40Byte的Buffer了。因?yàn)樽畈畹那闆r,數(shù)據(jù)ABCD是倒著回給你的,但是你還是得按照順序用,那只能用額外的Buffer存儲(chǔ)了。因此如果不是某個(gè)Slave一定會(huì)亂序,且對(duì)性能影響很大,一般做Master是不建議支持Out of Order的。
4、Interleave對(duì)性能的影響
Interleave就是交織,在AXI中的Interleave,按照我的理解就是更加細(xì)粒度的亂序。
我們考慮這樣的例子,每次CMD需要4次Transfer。我們假設(shè)Slave準(zhǔn)備數(shù)據(jù)很慢,每次只能準(zhǔn)備2次Transfer的數(shù)據(jù),如下圖所示??梢钥吹剑钟蠧ycle浪費(fèi)了(可以看到這個(gè)例子中,是Out of Order的,但是同樣有周期的浪費(fèi))。
當(dāng)允許交織以后,如下圖所示:可以看到每個(gè)周期都充分利用上了,非常的棒啊。這樣性能會(huì)更加好。但是Interleave顯然,比Out of Order更麻煩。它消耗的面積和亂序?qū)嶋H上是差不多的,但是控制邏輯復(fù)雜的多。正因?yàn)槿绱?,AXI4已經(jīng)移除了寫交織,僅保留讀交織。
實(shí)際上很多Master壓根不支持讀交織,大家設(shè)計(jì)模塊的時(shí)候,還是要根據(jù)實(shí)際需求,確定是否需要支持這些功能。畢竟一旦支持這些功能,一個(gè)簡(jiǎn)單的DMA Master的代碼都奔著上千行去了,還非常容易出錯(cuò)。(筆者當(dāng)時(shí)就做了一個(gè)可以亂序和讀交織的DMA,僅僅和驗(yàn)證配合調(diào)試都花了兩個(gè)多月)。
5、其它提高AXI性能的辦法
這里主要講兩點(diǎn):
QoS
數(shù)據(jù)/傳輸?shù)闹囟x,優(yōu)化
5.1、QoS
QoS實(shí)際上是計(jì)算機(jī)網(wǎng)絡(luò)的概念,QoS(Quality of Service)即服務(wù)質(zhì)量。在有限的帶寬資源下,QoS為各種業(yè)務(wù)分配帶寬,為業(yè)務(wù)提供端到端的服務(wù)質(zhì)量保證。例如,語音、視頻和重要的數(shù)據(jù)應(yīng)用在網(wǎng)絡(luò)設(shè)備中可以通過配置QoS優(yōu)先得到服務(wù)。
ARM基于此概念,在AXI4新增QoS相關(guān)的信號(hào),為AxQOS,共4bit,其定義了每次傳輸?shù)膬?yōu)先級(jí)。我們一般認(rèn)為0xF代表最高的優(yōu)先級(jí),0x0代表最低的優(yōu)先級(jí)。QoS一般有如下的作用:
QoS可以用來解決訪問沖突問題,當(dāng)同時(shí)訪問先仲裁得到優(yōu)先級(jí)高的;
Slave可以根據(jù)QoS來reorder或者優(yōu)先考慮先回應(yīng)哪筆傳輸;
下圖是一個(gè)典型的復(fù)雜系統(tǒng),這種系統(tǒng)就需要QoS來確定,到底哪個(gè)Master可以優(yōu)先獲得總線訪問機(jī)制,因此就需要設(shè)計(jì)復(fù)雜的QoS控制系統(tǒng),此系統(tǒng)一般是可以通過軟件實(shí)時(shí)的去改配。
我們?cè)偎伎家幌拢琎oS主要是優(yōu)化延遲還是帶寬呢?
AXI的QoS主要是為了解決延遲問題。通過此值,可以更好的仲裁,以避免延遲大的阻塞住整個(gè)總線,而嚴(yán)重影響其它模塊的訪問延遲。當(dāng)然它一定程度上也會(huì)影響到帶寬。
AXI的QoS實(shí)際上我沒參與設(shè)計(jì)過,這里就不展開講具體設(shè)計(jì)了,以避免誤導(dǎo)大家。
5.2、Data/Transfer
上面我們講的這些AXI的優(yōu)化策略,其實(shí)ARM的初衷,主要是為了DDR設(shè)計(jì)的。因?yàn)榇蟛糠諷lave和Master之間都是緊耦合的,根本就不需要Out of Order和Interleave。那么如何針對(duì)DDR的讀寫去優(yōu)化呢?簡(jiǎn)單來講就是你的CMD和DATA要更加符合DDR的胃口。
地址對(duì)齊;
增加Burst Length;Burst Combine;
避免Partial Write。即WSTRB有1有0。因?yàn)楹芏郉DR是不支持此功能的,你要讀回去再寫,非常耗時(shí);
Read/Write Group。即不要寫一個(gè)讀一個(gè),最好是寫一組讀一組;
避免Locked/Exclusive access;(Locked就不說了,Exclusive是一讀一寫,對(duì)DDR非常不友好)
6、AHB vs AXI
最后我們總結(jié)一下AXI和AHB的區(qū)別,再回顧一下AXI的優(yōu)勢(shì)所在。
如下圖所示,是AHB和AXI的讀例子:
盡管AHB也可以突發(fā)傳輸,但是它每一次都是需要更新相應(yīng)的地址,而AXI只需要給一次地址即可。后續(xù)的數(shù)據(jù)可以讓Slave自己根據(jù)首地址不停地去算。
此外AXI支持亂序,如果針對(duì)地址A1的transaction沒能及時(shí)響應(yīng),沒關(guān)系,可以先回地址A2和A3的數(shù)據(jù)。減少了可能存在的周期浪費(fèi)。
此外AXI讀還支持Interleave,即更加細(xì)粒度的亂序??梢钥吹结槍?duì)地址A3的回?cái)?shù)據(jù),可能回了一筆突然回不了了,沒關(guān)系,可以馬上回地址A1的數(shù)據(jù),再回地址A3的數(shù)據(jù)。
審核編輯:劉清
-
控制系統(tǒng)
+關(guān)注
關(guān)注
41文章
6511瀏覽量
110384 -
DDR
+關(guān)注
關(guān)注
11文章
705瀏覽量
65170 -
QoS
+關(guān)注
關(guān)注
1文章
136瀏覽量
44731 -
AMBA總線
+關(guān)注
關(guān)注
0文章
35瀏覽量
9524 -
AHB
+關(guān)注
關(guān)注
0文章
18瀏覽量
9755
原文標(biāo)題:深入理解AMBA總線之AXI是如何提高性能的
文章出處:【微信號(hào):Rocker-IC,微信公眾號(hào):路科驗(yàn)證】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論