Holger-Benz commented on issue #485: URL: https://github.com/apache/mina-sshd/issues/485#issuecomment-2063380461
Von: kvlnkarthik ***@***.***> Gesendet: Mittwoch, 17. April 2024 19:28 An: apache/mina-sshd ***@***.***> Cc: Holger Benz ***@***.***>; Author ***@***.***> Betreff: Re: [apache/mina-sshd] Perfomance file transfer (Issue #485) We see same issue in our tests as well. We are using 2.12.1 version. We executed filetransfer test case using Files.copy() approach for transferring a file of about 167Mb to a remote server and took it around 30seconds. If we transfer the same file from same system to the same remote server but with sftp session created with below commands, it takes around 6 minutes to complete the transfer. Performance is very much degraded in this scenario. " sftp -P 2022 @localhost<https://github.com/localhost>" put /tmp/ We run the SSHD server with sftp subsystem and a custom FileSystemFactory which creates a remote sftp filesystem created using below code in localhost and initiate the above sftp commands from command line terminal. URI sftpUri = SftpFileSystemProvider.createFileSystemURI(sshConnectionDetails.getHostname(), sshConnectionDetails.getSshPort(), sshConnectionDetails.getUsername(), sshConnectionDetails.getPassword()); Apache Mina code runs on localhost 2022 but creates a remote filesystem. So, when we execute the put /tmp/, the file gets transferred from our local system to remote server. i.e., client -> apache mina server -> remote server. We acknowledge that there is an additional hop here, i.e., the file needs to be transferred to server and then to remote server but the transfer rate is way too slow. We see SftpRemotePathChannel.write method invocations during this mode of transfer in the thread dump. Based on our tests and your explanation in previous comments, this mode of transfer seems to be very slow. Stack trace: "sshd-SftpSubsystem-47114-thread-1" #35<https://github.com/apache/mina-sshd/pull/35> daemon prio=5 os_prio=0 tid=0x00007f7cf4070800 nid=0x18e88 in Object.wait() [0x00007f7d30ffc000] java.lang.Thread.State: TIMED_WAITING (on object monitor) at java.lang.Object.wait(Native Method) at java.lang.Object.wait(Object.java:460) at org.apache.sshd.sftp.client.impl.DefaultSftpClient.receive(DefaultSftpClient.java:351) - locked <0x000000071c95faa0> (a java.util.HashMap) at org.apache.sshd.sftp.client.impl.DefaultSftpClient.receive(DefaultSftpClient.java:325) at org.apache.sshd.sftp.client.impl.AbstractSftpClient.response(AbstractSftpClient.java:181) at org.apache.sshd.sftp.client.impl.AbstractSftpClient.rpc(AbstractSftpClient.java:169) at org.apache.sshd.sftp.client.impl.AbstractSftpClient.checkCommandStatus(AbstractSftpClient.java:233) at org.apache.sshd.sftp.client.impl.AbstractSftpClient.write(AbstractSftpClient.java:783) at org.apache.sshd.sftp.client.fs.SftpFileSystem$Wrapper.write(SftpFileSystem.java:422) at org.apache.sshd.sftp.client.impl.SftpRemotePathChannel.doWrite(SftpRemotePathChannel.java:266) - locked <0x000000071cd40f08> (a java.lang.Object) at org.apache.sshd.sftp.client.impl.SftpRemotePathChannel.write(SftpRemotePathChannel.java:202) at org.apache.sshd.sftp.server.FileHandle.write(FileHandle.java:161) at org.apache.sshd.sftp.server.SftpSubsystem.doWrite(SftpSubsystem.java:884) at org.apache.sshd.sftp.server.AbstractSftpSubsystemHelper.doWrite(AbstractSftpSubsystemHelper.java:605) at org.apache.sshd.sftp.server.AbstractSftpSubsystemHelper.doProcess(AbstractSftpSubsystemHelper.java:362) at org.apache.sshd.sftp.server.SftpSubsystem.doProcess(SftpSubsystem.java:355) at org.apache.sshd.sftp.server.AbstractSftpSubsystemHelper.process(AbstractSftpSubsystemHelper.java:344) at org.apache.sshd.sftp.server.SftpSubsystem.run(SftpSubsystem.java:331) at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) at java.lang.Thread.run(Thread.java:750) Is there any way to force/override the file upload/download in sftp sessions through put/get commands to use Files.copy() way in order to see better performance or tune buffers in SftpRemotePathChannel. Could you please let me know. Also observed that if we simply use sftp openssh client to the remote server directly without going through our Apache Mina Sftp server code, it takes only 3seconds to transfer the same file. - Reply to this email directly, view it on GitHub<https://github.com/apache/mina-sshd/issues/485#issuecomment-2061827392>, or unsubscribe<https://github.com/notifications/unsubscribe-auth/BHWMB3RPHM74OQYHFLETN6LY52WJBAVCNFSM6AAAAABGJSS542VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDANRRHAZDOMZZGI>. You are receiving this because you authored the thread.Message ID: ***@***.******@***.***>> -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: dev-unsubscr...@mina.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@mina.apache.org For additional commands, e-mail: dev-h...@mina.apache.org