You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I'm using ucx java interfaces to archive file reading from remote hosts with RMA feature. Remote host calling UcpEndpoint.putNonBlocking() to transfer data to local host, after corresponding UcpRequest is finished with its status is UCS_OK, alter local host that data is ready to read. Then local host reads rma segment buffer and checks data with expected.
Bug description
This routine works well but sporadically data content from RMA buffer not the same as expected and the tail of rma buffer (tens of KB) keep not changed comparing with last RMA put transfer.
This type of error rarely occurs under normal circumstances, but does. In my test case, 50 client pods continious reading total ~24TB data from ~50 server pods, this error occurs once with test case dozens of times without any exceptions, all requests is done with UCS_OK.
create shared UcpContext with new UcpContext(new UcpParams().requestRmaFeature().requestWakeupFeature().setMtWorkersShared(true))
create UcpWorker for listener from shared UcpConxt with requestThreadSafety()
for each income connection:
create UcpWorker from shared UcpConxt with requestThreadSafety()
accept UcpConnectionRequest in current UcpWorker
wait endpoint established and sync RMA necessary info with client
create 2MB UCS_MEMORY_TYPE_HOSTUcpMemory and relate ByteBuffer
for each read request:
pick corresponding endpoint according to read request
offset = 0, remain = read expect length
do
transfer_size = min(128KB, remain)
UcpEndpoint.putNonBlocking(localAddress=local_offset + offset, size=transfer_size, remoteAddress = remote_address + offset, remoteKey, null)
progress and wait request done with status equals to UCS_OK
flush endpoint / worker
alter RMA buffer segment from offset is readable
remain -= transfer_size, offset += transfer_size
while remain > 0
release held endpoint, able to reuse
Client part
create shared UcpContext with new UcpContext(new UcpParams().requestRmaFeature().requestWakeupFeature().setMtWorkersShared(true))
for server_addr in server_list:
create UcpWorker from shared UcpConxt with requestThreadSafety()
create 2MB UCS_MEMORY_TYPE_HOSTUcpMemory
generate remote key buffer via UcpMemory.getRemoteKeyBuffer()
create UcpEndpoint to server_addr in current UcpWorker
wait endpoint established and sync RMA necessary info with server
async waitEvent & progress worker
start multiple thread to perfrom data read from remote host, each thread:
pick an endpoint to remote host and tell remote to read
each read operation read length varias from 128KB to 2MB
offset = 0, remain = read expect length
do:
wait remote host alter message
rma segment from offset is readable
read data and check with expected, read size min(128KB, remain)
remain -= transfer_size, offset += transfer_size
while remain > 0
release held endpoint, able to reuse
The text was updated successfully, but these errors were encountered:
I'm using ucx java interfaces to archive file reading from remote hosts with RMA feature. Remote host calling
UcpEndpoint.putNonBlocking()
to transfer data to local host, after correspondingUcpRequest
is finished with itsstatus
isUCS_OK
, alter local host that data is ready to read. Then local host reads rma segment buffer and checks data with expected.Bug description
This routine works well but sporadically data content from RMA buffer not the same as expected and the tail of rma buffer (tens of KB) keep not changed comparing with last RMA put transfer.
This type of error rarely occurs under normal circumstances, but does. In my test case, 50 client pods continious reading total ~24TB data from ~50 server pods, this error occurs once with test case dozens of times without any exceptions, all requests is done with
UCS_OK
.Setup and versions
Each pod has four mlx5 devices available.
Build
Running
Steps to Reproduce
Simplified test case is describe here.
Server part
new UcpContext(new UcpParams().requestRmaFeature().requestWakeupFeature().setMtWorkersShared(true))
requestThreadSafety()
requestThreadSafety()
UcpConnectionRequest
in current UcpWorkerUCS_MEMORY_TYPE_HOST
UcpMemory
and relate ByteBuffertransfer_size = min(128KB, remain)
UcpEndpoint.putNonBlocking(localAddress=local_offset + offset, size=transfer_size, remoteAddress = remote_address + offset, remoteKey, null)
progress and wait request done with status equals to UCS_OK
flush endpoint / worker
alter RMA buffer segment from offset is readable
remain -= transfer_size, offset += transfer_size
Client part
new UcpContext(new UcpParams().requestRmaFeature().requestWakeupFeature().setMtWorkersShared(true))
requestThreadSafety()
UCS_MEMORY_TYPE_HOST
UcpMemory
UcpMemory.getRemoteKeyBuffer()
UcpEndpoint
to server_addr in current UcpWorkerwait remote host alter message
rma segment from offset is readable
read data and check with expected, read size min(128KB, remain)
remain -= transfer_size, offset += transfer_size
The text was updated successfully, but these errors were encountered: