开发者社区 > 数据库 > 正文

合并(Compaction)调度器设计了几种线程来完成整个链路?

已解决

合并(Compaction)调度器设计了几种线程来完成整个链路?

展开
收起
云上静思 2022-09-15 17:06:52 507 0
1 条回答
写回答
取消 提交回答
  • 推荐回答

    设计了三种线程来完成整个链路:

    • 构建合并任务线程:将需要合并的数据块按照范围切分,形成合并任务(Compaction Task),每一个合并任务结构体维护了必要的元信息,包括任务队列(Task Queue)指针,输入数据的起始地址(传输到FPGA 需要做CRC校验保证数据正确性),合并结果的写回地址,以及后续逻辑的回调函数指针。此外,合并任务还包含返回值,标志此次合并任务是否执行成功。对于失败的任务,会调用CPU 再次执行。通过线上运行的数据显示,大概只有0.03%的合并任务会被CPU 再次执行(主要是KV 长度过长的样例)。

    • 分发线程:由于FPGA 上存在多个计算单元,需要设计相应的分发算法,目前采用了简单的轮询调度(Round-Robin)分发策略。由于每一个下发的合并任务大小接近,实验表明不同计算单元的利用率比较均衡。

    • 驱动线程:负责将数据传输至FPGA 并通知计算单元开始工作,当计算单元任务执行完成后,会中断驱动线程将结果传回内存,并将合并任务放入结果队列中。

    以上内容摘自《云原生数据库原理与实践》,这本书可以在电子工业出版社天猫店购买。

    2022-09-15 21:56:14
    赞同 展开评论 打赏
问答分类:
问答地址:

数据库领域前沿技术分享与交流

相关电子书

更多
多IO线程优化版 立即下载
fibjs 模块重构从回调到协程--陈垒 立即下载
Apache Flink 流式应用中状态的数据结构定义升级 立即下载