DPDK學習筆記<4>原始碼分析(1)

來源:互聯網
上載者:User

原始碼分析(1)helloworld

原始碼:

/*- *   BSD LICENSE * *   Copyright(c) 2010-2014 Intel Corporation. All rights reserved. *   All rights reserved. * *   Redistribution and use in source and binary forms, with or without *   modification, are permitted provided that the following conditions *   are met: * *     * Redistributions of source code must retain the above copyright *       notice, this list of conditions and the following disclaimer. *     * Redistributions in binary form must reproduce the above copyright *       notice, this list of conditions and the following disclaimer in *       the documentation and/or other materials provided with the *       distribution. *     * Neither the name of Intel Corporation nor the names of its *       contributors may be used to endorse or promote products derived *       from this software without specific prior written permission. * *   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS *   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT *   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR *   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT *   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, *   SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT *   LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, *   DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY *   THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT *   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE *   OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */#include #include #include #include #include #include #include #include #include #include #include #include static intlcore_hello(__attribute__((unused)) void *arg){unsigned lcore_id;lcore_id = rte_lcore_id();printf("hello from core %u\n", lcore_id);return 0;}intmain(int argc, char **argv){int ret;unsigned lcore_id;ret = rte_eal_init(argc, argv);if (ret < 0)rte_panic("Cannot init EAL\n");/* call lcore_hello() on every slave lcore */RTE_LCORE_FOREACH_SLAVE(lcore_id) {rte_eal_remote_launch(lcore_hello, NULL, lcore_id);}/* call it on master lcore too */lcore_hello(NULL);rte_eal_mp_wait_lcore();return 0;}


分析:

helloworld為dpdk的入門範例程式,程式的編寫和系統編程一樣都是從main函數作為入口函數。

rte_eal_init()啟動基礎運行環境,該函數完成的工作比較複雜,讀取入口參數,解析並儲存DPDK啟動並執行系統資訊,並根據這些資訊構建包處理的運行環境。

配置初始化

記憶體初始化

記憶體池初始化

隊列初始化

警告初始化

中斷初始化

PCI初始化

定時器初始化

…………

使用DPDK這些操作已經被EAL封裝,如果需要進行深度定製二次開發,則需要進一步的研究。

RTE_LCORE_FOREACH_SLAVE(lcore_id) {rte_eal_remote_launch(lcore_hello, NULL, lcore_id);}
DPDK面向多核設計,程式試圖獨佔運行在邏輯核(lcore)上,RTE_LCORE_FOREACH_SLAVE遍曆EAL指定的可用邏輯核,然後在每個邏輯核上執行被指定的線程,本文中為
lcore_hello。(大家可以執行設計lcore_hello)。


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.