• SPDK线程模型


    (一)reactor框架: thread线程 和 poller函数

    (1.1)SPDK的主线程

    SPDK(APP)在启动时候会让指定绑定在那些core上运行,这样在每个core上会创建一个线程(他叫reactor),这个线程不停的做polling操作,而如果你要在这个线程上做事情,则需要注册poller( 可以理解为一个poller就是SPDK中一个事情的thread入口函数,但是),这个线程就不停的调用poller的机型函数执行你要执行的动作。

    1. spdk_app_start
    2. spdk_reactors_start
    3. reactor_run
    4. reactor_interrupt_run
    5. spdk_fd_group_wait
    6. event_handler->fn
    7. _reactor_run
    8. event_queue_run_batch
    9. spdk_ring_dequeue
    10. spdk_event->fn
    11. spdk_thread_poll
    12. thread_poll
    13. msg_queue_run_batch
    14. spdk_ring_dequeue
    15. spdk_msg->fn
    16. <FOREACH> spdk_thread->active_pollers
    17. thread_execute_poller
    18. spdk_poller->fn
    19. thread_execute_timed_poller
    20. spdk_poller->fn
    21. spdk_fd_group_wait
    22. event_handler->fn
    23. reactor_post_process_lw_thread
    24. _reactor_schedule_thread
    25. spdk_event_allocate
    26. spdk_event_call

    (二)上层服务与reactor

    (2.1)概述:

    (a)vhost-virtio服务
    (b)iSCSI-Target服务
    (c)NVMe-oF-Target服务

    (2.2)vhost-virtio:

    1. spdk_thread_poll
    2. thread_poll
    3. thread_execute_poller
    4. vdev_worker
    5. process_vq
    6. vhost_vq_avail_ring_get
    7. process_blk_task
    8. vhost_vq_avail_ring_get
    9. process_blk_task
    10. process_blk_request
    11. spdk_bdev_readv
    12. spdk_bdev_writev
    13. process_scsi_task
    14. bdev_scsi_execute
    15. bdev_scsi_readwrite
    16. spdk_bdev_readv_blocks
    17. spdk_bdev_writev_blocks

    (三)spdk-bdev框架

    (3.1)spdk-bdev框架对上层服务提供的读写API接口

    1. 读接口:spdk_bdev_read / spdk_bdev_readv
    2. 写接口:spdk_bdev_write / spdk_bdev_writev
    3. [bdev_io_submit]
    4. _bdev_io_submit
    5. bdev_io_do_submit
    6. spdk_bdev->fn_table->submit_request
    7. <A> bdev_nvme_submit_request
    8. <B> bdev_pmem_submit_request
    9. <C> bdev_virtio_submit_request
    10. <D> bdev_iscsi_submit_request
    11. <E> bdev_aio_submit
  • 相关阅读:
    深入剖析 RocketMQ 源码 - 负载均衡机制
    Vue基础:父子组件访问的方式
    花旗金融技术岗社招内推
    Java 之 IO/NIO/OKIO
    webpack:css代码提取插件extract-text-webpack-plugin和mini-css-extract-plugin
    Verilog
    SentenceTransformer 之论文解读
    《MySQL数据库进阶实战》读后感(SQL 小虚竹)
    java基础—oop三大特性
    linux中的、passwd 设置用户密码、id 查看用户是否存在、su 切换用户
  • 原文地址:https://blog.csdn.net/lingshengxiyou/article/details/126424838