百合文库
首页 > 网文

Tebis: Index Shipping for Efficient Replication in LSM Key-Value(8)

2024-06-14 来源:百合文库
对于put请求,响应的大小是固定的,因此客户端会在操作之前准确地分配所需的内存。另一方面,对于get和scan请求,应答大小是可变的,并且客户端事先是未知的。如果size值大于应答缓冲区的大小,region服务器会发送部分应答,并通知客户端增加分配的应答缓冲区大小,以避免后续请求出现类似情况。然后,它从服务器提供的偏移量中获取剩余的值。因此,在这种情况下,代价是一次往返,对整体延迟的影响很小。
将Tebis的RDMA协议扩展到大量客户端,需要使用更多的内存用于RDMA缓冲区,并在更多的汇聚点轮询新消息。为了限制RDMA缓冲区所需的内存,Tebis可以在活跃的客户端和不活跃的客户端之间弹性地分配这些内存。此外,LITE等其他方法也适用于持久的LSM KV存储,因为LSM KV存储的90%尾延迟约为数百μs。通过调整Tebis中旋转的线程数和区分热客户端和冷客户端来降低轮询频率,可以缓解大量聚集点的影响。我们把这些作为扩展留给未来的工作。

Tebis: Index Shipping for Efficient Replication in LSM Key-Value


图4 Allocation and request-reply flow of Tebis RDMA Write-based communication protocol.
3.3.2 Variable Size Messages and Task Scheduling 设计可变长度消息的主要挑战是如何在不中断网络的情况下检测它们是否到达了region服务器。
Tebis中的所有消息由一个大小为128 B的消息头和一个可变大小的有效负载组成。为了支持可变大小的有效载荷,Tebis将有效载荷填充为消息头大小的倍数。为了检测传入的消息,每个region服务器使用一个旋转线程,如图5所示。旋转线程轮询它与客户端共享的每个RDMA缓冲区中的固定内存位置。旋转线程通过检查当前消息头的最后4个字节的集合魔数来检测新消息。然后,它从消息头中读取有效载荷大小,以确定可变大小消息的结尾和下一个消息头。在有效载荷的末尾使用第二个会合点来检查整个消息是否已经到达。在接收到消息后,旋转的线程会为它的一个工作线程创建一个新的客户端请求,在RDMA缓冲区中将消息置零,并将其集合点提前到下一个消息头。所有消息都是消息头大小的倍数,这一事实的好处是旋转线程不必将整个消息内存区域为零。

Tebis: Index Shipping for Efficient Replication in LSM Key-Value


猜你喜欢