亚洲狠狠干,亚洲国产福利精品一区二区,国产八区,激情文学亚洲色图

一種網(wǎng)絡(luò)設(shè)備寫表方法及裝置的制造方法

文檔序號:8412457閱讀:481來源:國知局
一種網(wǎng)絡(luò)設(shè)備寫表方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及通信領(lǐng)域,特別是涉及一種網(wǎng)絡(luò)設(shè)備寫表方法及裝置。
【背景技術(shù)】
[0002]現(xiàn)今網(wǎng)絡(luò)發(fā)展速度驚人,網(wǎng)絡(luò)流量的增長及新業(yè)務(wù)的出現(xiàn),需要網(wǎng)絡(luò)設(shè)備具有線速和靈活的處理能力。目前網(wǎng)絡(luò)芯片包括集成電路(Applicat1n Specific IntegratedCircuit,簡稱為ASIC)和NP (網(wǎng)絡(luò)處理器)兩大類。
[0003]網(wǎng)絡(luò)芯片外圍接口非常豐富,如靜態(tài)隨機存儲器(Static RAM,簡稱為SRAM)、三態(tài)內(nèi)容尋址存儲器(ternary content addressable memory,簡稱為TCAM)、同步動態(tài)隨機存儲器(Synchronous Dynamic Random Access Memory,簡稱為 SDRAM)等,這些存儲器存放著各種業(yè)務(wù)表項,如端口表、介質(zhì)訪問控制(medium access control,簡稱為MAC)表、路由表等;另外,芯片內(nèi)部包括大量的寄存器。
[0004]網(wǎng)絡(luò)設(shè)備運行過程中,控制層軟件會頻繁的與芯片進行交互,比如下發(fā)業(yè)務(wù)配置等。對芯片而言,主要就是讀寫芯片存儲器和內(nèi)部寄存器。目前很多網(wǎng)絡(luò)設(shè)備表項、寄存器配置是通過CPU (中央處理器)與芯片進行消息交互實現(xiàn)的。
[0005]目前Linux操作系統(tǒng)廣泛應(yīng)用于網(wǎng)絡(luò)設(shè)備驅(qū)動中,Linux系統(tǒng)分為用戶態(tài)和內(nèi)核態(tài)兩個層面。芯片驅(qū)動層次如圖1所示的Linux系統(tǒng)設(shè)備驅(qū)動軟件層次示意圖,目前網(wǎng)絡(luò)設(shè)備驅(qū)動發(fā)送消息的通常做法是用戶態(tài)申請內(nèi)存并將消息填充到用戶態(tài)內(nèi)存中,由于實際與芯片交互的是內(nèi)核層,因此必須將消息從用戶態(tài)的內(nèi)存拷貝到內(nèi)核態(tài)的內(nèi)存中,然后從內(nèi)核態(tài)的內(nèi)存通過總線寫入硬件芯片中。
[0006]由于網(wǎng)絡(luò)交換設(shè)備中消息交互非常頻繁,極限情況每秒鐘可能有上萬條消息發(fā)送,因此這涉及了大量的內(nèi)存申請,以及用戶態(tài)、內(nèi)核態(tài)的拷貝操作。這對網(wǎng)絡(luò)設(shè)備的CPU是一個很大的負擔(dān),影響了網(wǎng)絡(luò)設(shè)備的寫表效率。
[0007]針對相關(guān)技術(shù)中網(wǎng)絡(luò)設(shè)備寫表方法對CPU的負擔(dān)較大的問題,目前尚未提出有效的解決方案。

【發(fā)明內(nèi)容】

[0008]針對相關(guān)技術(shù)中網(wǎng)絡(luò)設(shè)備寫表方法對CPU的負擔(dān)較大的問題,本發(fā)明提供了一種網(wǎng)絡(luò)設(shè)備寫表方法及裝置,用以解決上述技術(shù)問題。
[0009]根據(jù)本發(fā)明的一個方面,本發(fā)明提供了一種網(wǎng)絡(luò)設(shè)備寫表方法,其中,該方法包括:內(nèi)核空間預(yù)先申請內(nèi)存,將內(nèi)核空間內(nèi)存映射到用戶空間,得到用戶空間內(nèi)存地址;上述用戶空間向上述內(nèi)核空間申請上述內(nèi)核空間內(nèi)存,得到對應(yīng)的用戶空間內(nèi)存地址;將上述用戶空間內(nèi)存地址和消息大小記錄在緩沖區(qū)buffer描述符中傳遞給上述內(nèi)核空間;上述內(nèi)核空間將上述用戶空間內(nèi)存地址轉(zhuǎn)換為內(nèi)核空間內(nèi)存地址,通過直接內(nèi)存存取(Direct Memory Access,簡稱為DMA)控制器將消息寫入芯片。
[0010]優(yōu)選地,內(nèi)核空間將內(nèi)核空間內(nèi)存映射到用戶空間,得到用戶空間內(nèi)存地址之后,上述方法還包括:內(nèi)核空間根據(jù)上述用戶空間內(nèi)存地址,計算上述用戶空間內(nèi)存地址相對于內(nèi)核空間內(nèi)存地址的偏移量;其中,上述偏移量=內(nèi)核空間內(nèi)存地址一用戶空間內(nèi)存地址。
[0011]優(yōu)選地,用戶空間向內(nèi)核空間申請上述內(nèi)核空間內(nèi)存,得到上述用戶空間內(nèi)存地址,包括:用戶空間向內(nèi)核空間申請內(nèi)核空間內(nèi)存,得到其內(nèi)核空間內(nèi)存地址;用戶空間根據(jù)上述偏移量和上述內(nèi)核空間內(nèi)存地址,計算得到用戶空間內(nèi)存地址。
[0012]優(yōu)選地,內(nèi)核空間通過上述DMA控制器將消息寫入芯片,包括:內(nèi)核空間將上述內(nèi)核空間內(nèi)存地址和上述消息大小,傳遞給上述DMA控制器,內(nèi)核空間的驅(qū)動通過上述DMA控制器將消息寫入芯片。
[0013]優(yōu)選地,用戶空間將待釋放的用戶空間內(nèi)存地址,記錄到上述buffer描述符中傳遞給內(nèi)核空間;內(nèi)核空間根據(jù)上述偏移量和上述用戶空間內(nèi)存地址,計算得到內(nèi)核空間內(nèi)存地址;內(nèi)核空間將上述內(nèi)核空間內(nèi)存地址傳遞給內(nèi)核空間的驅(qū)動;內(nèi)核空間的驅(qū)動釋放上述buffer描述符。
[0014]優(yōu)選地,內(nèi)核空間將上述內(nèi)核空間內(nèi)存映射到用戶空間,包括:內(nèi)核空間將上述內(nèi)核空間內(nèi)存,通過_ap映射到用戶空間。
[0015]根據(jù)本發(fā)明的另一方面,本發(fā)明還提供了一種網(wǎng)絡(luò)設(shè)備寫表裝置,應(yīng)用于內(nèi)核空間,其中,該裝置包括:內(nèi)存申請模塊,用于預(yù)先申請內(nèi)存,將內(nèi)核空間內(nèi)存映射到用戶空間,得到用戶空間內(nèi)存地址;消息寫入模塊,用于在接收到用戶空間傳遞的用戶空間內(nèi)存地址后,將上述用戶空間內(nèi)存地址轉(zhuǎn)換為內(nèi)核空間內(nèi)存地址,通過直接內(nèi)存存取DMA控制器將消息寫入芯片。
[0016]優(yōu)選地,上述裝置還包括:釋放模塊,用于根據(jù)用戶空間通過緩沖區(qū)buffer描述符傳遞的用戶空間內(nèi)存地址,得到內(nèi)核空間內(nèi)存地址;將該內(nèi)核空間內(nèi)存地址傳遞給內(nèi)核空間的驅(qū)動,以使上述驅(qū)動釋放上述buffer描述符。
[0017]根據(jù)本發(fā)明的另一方面,本發(fā)明還提供了一種網(wǎng)絡(luò)設(shè)備寫表裝置,應(yīng)用于用戶空間,其中,該裝置包括:申請內(nèi)存模塊,用于向內(nèi)核空間申請內(nèi)核空間內(nèi)存,得到對應(yīng)的用戶空間內(nèi)存地址;描述符傳遞模塊,用于將上述用戶空間內(nèi)存地址和消息大小記錄在緩沖區(qū)buffer描述符中傳遞給內(nèi)核空間。
[0018]優(yōu)選地,上述申請內(nèi)存模塊包括:第一處理單元,用于向內(nèi)核空間申請內(nèi)核空間內(nèi)存,得到其內(nèi)核空間內(nèi)存地址;第二處理單元,用于根據(jù)偏移量和上述內(nèi)核空間內(nèi)存地址,計算得到用戶空間內(nèi)存地址;其中,上述偏移量是上述用戶空間內(nèi)存地址相對于內(nèi)核空間內(nèi)存地址的偏移量,上述偏移量=內(nèi)核空間內(nèi)存地址一用戶空間內(nèi)存地址。
[0019]通過本發(fā)明,預(yù)先申請內(nèi)核態(tài)內(nèi)存,并利用零拷貝技術(shù),將內(nèi)核態(tài)的內(nèi)存映射到用戶態(tài),用戶態(tài)發(fā)送消息時,直接通過buffer描述符獲得用戶態(tài)內(nèi)存地址,這樣可以避免用戶態(tài)申請內(nèi)存,而且用戶態(tài)、內(nèi)核態(tài)之間只需要傳遞一個很小的buffer描述符,省去了大量的內(nèi)存拷貝操作。解決了相關(guān)技術(shù)中網(wǎng)絡(luò)設(shè)備寫表方法對CPU的負擔(dān)較大的問題,內(nèi)核驅(qū)動和芯片之間的消息傳遞采用DMA機制,減少了 CPU的負擔(dān)。在網(wǎng)絡(luò)設(shè)備驅(qū)動層面大量發(fā)送與表消息的應(yīng)用中,可以極大提聞與表性能,有效改進Linux下設(shè)備驅(qū)動的與表效率。
[0020]上述說明僅是本發(fā)明技術(shù)方案的概述,為了能夠更清楚了解本發(fā)明的技術(shù)手段,而可依照說明書的內(nèi)容予以實施,并且為了讓本發(fā)明的上述和其它目的、特征和優(yōu)點能夠更明顯易懂,以下特舉本發(fā)明的【具體實施方式】。
【附圖說明】
[0021]圖1是根據(jù)相關(guān)技術(shù)的Linux系統(tǒng)設(shè)備驅(qū)動軟件層次示意圖;
[0022]圖2是根據(jù)本發(fā)明實施例的網(wǎng)絡(luò)設(shè)備寫表方法的流程圖;
[0023]圖3是根據(jù)本發(fā)明實施例的軟件層次示意圖;
[0024]圖4是根據(jù)本發(fā)明實施例的open系統(tǒng)調(diào)用流程圖;
[0025]圖5是根據(jù)本發(fā)明實施例的用戶空間和內(nèi)核空間內(nèi)存單元內(nèi)存映射示意圖;
[0026]圖6是根據(jù)本發(fā)明實施例的消息發(fā)送流程圖;
[0027]圖7是根據(jù)本發(fā)明實施例的應(yīng)用于內(nèi)核空間的網(wǎng)絡(luò)設(shè)備寫表裝置的結(jié)構(gòu)框圖;
[0028]圖8是根據(jù)本發(fā)明實施例的應(yīng)用于用戶空間的網(wǎng)絡(luò)設(shè)備寫表裝置的結(jié)構(gòu)框圖。
【具體實施方式】
[0029]為了解決現(xiàn)有技術(shù)中網(wǎng)絡(luò)設(shè)備寫表方法對CPU的負擔(dān)較大的問題,本發(fā)明提供了一種網(wǎng)絡(luò)設(shè)備寫表方法及裝置,以下結(jié)合附圖以及實施例,對本發(fā)明進行進一步詳細說明。應(yīng)當(dāng)理解,此處所描述的具體實施例僅僅用以解釋本發(fā)明,并不限定本發(fā)明。
[0030]本實施例提供了一種網(wǎng)絡(luò)設(shè)備寫表方法,圖2是根據(jù)本發(fā)明實施例的網(wǎng)絡(luò)設(shè)備寫表方法的流程圖,如圖2所示,該方法包括以下步驟(步驟S202-步驟S206):
[0031 ] 步驟S202,內(nèi)核空間預(yù)先申請內(nèi)存,將內(nèi)核空間內(nèi)存映射到用戶空間,得到用戶空間內(nèi)存地址。優(yōu)選地,內(nèi)核空間將內(nèi)核空間內(nèi)存,通過_ap映射到用戶空間。在此之后,內(nèi)核空間根據(jù)用戶空間內(nèi)存地址,計算用戶空間內(nèi)存地址相對于內(nèi)核空間內(nèi)存地址的偏移量;其中,偏移量=內(nèi)核空間內(nèi)存地址一用戶空間內(nèi)存地址。
[0032]步驟S204,用戶空間向內(nèi)核空間申請內(nèi)核空間內(nèi)存,得到對應(yīng)的用戶空間內(nèi)存地址;將用戶空間內(nèi)存地址和消息大小記錄在緩沖區(qū)buffer描述符中傳遞給內(nèi)核空間。
[0033]在該步驟中,用戶空間向內(nèi)核空間申請內(nèi)核空間內(nèi)存,得到用戶空間內(nèi)存地址,可以通過以下優(yōu)選實施方式實現(xiàn):用戶空間向內(nèi)核空間申請內(nèi)核空間內(nèi)存,得到其內(nèi)核空間內(nèi)存地址;用戶空間根據(jù)偏移量和內(nèi)核空間內(nèi)存地址,計算得到用戶空間內(nèi)存地址。
[0034]步驟S206,內(nèi)核空間將用戶空間內(nèi)存地址轉(zhuǎn)換為內(nèi)核空間內(nèi)存地址,通過直接內(nèi)存存取DMA控制器將消息寫入芯片。具體地,內(nèi)核空間將內(nèi)核空間內(nèi)存地址和消息大小,傳遞給DMA控制器,內(nèi)核空間的驅(qū)動通過DMA控制器將消息寫入芯片。
[0035]本實施例還提供了一種優(yōu)選實施方式,來介紹內(nèi)存釋放過程,即用戶空間將待釋放的用戶空間內(nèi)存地址,記錄到buffer描述符中傳遞給內(nèi)核空間;內(nèi)核空間根據(jù)偏移量和用戶空間內(nèi)存地址,計算得到內(nèi)核空間內(nèi)存地址;內(nèi)核空間將內(nèi)核空間內(nèi)存地址傳遞給內(nèi)核空間的驅(qū)動;內(nèi)核空間的驅(qū)動釋放buffer描述符。
[0036]圖3是根據(jù)本發(fā)明實施例的軟件層次示意圖,內(nèi)核空間預(yù)先申請內(nèi)核態(tài)內(nèi)存,并利用零拷貝技術(shù),將內(nèi)核態(tài)的內(nèi)存映射到用戶態(tài),用戶態(tài)發(fā)送消息時,直接通過buffer描述符獲得用戶態(tài)內(nèi)存地址,這樣可以避免用戶態(tài)申請內(nèi)存,而且用戶態(tài)、內(nèi)核態(tài)之間只需要傳遞一個很小的buffer描述符,省去了大量的內(nèi)存拷貝操作。解決了相關(guān)技術(shù)中網(wǎng)絡(luò)設(shè)備寫表方法對CPU的負擔(dān)較大的問題,內(nèi)核驅(qū)動和芯片之間的消息傳遞采用DMA機制,減少了CPU的負擔(dān)。在網(wǎng)絡(luò)設(shè)備驅(qū)動層面大量發(fā)送寫表消息的應(yīng)用中,可以極大提高寫表性能,有效改進Linux下設(shè)備驅(qū)動的寫表效率。
[0037]下面對芯片驅(qū)動程序的具體操作進行介紹。
[0038]芯片驅(qū)動程序為字符設(shè)備驅(qū)動,即驅(qū)動程序?qū)⑿酒鳛槲募M行操作,用戶態(tài)驅(qū)動程序和內(nèi)核態(tài)驅(qū)動程序通過文件流進行交互。芯片驅(qū)動首先要為芯片初始化file_operat1n結(jié)構(gòu),該結(jié)構(gòu)包括該字符設(shè)備的打開(open)、關(guān)閉(close)、寫(write)、控制(1ctl)、映射(mmap)方法。具體地講,
[0039]1、映射(mmap)方法:
[0040]提供將內(nèi)核空間內(nèi)存映射到用戶空間內(nèi)存的接口 ;
[0041]2、打開(open)方法:
[0042]申請內(nèi)核態(tài)內(nèi)存,并通過mmap映射將內(nèi)存塊映射到用戶空間,并且分割內(nèi)存塊為N個內(nèi)存單元buf。該操作過程如圖4所示的open系統(tǒng)調(diào)用流程圖,如圖4所示,該流程包括以下步驟(步驟S402-步驟S410)。
[0043]步驟S402,申請內(nèi)核內(nèi)存塊,內(nèi)核態(tài)內(nèi)存起始地址為K。
[0044]步驟S404,調(diào)用mmap接口將內(nèi)核空間內(nèi)存映射到用戶空間,得到的用戶態(tài)內(nèi)存起始地址為U。
[00
當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1