What do you think about this Script

please watch the picture

You have got long, long ping.
If your script starts many short transmisions instead big one you will see small download speed as overhead is huge and lag (long ping) is making it even worse. If your packets are fragmented you will see even more drop in speed.

i creat script to test my isp speed look at the picture

I know. But we do not know how the script is testing your line.
Starting many small/short independend transmisions have much bigger overhead than big one and then you loose your line for management data-flow and effective numbers are low.

this my script need some fix try it and reply me


# START DOWNLOAD FILE TIME


:local 1date [/system clock get time]
:log info ("start test speed " .$1date)


/tool fetch url="http://www.inkjettips.com/chapter2.pdf" mode=http;

#END DOWNLOAD FILE TIME 

:local 2date [/system clock get time]
#:log info $2date

:local 3date ($2date - $1date)
#:log info $3date
:local sec [:pick $3date 6 8];
#:log info $sec
:local sise [/file get [/file find name=chapter2.pdf] size]
#:log info $sise
:local sdonspped ((($sise / $sec) * 8) /1024) 
:local ddow ($sdonspped / 8)
:log warning ("My Line Speed = ".$sdonspped." Mbps")
:log error ("My Download Speed = ".$ddow." Kbps")

All numbers are correct

You download file and uses fetched byte count and time calculate “line speed” as

file_size_in_bytes * 8 / 1024 => line_speed in Kbps = Kilo bits / s

Next you recalculate line_speed to bytes

 line_speed_in_bits / 8 = line_speed_in_bytes

then you display both values but you have bad measure for both values: Mbps instead of Kbps and KBps instead of Kbps

I have tweaked a little bit your script - you should have in mind that "pick"ing seconds is dangerous if download time is longer than 60 sec.

# START DOWNLOAD FILE TIME
:local 1date [/system clock get time]
:log info ("start test speed " .$1date)
/tool fetch url="http://www.inkjettips.com/chapter2.pdf" mode=http;
#END DOWNLOAD FILE TIME
:local 2date [/system clock get time]
:log info ("stop test speed " .$2date)
:local 3date ($2date - $1date)
:log info ("stop - start " .$3date)
:local sec [:pick $3date 6 8];
:log info ("time of test in sec. " .$sec)
:local sise [/file get [/file find name=chapter2.pdf] size]
:log info ("file size in bytes" .$sise)
:local sdonspped ((($sise / $sec) * 8) /1024)
:local ddow ($sdonspped / 8)
:log info ("My Download Speed = ".$sdonspped." Kbps")
:log info ("My Download Speed = ".$ddow." KBps")

i m sorry about my english

is the script work good with you ??

i choose small file to download from 2mb to 5mb
but i don’t have server to but this file and replace futch url with that server .

Yes, it works if you check download speed not the operator declared speed. I know that it should be almost the same but not always is.
You calculate download speed in Kilobits / s and KiloBytes / s.
Your router is not able to display your nominal Line Speed as it has no ability to read this value from anywhere. You could only check actual speed and compare it in mind to operator numbers.

look at this code now

The Ultimate Speed Spliter


:local y [:len [/queue simple find comment="newmind"]]
:local r  [:len [/ip hotspot host find]]

:if ($r != $y) do={\

# START DOWNLOAD FILE TIME

:local 1date [/system clock get time]
:log info ("start test speed " .$1date)

/tool fetch url="http://www.rarlab.com/rar/wrar520ar.exe" mode=http;

#END DOWNLOAD FILE TIME 

:local 2date [/system clock get time]
#:log info $2date

:local 3date ($2date - $1date)
#:log info $3date
:local sec [:pick $3date 6 8];
#:log info $sec
:local sise [/file get [/file find name=wrar520ar.exe] size]
#:log info $sise
:local sdonspped ((($sise / $sec ) * 8 ) /1024) 
:local ddow ($sdonspped / 8)
:log warning ("My Line Speed = ".$sdonspped." Mbps")
:log error ("My Download Speed = ".$ddow." Kbps")

/queue simple remove [find comment="newmind"] ;

:local down value=$sdonspped;

:local downlo value=(($down / r)*1000);
:local aspeed value=(0."/"."$downlo")

:local hold value=((($down / r) / 2)*1000);
:local ashold value=(0."/"."$hold")

:local max value=((($down / r) / 4)*1000);
:local amax value=(0."/"."$max")

/ip hotspot host
:foreach si in=[ find] do={
:local ip [get $si address]

/queue simple ;\

add burst-limit=$aspeed burst-threshold=$ashold burst-time=0s/20s comment=newmind direction=both disabled=no \
    interface=all limit-at=$amax  max-limit=$amax  name=$ip packet-marks="" parent=none priority=4 \
    queue=default-small/default-small target-addresses=$ip total-queue=default-small;\
}}

But what is the purpose of it ? Should you explain or should I find it myself ? I see that you have not changed your calculations as I showed you.

please help me to do that
my english not good im not understand you
show me your updates and thank you

:local y [:len [/queue simple find comment="newmind"]]
:local r  [:len [/ip hotspot host find]]

:if ($r != $y) do={\

# START DOWNLOAD FILE TIME

:local 1date [/system clock get time]
:log info ("start test speed " .$1date)

/tool fetch url="http://www.rarlab.com/rar/wrar520ar.exe" mode=http;

#END DOWNLOAD FILE TIME 

:local 2date [/system clock get time]
#:log info $2date

:local 3date ($2date - $1date)
#:log info $3date
:local sec [:pick $3date 6 8];
#:log info $sec
:local sise ([[/file get [/file find name=wrar520ar.exe] size] * 8 ] ) 
#:log info $sise 
:local sdonspped ((($sise / $sec ) * 8 ) /1024) 
:local ddow ($sdonspped / 8)
:log warning ("My Line Speed = ".($sdonspped / 1024 )." Mbps")
:log warning ("My Line Speed = ".$sdonspped." Mbps")
:log error ("My Download Speed = ".$ddow." Kbps")

/queue simple remove [find comment="newmind"] ;

:local down value=$sdonspped;

:local downlo value=(($down / r)*1000);
:local aspeed value=(0."/"."$downlo")

:local hold value=((($down / r) / 2)*1000);
:local ashold value=(0."/"."$hold")

:local max value=((($down / r) / 4)*1000);
:local amax value=(0."/"."$max")

/ip hotspot host
:foreach si in=[ find] do={
:local ip [get $si address]

/queue simple ;\

add burst-limit=$aspeed burst-threshold=$ashold burst-time=0s/20s comment=newmind direction=both disabled=no \
    interface=all limit-at=$amax  max-limit=$amax  name=$ip packet-marks="" parent=none priority=4 \
    queue=default-small/default-small target-addresses=$ip total-queue=default-small;\
}}

Hi ah3000
On what version have you tested your scrip ?
Bigfoot

microtik 5.26

Thx, If you going to go to 6.X you will have to change the queues command

/queue simple
add burst-limit=$aspeed burst-threshold=$ashold burst-time=0s/20s comment=newmind disabled=no target=pppoe-out1 limit-at=$amax max-limit=$amax name=$ip packet-marks="" parent=none priority=4/4 queue=default-small/default-small dst=$ip total-queue=default-small;

Hi ah3000

You may want to look at the script got it from a Russia site , in all respect of the owner. :sunglasses:

:local simple [/queue simple find comment="Bigfoot"];
:local count [:len $simple];
:local i;
:global gbool;
:global cpuin;
:global cpu1;
:global cpu2;
:global cpu3;
:global cpu4;
:global cpu5;
:global cpu11;
:global cpu21;
:global cpu31;
:global cpu41;
:global cpu51;
:global statusdown;
:global statusup;
:global status;
:if ($gbool != "1") do={:set cpuin 0;
:set cpu1 0;
:set cpu2 0;
:set cpu3 0;
:set cpu4 0;
:set cpu5 0;
:set cpu11 0;
:set cpu21 0;
:set cpu31 0;
:set cpu41 0;
:set cpu51 0;
:set gbool "1";
:local newi "";
:for i from=1 to=$count step=1 do={:set newi ($newi . "0");
};
:set statusdown $newi;
:set statusup $newi;
:set status $newi;
};
:local scriptstart [/system clock get time];
:set scriptstart (([:pick $scriptstart 0 2] * 3600) + ([:pick $scriptstart 3 5] * 60) + [:pick $scriptstart 6 8]);
:if ($cpuin = 0) do={:set cpu1 [/system resource get cpu-load];
} else={:if ($cpuin = 1) do={:set cpu2 [/system resource get cpu-load];
} else={:if ($cpuin = 2) do={:set cpu3 [/system resource get cpu-load];
} else={:if ($cpuin = 3) do={:set cpu4 [/system resource get cpu-load];
} else={:set cpu5 [/system resource get cpu-load];
};
};
};
};
:local MaxRateDownload 2710000;
:local MaxRateUpload 2710000;
:local x;
:local pos;
:local up;
:local down;
:local sup;
:local sdown;
:local sx;
:local sx2;
:local usersactivedown 0;
:local usersactiveup 0;
:local minspeedupload ($MaxRateUpload / $count);
:local minspeeddownload ($MaxRateDownload / $count);
:local falsedown ($MaxRateDownload - $minspeeddownload);
:local falseup ($MaxRateUpload - $minspeedupload);
:local mUp ($minspeedupload / 5);
:local mDown ($minspeeddownload / 5);
:local ratex;
:local itime ([/system scheduler get "Bigfoot" interval]);
:set itime (([: pick $itime 3 5]) * 60 + [: pick $itime 6 8]);
:if ($count != [:len $statusdown]) do={:local newi "";
:for i from=1 to=$count step=1 do={:set newi ($newi . "0");
};
:set statusdown $newi;
};
:if ($count != [:len $statusup]) do={:local newi "";
:for i from=1 to=$count step=1 do={:set newi ($newi . "0");
};
:set statusup $newi;
};
:if ($count != [:len $status]) do={:local newi "";
:for i from=1 to=$count step=1 do={:set newi ($newi . "0");
};
:set status $newi;
};
:for i from=0 to=($count - 1) step=1 do={:set sx2 0;
:set sdown [:pick $statusdown $i ($i+1)];
:set sup [:pick $statusup $i ($i+1)];
:set sx [:pick $status $i ($i+1)];
:set x [:pick $simple $i];
:set ratex [/queue simple get $x rate];
:set pos [:find $ratex "/" -1];
:set up [:pick $ratex 0 $pos];
:set down [:pick $ratex ($pos+1) [:len $ratex]];
:set pos [:find $down "M" -1];
:if ($pos != "") do={:set down [: pick $down 0 $pos];
:set pos [:find $down "." -1];
:set down (([: pick $down 0 $pos] * 1048576) + ([: pick $down ($pos + 1) ($pos + 2)] * 1048576 / 10));
} else={:set pos [:find $down "k" -1];
:if ($pos != "") do={:set down [: pick $down 0 $pos];
:set pos [:find $down "." -1];
:set down (([: pick $down 0 $pos] * 1024) + ([: pick $down ($pos + 1) ($pos + 2)] * 1024 / 10));
} else={:set pos [:find $down "G" -1];
:if ($pos != "") do={:set down [: pick $down 0 $pos];
:set pos [:find $down "." -1];
:set down (([: pick $down 0 $pos] * 1073741824) + ([: pick $down ($pos + 1) ($pos + 2)] * 1073741824 / 10));
} else={:set pos [:find $down "b" -1];
:set down [: pick $down 0 $pos];
};
};
};
:set pos [:find $up "M" -1];
:if ($pos != "") do={:set up [: pick $up 0 $pos];
:set pos [:find $up "." -1];
:set up (([: pick $up 0 $pos] * 1048576) + ([: pick $up ($pos + 1) ($pos + 2)] * 1048576 / 10));
} else={:set pos [:find $up "k" -1];
:if ($pos != "") do={:set up [: pick $up 0 $pos];
:set pos [:find $up "." -1];
:set up (([: pick $up 0 $pos] * 1024) + ([: pick $up ($pos + 1) ($pos + 2)] * 1024 / 10));
} else={:set pos [:find $up "G" -1];
:if ($pos != "") do={:set up [: pick $up 0 $pos];
:set pos [:find $up "." -1];
:set up (([: pick $up 0 $pos] * 1073741824) + ([: pick $up ($pos + 1) ($pos + 2)] * 1073741824 / 10));
} else={:set pos [:find $up "b" -1];
:set up [: pick $up 0 $pos];
};
};
};
:if ($up >= $mUp) do={:if ($sup = 9) do={:set usersactiveup ($usersactiveup+1);
:set sx2 ($sx2+1);
} else={:set sup ($sup + $itime);
:if ($sup > 9) do={:set sup 9;};
:set statusup ([:pick $statusup 0 $i] . $sup . [:pick $statusup ($i+1)]);
};
} else={:if ($sup != 0) do={:set statusup ([:pick $statusup 0 $i] . "0" . [:pick $statusup ($i+1)]);
};
};
:if ($down >= $mDown) do={:if ($sdown = 9) do={:set usersactivedown ($usersactivedown+1);
:set sx2 ($sx2+2);
} else={:set sdown ($sdown + $itime);
:if ($sdown > 9) do={:set sdown 9;
};
:set statusdown ([:pick $statusdown 0 $i] . $sdown . [:pick $statusdown ($i+1)]);
};
} else={:if ($sdown != 0) do={:set statusdown ([:pick $statusdown 0 $i] . "0" . [:pick $statusdown ($i+1)]);
};
};
:if ($sx2 != $sx) do={:set status ([:pick $status 0 $i] . $sx2 . [:pick $status ($i+1)]);
};
};
:if ($usersactivedown = 0) do={:set minspeeddownload ($falsedown);
} else={:if ($usersactivedown = $count) do={:set minspeeddownload ($MaxRateDownload / $usersactivedown);
} else={:set minspeeddownload (($MaxRateDownload - $minspeeddownload) / $usersactivedown);
};
};
:if ($usersactiveup = 0) do={:set minspeedupload ($falseup);
} else={:if ($usersactiveup = $count) do={:set minspeedupload ($MaxRateUpload / $usersactiveup);
} else={:set minspeedupload (($MaxRateUpload - $minspeedupload) / $usersactiveup);
};
};
:local s0 ($falseup . "/" . $falsedown);
:local s1 ($minspeedupload . "/" . $falsedown);
:local s2 ($falseup . "/" . $minspeeddownload);
:local s3 ($minspeedupload . "/" . $minspeeddownload);
:for i from=0 to=($count - 1) step=1 do={:set sx [:pick $status $i ($i+1)];
:set x [:pick $simple $i];
:if ($sx = 0) do={:if ([/queue simple get $x max-limit] != $s0) do={/queue simple set $x max-limit=$s0;
};
} else={:if ($sx = 1) do={:if ([/queue simple get $x max-limit] !=$s1) do={/queue simple set $x max-limit=$s1;
};
} else={:if ($sx = 2) do={:if ([/queue simple get $x max-limit] !=$s2) do={/queue simple set $x max-limit=$s2;
};
} else={:if ([/queue simple get $x max-limit] != $s3) do={/queue simple set $x max-limit=$s3;
};
};
};
};
};
:local scriptstop [/system clock get time];
:set scriptstop (([:pick $scriptstop 0 2] * 3600) + ([:pick $scriptstop 3 5] * 60) + [:pick $scriptstop 6 8]);
:if ($scriptstart > $scriptstop) do={:set scriptstop ($scriptstop + 86400);
};
:set scriptstart ($scriptstop - $scriptstart);
:if ($cpuin = 0) do={:set cpu11 [/system resource get cpu-load];
:set cpuin 1;
} else={:if ($cpuin = 1) do={:set cpu21 [/system resource get cpu-load];
:set cpuin 2;
} else={:if ($cpuin = 2) do={:set cpu31 [/system resource get cpu-load];
:set cpuin 3;
} else={:if ($cpuin = 3) do={:set cpu41 [/system resource get cpu-load];
:set cpuin 4;
} else={:set cpu51 [/system resource get cpu-load];
:set cpuin 0;
};
};
};
};
:local srCPU (($cpu1+$cpu2+$cpu3+$cpu4+$cpu5+$cpu11+$cpu21+$cpu31+$cpu41+$cpu51)/10);
:set i $itime;
:if ($srCPU > 70) do={:set i ($i + 1);
} else={:if ($srCPU < 70) do={:set i ($i - 1);
};
};
:if ($i > 120) do={:set i 120;} else={:if ($i < 60) do={:set i 60;
};
};
:if ($i < $scriptstart) do={:set i $scriptstart;};
:if ($i != $itime) do={/system scheduler set "Bigfoot" interval=$i;
};
:log info ("------------------------------------------");
:log warning ("Shaper exe v1 (dr-stas)");
:log info ("MaxRate Download : " . ($MaxRateDownload / 1024) . " Kbps / " . ($MaxRateDownload / 1048576) . " Mbps / Upload : " . ($MaxRateUpload / 1024) . " Kbps / " . ($MaxRateUpload / 1048576) . " Mbps");
:log info ("Active Users : Download : " . $usersactivedown . " / Upload : " . $usersactiveup);
:log info ("User Speed Download : " . ($minspeeddownload / 1024) . " Kbps / " . ($minspeeddownload / 1048576) . " Mbps / Upload : " . ($minspeedupload / 1024) . " Kbps / " . ($minspeedupload / 1048576) . " Mbps" );
:log info ("Performance Time: " . $scriptstart . " seconds.");
:log info ("Interval Time: " . $i);
:log warning ("CPU load aver: " . $srCPU . " %");
:log info ("------------------------------------------");