DPDK網絡庫簡介

DPDK 內存子系統兩個操作模式:dynamic/legacy;
內存根據應用使用情況自動擴展或減小,rte_malloc(), rte_memzone_reserve()函數導致更多的hugepages被保留。
rte_memzone_reserve(RTE_MEMZONE_IOVA_CONTIG)是西安IOVA連續空間的分配。內存分配器檢查是否有足夠的內存
可被使用。-m和--socket-mem命令行選項實現在初始化時預分配內存。--single-file-segments會導致所有pages放入一個文件中。
內存分配回調函數註冊:rte_mem_event_callback_register();超過設置的閾值報警:rte_mem_alloc_validator_callback_register()
--socket-limit選項啓動了默認的檢驗器回調函數。

--legacy-mem:啓動內存的legacy模式,在此模式下,-m和--socket-mem選項的功能也可用。

hugepage分配匹配:
    --match-allocations選項開啓此功能,不支持同--legacy-mem和--no-huge選項一起用。
    
最大內存量限制配置:
    CONFIG_RTE_MAX_MEMSEG_LISTS:段列表的最大數
    CONFIG_RTE_MAX_MEM_MB_PER_LIST:段列表可尋址的最大內存
    CONFIG_RTE_MAX_MEMSEG_PER_LIST:每個segment中最大segments數目
    CONFIG_RTE_MAX_MEMSEG_PER_TYPE:每種內存類型可以有的最大segment數目
    CONFIG_RTE_MAX_MEM_MB_PER_TYPE:每種內存類型可以有的最大segment空間
    CONFIG_RTE_MAX_MEM_MB:全局最大可預留內存量
    
segment文件描述符
    在EAL中存儲segment文件描述符,當內存頁尺寸更小可能產生問題。解決這個問題的方法:--single-file-segments選項。
    
支持外部分配的內存
    使用heap API's
        rte_alloc(), rte_ring_create(),需要檢驗內存分配是否成功。
        一般流程;
            (1)獲取一個指向內存區的指針;(2)創建命名的heap(3)將內存區添加到heap中;(4)獲取使用heap的套接字id;
            (5)使用普通的DPDK內存管理方法,入參包含套接字id, (6)內存區太小,從heap中移除該內存區;
            (7)heap不再需要,移除heap;
            
    術語:lcore: CPU的logical執行單元。
    共享變量和線程本地變量:
        
日誌:
    DPDK提供日誌API。在Linux上,日誌默認傳遞個syslog或者console。
    rte_panic()函數觸發SIG_ABORT信號,由信號處理函數生成一個dump文件。

CPU功能識別
    在運行時查詢CPU判斷哪些功能可用可使用函數rte_cpu_get_features();
    
用戶空間中斷事件
    host線程拉取UIO文件描述符探測中斷。
        RX中斷事件
        設備移除事件
        
黑名單
    PCI設備黑名單功能標記特定的NIC端口。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章