Transfer managers
Transfer managers control how data is transferred between clients and Warabi providers. They allow you to optimize for different scenarios: single large transfers, pipelined transfers, or concurrent transfers.
What are transfer managers?
A transfer manager is a strategy for moving data between client and server. Different strategies offer different trade-offs between throughput, latency, and resource usage.
Warabi provides two built-in transfer managers:
Default: Simple single-transfer strategy, RDMA goes directly to destination
Pipeline: RDMA goes to pre-allocated buffers that are copied to destination in a pipeline manner
It is difficult to evaluate in which situation one would be better than the other, so we encourage users give both a try.
Configuration
Transfer managers are configured at the provider level, using the “transfer_manager” field.
Example in a bedrock configuration:
{
"providers": [
{
"type": "warabi",
"provider_id": 42,
"config": {
"target": {
"type": "memory",
"config": {}
},
"transfer_manager": {
"type": "pipeline",
"config": {
"num_pools": 4,
"num_buffers_per_pool": 8,
"first_buffer_size": 1048576,
"buffer_size_multiplier": 2
}
}
}
}
]
}
Default transfer manager
The default transfer manager performs operations in a single transfer to/from the target region.
Configuration: No configuration needed (used when transfer_manager is not specified)
{
"config": {
"target": {"type": "memory", "config": {}}
// No transfer_manager specified = use default
}
}
Behavior:
Single bulk transfer per operation
Straightforward memory management
Good for most use cases
Pipeline transfer manager
The pipeline transfer manager splits large transfers into chunks and pipelines them with actual I/O. It requires the data be transferred to intermediate buffers first. These buffers are pre-registered.
Configuration options:
{
"transfer_manager": {
"type": "pipeline",
"config": {
"num_pools": 4,
"num_buffers_per_pool": 8,
"first_buffer_size": 1048576,
"buffer_size_multiplier": 2
}
}
}
num_pools: Number of buffer pools (set of pre-allocated buffers with the same size)num_buffers_per_pool: Number of buffers per poolfirst_buffer_size: Size (in bytes) of the smallest buffersbuffer_size_multiplier: by how much to multiply the size from buffer pool N to buffer pool N+1