• [dpdk] dpdk多线程任务调度


    DPDK下的线程,叫做EAL线程。

    EAL线程默认是与CPU core一对一绑定的,这样的话,有一些实时性,计算量不高的任务独占CORE是一种浪费,大概找了如下几种解决方案。

    1. dpdk serivce core

    可以实现workload与core之间 N到M的映射关系。

    就是提供一组core实现serivce任务,service顾名思义是一种短时任务,多短时任务的应用场景,适用。

    [dpdk] service core

    2.  LThread, 

    可以实现workload与core之间 N到M的映射关系。

    dpdk的example里提供了一种lightweight的thread解决方案,称为lthread。

    特点是使用协同线程调度,关于抢占式任务调度与协同式任务调动,参见:

    https://blog.csdn.net/jjavaboy/article/details/43340629

    lthread的文档:

    https://dpdk.org/doc/guides/sample_app_ug/performance_thread.html#the-l-thread-subsystem

      1. 这个库并不在dpdk的主代码中,可以稳定性上会有一下问题。

      2. 由于是协同式任务调度,各个thread的逻辑实现上都要有一些注意的地方。

    3. 协程

    没细研究,可参考:

    http://www.yeolar.com/note/2013/02/17/coroutines/

    https://coolshell.cn/articles/10975.html

    库的官方站点:http://dunkels.com/adam/pt/

    4. pthread

    常规的OS thread。

    特点是好多RTE的依赖都不能使用。

    CPU affinity:我之前以为CPU的绑定不能指定组。其实是可以的。

    CPU affinity 是一种调度属性(scheduler property), 它可以将一个进程"绑定" 到一个或一组CPU上.

    https://www.cnblogs.com/LubinLew/p/cpu_affinity.html

    那么,4和以上1,2的最大区别就是不能使用EAL的环境依赖。

    ┬─[tong@T7:~]─[05:35:36 PM]
    ╰─>$ man sched_setaffinity
  • 相关阅读:
    Ajax beforeSend和complete 方法与防止重复提交
    tablesorter周边文档
    对委托的一些短浅理解
    Nginx核心要领五:worker_processes、worker_connections设置
    二进制安装k8s 教程
    安装 Docker Engine-Community
    centos7.x 安装 NodeJS、yarn、pm2
    cfssl
    k8s各个进程 占用内存大小
    Linux下查看某一进程所占用内存的方法
  • 原文地址:https://www.cnblogs.com/hugetong/p/8974107.html
Copyright © 2020-2023  润新知