一、網(wǎng)絡(luò)編程
DPDK的源碼分析的很多了,也應(yīng)該讓他發(fā)揮一些作用了。前面的分析可以知道,DPDK的優(yōu)勢在于網(wǎng)絡(luò)通信,那么它可不可以替代傳統(tǒng)的Socket網(wǎng)絡(luò)通信的底層協(xié)議棧呢?答案是肯定的。
一個框架最重要的意義就在能為上層所應(yīng)用并且達到一個新的性能上的高度,DPDK正是如此。網(wǎng)絡(luò)編程中常用的是TCP編程和UDP編程,本篇就用DPDK模擬實現(xiàn)網(wǎng)絡(luò)通信的一個簡單框架流程的分析說明。為下一步的TCP/UDP等網(wǎng)絡(luò)編程進行一個基礎(chǔ)的準備。
二、實現(xiàn)方式
利用DPDK實現(xiàn)網(wǎng)絡(luò)編程,主要需要實現(xiàn)通過DPDK的相關(guān)接口來模擬實現(xiàn)與網(wǎng)卡的網(wǎng)絡(luò)通信Socket編程。包括相關(guān)的設(shè)備初始化、通過DPDK與網(wǎng)卡進行數(shù)據(jù)交互、應(yīng)用層的模擬通信接口和上層應(yīng)用的數(shù)據(jù)收發(fā)處理。
三、源碼分析
下面看一下主體框架的代碼:
void init()
{
int ret;
ret = rte_eal_init(argc,argv);
// create devices
struct rte_eth_conf port_conf;
memset(&port_conf, 0, sizeof(struct rte_eth_conf));
//set config
......
// get port
uint16_t port;
port = rte_eth_find_next_owned_by(0, RTE_ETH_DEV_NO_OWNER);
//init port
ret = rte_eth_dev_configure(port, 1, 1, &port_conf);
//start port
rte_eth_macaddr_get(port,&server_port->mac_addr);
......
}
void createSocket()
{
......
listenFd_ = socket(AF_INET, SOCK_STREAM | SOCK_NONBLOCK | SOCK_CLOEXEC, IPPROTO_TCP);
//set pars
......
bind(listenFd_, (struct sockaddr*)&serv_addr,sizeof(serv_addr));
listen(listenFd_, 3);
}
void accept()
{
while(!bStop) {
......
int connfd = accept(listenFd_, (struct sockaddr *)&clientaddr, &len, SOCK_NONBLOCK | SOCK_CLOEXEC);
if(connfd >= 0) {
rte_eth_rx_burst(portid, 0, pkts_burst, BURST_SIZE); // recv package
pthread_create(&tid,NULL,&recv,connfd);
pthread_detach(tid);
}
}
}
void recv()
{
while(!bStop){
......
rx = rte_eth_rx_burst(portid, 0, mbuf, BURST_SIZE);
for(int i=0;i<rx;i++){
char * pdata = rte_pktmbuf_mtod(mbuf[i], char * );
int len = rte_pktmbuf_data_len(mbuf[i]);
cb(pdata,len);//callback data
rte_pktmbuf_free(mbuf[i]);
}
......
}
}
上面只是一個基本的使用DPDK的網(wǎng)絡(luò)通信框架,具體的實現(xiàn)都沒有完成,但基本上整體的流程都清晰了。細一看,和前面分析的fwd的代碼基本沒有什么大差別。但真正的差別就在實現(xiàn)的細節(jié)里,這些放到下一篇再分析。文章來源:http://www.zghlxwxcb.cn/news/detail-841078.html
四、總結(jié)
DPDK的應(yīng)用還是有些復(fù)雜,不過從費效比看還是相當不錯的。特別是在某些大型網(wǎng)絡(luò)通信應(yīng)用中,使用DPDK的優(yōu)勢還是很明顯的。至于普通的網(wǎng)絡(luò)編程還是老實的使用系統(tǒng)自帶的Socket會更簡單方便。在后面會對網(wǎng)絡(luò)通信中使用DPDK進行具體的TCP/UDP應(yīng)用分別分析說明。
要善于利用技術(shù)而不是讓技術(shù)成為一種思想上的拖累。文章來源地址http://www.zghlxwxcb.cn/news/detail-841078.html
到了這里,關(guān)于DPDK系列之四十二DPDK應(yīng)用網(wǎng)絡(luò)編程的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!