深入浅出DPDK
    DPDK基础篇
        一 认识DPDK
            最佳实践
                (1)轮询:改进对大吞吐数据的处理
                (2)用户态驱动:既规避了不必要的内存拷贝,又避免了系统调用
                (3)亲和性和独占:避免线程在不同核之间切换带来的性能损失
                (4)降低访存开销:内存大页降低TLB miss等
                (5)软件调优:纸袋一系列调优实践,比如结构的cache line对齐
                (6)利用IA新硬件技术
                (7)充分挖掘网卡潜能
        二 Cache和内存
            TLB Cache:软件使用虚拟地址访问内存,二处理器负责根据多级页表查找,进行虚拟地址到物理地址的映射工作。当处理器发现页表中找不到真正对应的物理地址时,就会发出异常,挂起寻址错误的进程,但不影响其他进程工作。
            Cache预取的理解:对二维数组a[1024][1024]进行赋值,依次赋值a[i][0]...a[i][1023]与依次赋值a[0][i]...a[1023][i]执行效率迥异。差别在于前者按照数组在内存中保存方式顺序访问,后者则是跳跃式访问。
            Cache一致性开销问题根本原因在于处理器内部不止一个核,当两个或多个核访问同一个Cache行的内容时,就会因为多个Cache同时缓存了该内容引起同步的问题。
        三 并行计算
            多核架构与核亲和性:一个特定任务在一个核上尽量长时间运行而不被迁移到其他处理器上的倾向性,能够减小线程频繁迁移带来的额外负载
        四 同步互斥机制
            自旋锁与互斥锁:相同点为任何时刻最多只能有一个执行单元获得锁;不同点在于互斥锁中,执行单元进入睡眠状态等待持有锁(死等),而自旋锁中,执行单元会一直循环探测有没有释放了锁
            加入锁的机制主要是用来防止多处理器中并发访问临界区,防止内核抢占造成的竞争
        五 报文转发
        六 PCIe与包处理I/O
            数据包的内存操作对象被抽象化为Mbuf结构,而有限的rte_mbuf结构对象则存储在内存池(Mempool)中
            内存池(Mempool)使用环形缓冲区(cache)来保存空闲对象
        七 网卡性能优化
            轮询:收发包完全不使用任何中断,集中所有运算资源用于报文处理
            burst收发包:大部分示例中默认的收发包数是32个/次
        八 流分类和多队列
        九 硬件加速与功能卸载
    DPDK虚拟化技术篇
    DPDK应用篇