This is strange as i understand CAT5 is only 10/100 and normal transfer rates from 1 pc to another is normally around 10MB/s but for some reason i get CAT6 Speeds out of it my router does support gigabit speeds but just cant understand how some times i get 100+ MB/s and other times i get like 10MB/s ideas?
My routers is a Netgear n600
What are you using for NICs? I know if you're using something like a PCI gigabit ethernet card, you're not going to see really high speeds because you're going to saturate the bus or if the integrated NIC on one of your machines could be tied to the PCI bus.
Have you tried ruling out the router and plugging the two machines into eachother with the same cable? Modern NIC don't need a crossover cable and you could try to send data from one machine to another that way.
Finally, what kind of drive setup do you have in the other machine. Are you certain that it's not an I/O bottleneck, because >100MB/s is a lot of data in a short amount of time for a single hard drive if that is what the other rig has. You still need to read and write just as fast as the LAN connection to achieve those speeds.
I have a ruby script that sends garbage data over a socket to connections that come in and prints out the throughput of this said garbage data. You could try saturating your network with that to see what kind of number come out. It removes the I/O aspect of the problem. If you're interested I can try and find it. I've used it for testing bandwidth inside the network where I work.
Edit: I found it. Here you go if you want to give them a try. They're pretty basic, you'll need to edit the hostname/IP in the client.rb file to the machine that's running server.rb. It just loops, you need to kill the window or ctrl+c to stop both of them since they run in an infinite loop.
client.rb
Code:
#!/usr/bin/ruby
require 'socket'
s = TCPSocket.new '10.0.0.2', 4586
part_count = 0
average_bytes = 0
average_time = 0
cps = 0
print_freq = 1
loop do
t1 = Time.new.to_f
data = s.gets
t2 = Time.new.to_f
average_time = (average_time + (t2 - t1)) / 2
cps = data.length / average_time
part_count = part_count + 1
average_bytes = (average_bytes + data.bytesize) / 2
if part_count % print_freq == 0 then
bspeed = average_bytes / average_time
bspeed = "%.3f" % (bspeed / 1024 / 1024)
p "Speed: #{bspeed} MB/s"
end
end
server.rb
Code:
#!/usr/bin/ruby
require 'socket'
server = TCPServer.new 4586
o = [('a'..'z'),('A'..'Z')].map{|i| i.to_a}.flatten;
begin
str_msg = (0..(50 * 1024 * 1024)).map{ o[rand(o.length)] }.join;
client = server.accept
loop do
client.puts str_msg
end
rescue Exception=>e
p 'Lost connection.'
exit
end
Example output on client side
Code:
~$ ruby1.9.3 client.rb
"Speed: 112.601 MB/s"
"Speed: 108.845 MB/s"
"Speed: 109.384 MB/s"
"Speed: 110.130 MB/s"
"Speed: 108.468 MB/s"
"Speed: 115.494 MB/s"
"Speed: 113.947 MB/s"
"Speed: 114.085 MB/s"
"Speed: 106.919 MB/s"
"Speed: 114.459 MB/s"
"Speed: 106.645 MB/s"
"Speed: 114.418 MB/s"
"Speed: 106.698 MB/s"
"Speed: 116.128 MB/s"
"Speed: 115.969 MB/s"
"Speed: 116.154 MB/s"
"Speed: 116.023 MB/s"
"Speed: 116.184 MB/s"
"Speed: 116.414 MB/s"
"Speed: 105.733 MB/s"
"Speed: 112.684 MB/s"
"Speed: 114.037 MB/s"
"Speed: 105.961 MB/s"
"Speed: 112.643 MB/s"
^Cclient.rb:16:in `gets': Interrupt
from client.rb:16:in `block in <main>'
from client.rb:14:in `loop'
from client.rb:14:in `<main>'
This is a result on HP Procurve, netgear unmanaged switch, and a linksys gigabit switch from a server to a tower with both using gigabit (and gigabit between the switches, client -> linksys -> netgear -> procurve -> server). If I used the Mac with a Thunderbolt ethernet adapter, it is closer to 130MB/s.
I didn't lie when I said it was basic, but it works, at least for me it did on both Ubuntu and a Mac. I don't see why it wouldn't work on Windows, just use ruby 1.9.x. I recommend using the same I did, which is 1.9.3.