一種總線通信方法及系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001 ]本發(fā)明涉及數(shù)據(jù)通信技術(shù)領(lǐng)域,尤其涉及一種總線通信方法及系統(tǒng)。
【背景技術(shù)】
[0002]在高帶寬數(shù)據(jù)通信中,例如在使用千兆以太網(wǎng),PCIe通信協(xié)議的工況下,為了保證數(shù)據(jù)可被正確快速地接收,大多采用DMA(Direct Memory Access,直接內(nèi)存存取)數(shù)據(jù)傳輸方式傳輸數(shù)據(jù)。
[0003]DMA是一種不經(jīng)過(guò)CPU而直接從內(nèi)存存取數(shù)據(jù)的數(shù)據(jù)交換模式,在DMA方式下,CPU只須向DMA控制器下達(dá)指令,讓DMA控制器來(lái)處理數(shù)據(jù)的傳送,底層硬件板卡在接收到數(shù)據(jù)后,將數(shù)據(jù)直接通過(guò)DMA數(shù)據(jù)傳輸方式存儲(chǔ)到主機(jī)分配的DMA緩存中,數(shù)據(jù)傳送完畢再通過(guò)DMA中斷把信息反饋給CPU,CPU通過(guò)DMA中斷感知到數(shù)據(jù)已經(jīng)存放到DMA緩存后,便將此數(shù)據(jù)保存到本地磁盤(pán),之后下一輪的DMA數(shù)據(jù)傳輸才能開(kāi)始,這樣可以避免CPU頻繁訪問(wèn)底層硬件,在進(jìn)行數(shù)據(jù)傳輸尤其是大數(shù)據(jù)量傳輸時(shí)可以很大程度上減輕(PU的資源占用率。
[0004]但是,由于每一輪的DMA數(shù)據(jù)傳輸完成后均需要CPU將數(shù)據(jù)保存到本地磁盤(pán),當(dāng)每輪DMA數(shù)據(jù)傳輸之間的間隔時(shí)間較短時(shí),便需要CPU頻繁地將數(shù)據(jù)從DMA緩存轉(zhuǎn)移到本地磁盤(pán),從而導(dǎo)致CPU負(fù)載和磁盤(pán)負(fù)載過(guò)高,無(wú)法及時(shí)處理其他線程任務(wù),降低設(shè)備性能。
【發(fā)明內(nèi)容】
[0005]本發(fā)明提供一種總線通信方法及系統(tǒng),以降低CPU負(fù)載和磁盤(pán)負(fù)載,便于及時(shí)處理其他線程任務(wù),提高設(shè)備性能。
[0006]為解決上述技術(shù)問(wèn)題,本發(fā)明實(shí)施例提供以下技術(shù)方案:
[0007]一種總線通信方法,包括:
[0008]通過(guò)一級(jí)緩存接收總線數(shù)據(jù);
[0009]在直接內(nèi)存存取DMA數(shù)據(jù)傳輸啟動(dòng)時(shí),將所述一級(jí)緩存接收的所述總線數(shù)據(jù)保存到二級(jí)緩存中,并將所述二級(jí)緩存中的所述總線數(shù)據(jù)保存到三級(jí)緩存中;所述三級(jí)緩存的容量大于所述二級(jí)緩存的容量;
[0010]在將所述三級(jí)緩存存滿(mǎn)時(shí),中斷所述DMA數(shù)據(jù)傳輸,向CPU發(fā)送DMA中斷請(qǐng)求,以使所述CPU在接收到所述DMA中斷請(qǐng)求后將所述三級(jí)緩存中保存的所述總線數(shù)據(jù)提取到本地磁盤(pán)中。
[0011]優(yōu)選地,所述一級(jí)緩存中包括多個(gè)設(shè)置有序號(hào)的一級(jí)緩存空間;
[0012]所述通過(guò)一級(jí)緩存接收總線數(shù)據(jù),包括:
[0013]接收所述總線數(shù)據(jù),并按照所述一級(jí)緩存空間的序號(hào)保存接收的所述總線數(shù)據(jù),在將一個(gè)所述一級(jí)緩存空間存滿(mǎn)后,再使用下一個(gè)所述一級(jí)緩存空間繼續(xù)保存,直到將所有的所述一級(jí)緩存空間存滿(mǎn)后,再重新按照所述一級(jí)緩存空間的序號(hào)保存接收的所述總線數(shù)據(jù),覆蓋每一個(gè)所述一級(jí)緩存空間中的原有數(shù)據(jù)。
[0014]優(yōu)選地,所述二級(jí)緩存中包括多個(gè)設(shè)置有序號(hào)的二級(jí)緩存空間;
[0015]所述在直接內(nèi)存存取DMA數(shù)據(jù)傳輸啟動(dòng)時(shí),將所述一級(jí)緩存接收的所述總線數(shù)據(jù)保存到二級(jí)緩存中,包括:
[0016]在所述一級(jí)緩存中的任意一個(gè)所述一級(jí)緩存空間被存滿(mǎn)時(shí),記錄被存滿(mǎn)的所述一級(jí)緩存空間的序號(hào);
[0017]在所述DMA數(shù)據(jù)傳輸啟動(dòng)時(shí),檢測(cè)所述二級(jí)緩存中是否存在可以保存數(shù)據(jù)的所述二級(jí)緩存空間;
[0018]如果存在,判斷上一次保存數(shù)據(jù)的所述二級(jí)緩存空間的序號(hào),并從可以保存數(shù)據(jù)的所述二級(jí)緩存空間中選擇與上一次保存數(shù)據(jù)的所述二級(jí)緩存空間不同的所述二級(jí)緩存空間,將被存滿(mǎn)的所述一級(jí)緩存空間中的所述總線數(shù)據(jù)保存到所選擇的所述二級(jí)緩存空間中。
[0019]優(yōu)選地,所述三級(jí)緩存中包括多個(gè)設(shè)置有序號(hào)的三級(jí)緩存空間;
[0020]所述將所述二級(jí)緩存中的所述總線數(shù)據(jù)保存到三級(jí)緩存中,包括:
[0021 ]檢測(cè)所述三級(jí)緩存中是否存在尚未被存滿(mǎn)的所述三級(jí)緩存空間;
[0022]如果存在,在將被存滿(mǎn)的所述一級(jí)緩存空間中的所述總線數(shù)據(jù)保存到所選擇的所述二級(jí)緩存空間中后,將所選擇的所述二級(jí)緩存空間中的所述總線數(shù)據(jù)保存到尚未被存滿(mǎn)的所述三級(jí)緩存空間中。
[0023]優(yōu)選地,在所述向CPU發(fā)送DMA中斷請(qǐng)求之后,還包括:
[0024]檢測(cè)所述三級(jí)緩存中的所述總線數(shù)據(jù)是否已被保存到所述本地磁盤(pán)中;
[0025]如果是,則將所述三級(jí)緩存中的所述總線數(shù)據(jù)清空,并重新啟動(dòng)所述DMA數(shù)據(jù)傳輸。
[0026I 一種總線通信系統(tǒng),包括:
[0027]接收模塊,用于通過(guò)一級(jí)緩存接收總線數(shù)據(jù);
[0028]保存模塊,用于在直接內(nèi)存存取DMA數(shù)據(jù)傳輸啟動(dòng)時(shí),將所述一級(jí)緩存接收的所述總線數(shù)據(jù)保存到二級(jí)緩存中,并將所述二級(jí)緩存中的所述總線數(shù)據(jù)保存到三級(jí)緩存中;所述三級(jí)緩存的容量大于所述二級(jí)緩存的容量;
[0029]中斷模塊,用于在將所述三級(jí)緩存存滿(mǎn)時(shí),中斷所述DMA數(shù)據(jù)傳輸,向CPU發(fā)送DMA中斷請(qǐng)求,以使所述CHJ在接收到所述DMA中斷請(qǐng)求后將所述三級(jí)緩存中保存的所述總線數(shù)據(jù)提取到本地磁盤(pán)中。
[0030]優(yōu)選地,所述一級(jí)緩存中包括多個(gè)設(shè)置有序號(hào)的一級(jí)緩存空間;
[0031 ]所述接收模塊,具體用于:
[0032]接收所述總線數(shù)據(jù),并按照所述一級(jí)緩存空間的序號(hào)保存接收的所述總線數(shù)據(jù),在將一個(gè)所述一級(jí)緩存空間存滿(mǎn)后,再使用下一個(gè)所述一級(jí)緩存空間繼續(xù)保存,直到將所有的所述一級(jí)緩存空間存滿(mǎn)后,再重新按照所述一級(jí)緩存空間的序號(hào)保存接收的所述總線數(shù)據(jù),覆蓋每一個(gè)所述一級(jí)緩存空間中的原有數(shù)據(jù)。
[0033]優(yōu)選地,所述二級(jí)緩存中包括多個(gè)設(shè)置有序號(hào)的二級(jí)緩存空間;
[0034]所述保存模塊,包括:
[0035]記錄單元,用于在所述一級(jí)緩存中的任意一個(gè)所述一級(jí)緩存空間被存滿(mǎn)時(shí),記錄被存滿(mǎn)的所述一級(jí)緩存空間的序號(hào);
[0036]第一檢測(cè)單元,用于在所述DMA數(shù)據(jù)傳輸啟動(dòng)時(shí),檢測(cè)所述二級(jí)緩存中是否存在可以保存數(shù)據(jù)的所述二級(jí)緩存空間;
[0037]選擇單元,用于如果所述二級(jí)緩存中存在可以保存數(shù)據(jù)的所述二級(jí)緩存空間,判斷上一次保存數(shù)據(jù)的所述二級(jí)緩存空間的序號(hào),并從可以保存數(shù)據(jù)的所述二級(jí)緩存空間中選擇與上一次保存數(shù)據(jù)的所述二級(jí)緩存空間不同的所述二級(jí)緩存空間,將被存滿(mǎn)的所述一級(jí)緩存空間中的所述總線數(shù)據(jù)保存到所選擇的所述二級(jí)緩存空間中。
[0038]優(yōu)選地,所述三級(jí)緩存中包括多個(gè)設(shè)置有序號(hào)的三級(jí)緩存空間;
[0039]所述保存模塊,還包括:
[0040]第二檢測(cè)單元,用于檢測(cè)所述三級(jí)緩存中是否存在尚未被存滿(mǎn)的所述三級(jí)緩存空間;
[0041]保存單元,用于如果所述三級(jí)緩存中存在尚未被存滿(mǎn)的所述三級(jí)緩存空間,在將被存滿(mǎn)的所述一級(jí)緩存空間中的所述總線數(shù)據(jù)保存到所選擇的所述二級(jí)緩存空間中后,將所選擇的所述二級(jí)緩存空間中的所述總線數(shù)據(jù)保存到尚未被存滿(mǎn)的所述三級(jí)緩存空間中。
[0042]優(yōu)選地,還包括:
[0043]檢測(cè)模塊,用于檢測(cè)所述三級(jí)緩存中的所述總線數(shù)據(jù)是否已被保存到所述本地磁盤(pán)中;
[0044]重啟模塊,用于如果所述三級(jí)緩存中的所述總線數(shù)據(jù)已被保存到所述本地磁盤(pán)中,則將所述三級(jí)緩存中的所述總線數(shù)據(jù)清空,并重新啟動(dòng)所述DMA數(shù)據(jù)傳輸。
[0045]由上可見(jiàn),本申請(qǐng)?zhí)峁┑囊环N總線通信方法及系統(tǒng),通過(guò)一級(jí)緩存接收總線數(shù)據(jù);在DMA數(shù)據(jù)傳輸啟動(dòng)時(shí),將所述一級(jí)緩存接收的所述總線數(shù)據(jù)保存到二級(jí)緩存中,并將所述二級(jí)緩存中的所述總線數(shù)據(jù)保存到三級(jí)緩存中;所述三級(jí)緩存的容量大于所述二級(jí)緩存的容量;在將所述三級(jí)緩存存滿(mǎn)時(shí),中斷所述DMA數(shù)據(jù)傳輸,向CPU發(fā)送DMA中斷請(qǐng)求,以使所述CPU在接收到所述DMA中斷請(qǐng)求后將所述三級(jí)緩存中保存的所述總線數(shù)據(jù)提取到本地磁盤(pán)中。可見(jiàn),本申請(qǐng)?zhí)峁┑姆桨福诙?jí)緩存后增加了三級(jí)緩存,且三級(jí)緩存的容量大于二級(jí)緩存的容量,在三級(jí)緩存的容量存滿(mǎn)時(shí)再向CPU發(fā)送DMA中斷請(qǐng)求,相對(duì)于將總線數(shù)據(jù)從二級(jí)緩存轉(zhuǎn)移到本地磁盤(pán)中,可以降低CPU轉(zhuǎn)移總線數(shù)據(jù)的頻率,從而降低CPU負(fù)載和磁盤(pán)負(fù)載,便于及時(shí)處理其他線程任務(wù),提高設(shè)備性能。
【附圖說(shuō)明】
[0046]為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0047]圖1為本發(fā)明提供的一種總線通信方法的一個(gè)實(shí)施例的流程示意圖;
[0048]圖2為本發(fā)明提供的一種總