合并(Compaction)调度器设计了几种线程来完成整个链路?
设计了三种线程来完成整个链路:
• 构建合并任务线程:将需要合并的数据块按照范围切分,形成合并任务(Compaction Task),每一个合并任务结构体维护了必要的元信息,包括任务队列(Task Queue)指针,输入数据的起始地址(传输到FPGA 需要做CRC校验保证数据正确性),合并结果的写回地址,以及后续逻辑的回调函数指针。此外,合并任务还包含返回值,标志此次合并任务是否执行成功。对于失败的任务,会调用CPU 再次执行。通过线上运行的数据显示,大概只有0.03%的合并任务会被CPU 再次执行(主要是KV 长度过长的样例)。
• 分发线程:由于FPGA 上存在多个计算单元,需要设计相应的分发算法,目前采用了简单的轮询调度(Round-Robin)分发策略。由于每一个下发的合并任务大小接近,实验表明不同计算单元的利用率比较均衡。
• 驱动线程:负责将数据传输至FPGA 并通知计算单元开始工作,当计算单元任务执行完成后,会中断驱动线程将结果传回内存,并将合并任务放入结果队列中。
以上内容摘自《云原生数据库原理与实践》,这本书可以在电子工业出版社天猫店购买。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。