I used SSHD as a middleman between client and target sftp server.
I found that, when filezilla client directly connect to the target sftp server, it transfers fast. When filezilla client connect to the middleman, it transfers slow.
I analyzed the source code of org.apache.sshd.server.subsystem.sftp.SftpSubsystem#doRead, and I found it behaves like block mode, and client's other SSH_FXP_READ request blocked in the same thread.
my middleman code: