CAS更新的Cassandra亚毫秒延迟

时间:2016-04-15 07:18:30

标签: cassandra

我们正试图在单节点上运行的cassandra(v2.1.8)上的简单列族中实现CAS(比较和设置)更新的亚毫秒延迟。我们运行一系列测试,每个测试包括来自同一台机器上的单个线程的一个读取和一个写入CAS操作(RW),并且最多只能看到4毫秒。

当我们分析Cassandra进程时,我们看到SEPWorker类在旋转等待中花费大部分时间,而实际的RW操作花费的时间要少得多。我们分析了代码,并在SEPSuer.doWaitSpin方法中使用的LockSupport.parkNanos方法中添加了一些跟踪语句,我们看到即使它被安排平均休眠约12μs,它实际上每次呼叫睡眠800μs 。因此,由于旋转等待单个SEPWorker的任务,这将使延迟平均增加400μs。请注意,对于CAS操作,paxos需要执行多个此类任务,这会多次增加此开销。

有谁能建议如何避免这种开销?

2 个答案:

答案 0 :(得分:0)

您应该创建一个JIRA并向核心Cassandra团队提出补丁

答案 1 :(得分:0)

在调度线程执行时,您所描述的是一个普遍问题。不幸的是,无法以任意精确的时间间隔将线程置于WAITING状态。你可以做的是尝试优化Linux的中断计时器频率。但由于800μs已经非常敏感,我不打算看到你的用例有很多性能改进。 Paxos作为共识协议也不是为最少的往返次数而设计的,这种微观优化不会帮助你解决这个问题。