Selvakumar has asked for the wisdom of the Perl Monks concerning the following question:

How can i check the current FTP speed of upload and download process and how can i increase the same? For example 25mb file can be upload in 5 minutes thru ftp softwares but the same via Net::FTP it takes 15 minutes.

Replies are listed 'Best First'.
Re: Net FTP Speed check and increase
by gemoroy (Beadle) on Jun 26, 2009 at 11:38 UTC
    From Net::FTP docs:
    bytes_read () Returns the number of bytes read so far.
    So you can check localtime() and call this method

    (i am sure there are some simpler ways to do it, but never the less)

Re: Net FTP Speed check and increase
by BrowserUk (Patriarch) on Jun 26, 2009 at 14:23 UTC

    Have you tried adjusting the blocksize for the connection? See 4k is best


    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.
      I tried it, and it does seem to work. I addded it to this script that I ran recently:

      #!/usr/bin/perl use strict; use warnings; use Net::FTP::Robust; use Net::FTP::Throttle; use Log::Report; use constant HOST => 'ftp.perl.org'; use constant DIR => '/pub/CPAN'; use constant FILE => 'README'; my $ftp = Net::FTP->new( HOST, Debug => 1, Passive => 1, Timeout => 1, Bytes_read => 40960, BlockSize => 40960, MegabitsPerSecond => 2) or die "Couldn't connect: $@\n"; $ftp->login('anonymous'); $ftp->cwd(DIR); $ftp->binary; $ftp->get(FILE); $ftp->size(FILE); $ftp->quit;

        Um...

        Bytes_read => 40960, BlockSize => 40960,

        that's 40kb, not 4kb: 4096. And 4096 may not be the best setting on all systems. Ie. yours. You'd need to try various different settings.

        You should also perform your testing with a considerably larger file than that 2kb README.

        Also, try using Net::FTP itself rather than Net::FTP::Robust & Net::FTP::Throttle. Whilst they may be valuable, they are almost certainly going to slow things down somewhat.

        But mostly, try turning off Debug--that will also slow things down.

        I used a modified version of your script to grab the same 5MB file using Net::FTP and wget, and both achieve remarkably similar throughputs, with Net::FTP actually beating wget when I used a 4096 byte blocksize:

        c:\test>wget --passive-ftp ftp://ftp.perl.org/pub/CPAN/ports/win32/Sta +ndard/x86/perl-5.6.0.tar.gz --04:26:04-- ftp://ftp.perl.org/pub/CPAN/ports/win32/Standard/x86/per +l-5.6.0.tar.gz => `perl-5.6.0.tar.gz.1' Resolving ftp.perl.org... done. Connecting to ftp.perl.org[193.136.239.1]:21... connected. Logging in as anonymous ... Logged in! ==> SYST ... done. ==> PWD ... done. ==> TYPE I ... done. ==> CWD /pub/CPAN/ports/win32/Standard/x86 ... d +one. ==> PASV ... done. ==> RETR perl-5.6.0.tar.gz ... done. Length: 5,443,601 (unauthoritative) 100%[====================================>] 5,443,601 278.97K/s +ETA 00:00 04:26:24 (278.97 KB/s) - `perl-5.6.0.tar.gz.1' saved [5443601] c:\test>ftp-get -SIZE=81920 Got 5443601 bytes at 273685.318/second c:\test>ftp-get -SIZE=40960 Got 5443601 bytes at 286686.382/second c:\test>ftp-get -SIZE=4096 Got 5443601 bytes at 300668.379/second

        Hardly definitive, but worth a few trials.

        The code I used:


        Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
        "Science is about questioning the status quo. Questioning authority".
        In the absence of evidence, opinion is indistinguishable from prejudice.