fix incorrect folder name for julia-0.6.x
Former-commit-id: ef2c7401e0876f22d2f7762d182cfbcd5a7d9c70
This commit is contained in:
62
julia-0.6.3/share/julia/test/netload/memtest.jl
Normal file
62
julia-0.6.3/share/julia/test/netload/memtest.jl
Normal file
@@ -0,0 +1,62 @@
|
||||
# This file is a part of Julia. License is MIT: https://julialang.org/license
|
||||
|
||||
struct RUsage
|
||||
ru_utime_sec::Clong # user CPU time used
|
||||
ru_utime_usec::Clong # user CPU time used
|
||||
ru_stime_sec::Clong # system CPU time used
|
||||
ru_stime_usec::Clong # system CPU time used
|
||||
ru_maxrss::Clong # maximum resident set size
|
||||
ru_ixrss::Clong # integral shared memory size
|
||||
ru_idrss::Clong # integral unshared data size
|
||||
ru_isrss::Clong # integral unshared stack size
|
||||
ru_minflt::Clong # page reclaims (soft page faults)
|
||||
ru_majflt::Clong # page faults (hard page faults)
|
||||
ru_nswap::Clong # swaps
|
||||
ru_inblock::Clong # block input operations
|
||||
ru_oublock::Clong # block output operations
|
||||
ru_msgsnd::Clong # IPC messages sent
|
||||
ru_msgrcv::Clong # IPC messages received
|
||||
ru_nsignals::Clong # signals received
|
||||
ru_nvcsw::Clong # voluntary context switches
|
||||
ru_nivcsw::Clong # involuntary context switches
|
||||
end
|
||||
|
||||
function get_vmsize()
|
||||
ru = Array{RUsage}(1)
|
||||
ccall(:getrusage, Cint, (Cint, Ptr{Void}), 0, ru)
|
||||
return ru[1].ru_maxrss
|
||||
end
|
||||
|
||||
function run_mtest(name, testf)
|
||||
print("Testing $name...")
|
||||
for i in 1:2
|
||||
print("priming process...")
|
||||
testf()
|
||||
end
|
||||
vm1 = get_vmsize()
|
||||
println("monitored run...")
|
||||
testf()
|
||||
vm2 = get_vmsize()
|
||||
|
||||
diff = vm2 - vm1
|
||||
WARN = (diff > 1000) ? "<===================================== WARNING" : ""
|
||||
println("Memory Test ($name) : VMSize difference : $diff KB $WARN")
|
||||
end
|
||||
|
||||
|
||||
function mtest_create_strings()
|
||||
for i in 1:10^8
|
||||
string("$i")
|
||||
end
|
||||
gc()
|
||||
end
|
||||
|
||||
function mtest_remotecall_fetch()
|
||||
for i in 1:10^5
|
||||
remotecall_fetch(myid, 1)
|
||||
end
|
||||
gc()
|
||||
end
|
||||
|
||||
run_mtest("create_strings", () -> mtest_create_strings())
|
||||
run_mtest("remotecall_fetch", () -> mtest_remotecall_fetch())
|
||||
185
julia-0.6.3/share/julia/test/netload/nettest.jl
Normal file
185
julia-0.6.3/share/julia/test/netload/nettest.jl
Normal file
@@ -0,0 +1,185 @@
|
||||
# This file is a part of Julia. License is MIT: https://julialang.org/license
|
||||
|
||||
# Run various networking tests checking to see how we perform under large loads
|
||||
addprocs(1)
|
||||
|
||||
function test_connect_disconnect(exp)
|
||||
print("Testing 10^$exp connect/disconnects:\n")
|
||||
|
||||
(port, server) = listenany(8000)
|
||||
server_started = RemoteChannel()
|
||||
server_exited = RemoteChannel()
|
||||
client_exited = RemoteChannel()
|
||||
|
||||
@async begin
|
||||
clients_served = 0
|
||||
print("\t\t\t[SERVER] Started on port $(port), with PID $(getpid())\n")
|
||||
put!(server_started, false)
|
||||
while (clients_served < 10^exp)
|
||||
close(accept(server))
|
||||
clients_served += 1
|
||||
end
|
||||
put!(server_exited, true)
|
||||
print("\t\t\t[SERVER] Finished serving $(clients_served) clients\n")
|
||||
end
|
||||
|
||||
# Wait for the server
|
||||
@spawnat(2, begin
|
||||
take!(server_started)
|
||||
print("[CLIENT] Connecting repeatedly to port $(port)\n")
|
||||
for i in 1:10^exp
|
||||
close(connect("localhost", port))
|
||||
end
|
||||
print("[CLIENT] Finished with 10^$exp connections\n")
|
||||
put!(client_exited,true)
|
||||
end)
|
||||
|
||||
fetch(client_exited)
|
||||
close(server)
|
||||
fetch(server_exited)
|
||||
print("OK\n")
|
||||
end
|
||||
|
||||
# Perform first test
|
||||
test_connect_disconnect(5)
|
||||
|
||||
|
||||
function test_send(exp)
|
||||
(port, server) = listenany(8000)
|
||||
|
||||
@assert exp > 4
|
||||
size = 10^exp
|
||||
block = 10^(exp - 4)
|
||||
|
||||
print("Testing open, send of 10^$exp bytes and closing:\n")
|
||||
|
||||
server_started = RemoteChannel()
|
||||
server_exited = RemoteChannel()
|
||||
client_exited = RemoteChannel()
|
||||
|
||||
@async begin
|
||||
print("\t\t\t[SERVER] Started on port $(port)\n")
|
||||
put!(server_started, false)
|
||||
serv_sock = accept(server)
|
||||
bread = 0
|
||||
while bread < size
|
||||
serv_data = read(serv_sock, UInt8, block)
|
||||
@assert length(serv_data) == block
|
||||
bread += block
|
||||
end
|
||||
close(serv_sock)
|
||||
print("\t\t\t[SERVER] Received 10^$(log10(bread))B of 10^$(exp)B\n")
|
||||
put!(server_exited, bread)
|
||||
end
|
||||
|
||||
@spawnat(2, begin
|
||||
# wait for the server
|
||||
take!(server_started)
|
||||
print("[CLIENT] Connecting to port $(port)\n")
|
||||
cli_sock = connect("localhost", port)
|
||||
data = fill!(zeros(UInt8, block), Int8(65))
|
||||
cli_bsent = 0
|
||||
while cli_bsent < size
|
||||
write(cli_sock, data)
|
||||
cli_bsent += block
|
||||
end
|
||||
close(cli_sock)
|
||||
print("[CLIENT] Transmitted 10^$(log10(cli_bsent))B of 10^$(exp)B\n")
|
||||
put!(client_exited, cli_bsent)
|
||||
end)
|
||||
|
||||
brcvd = take!(server_exited)
|
||||
bsent = take!(client_exited)
|
||||
close(server)
|
||||
|
||||
if brcvd != bsent
|
||||
print("\t[ERROR] Received bytes ($(brcvd)) != sent bytes ($(bsent))\n")
|
||||
else
|
||||
print("OK\n")
|
||||
end
|
||||
end
|
||||
|
||||
# Run second test on a gigabyte of data
|
||||
test_send(9)
|
||||
|
||||
|
||||
# Utility function for test_bidirectional() that simultaneously transmits and
|
||||
# receives 10^exp bits of data over s
|
||||
@everywhere function xfer(s, exp)
|
||||
@assert exp > 4
|
||||
xfer_size = 10^exp
|
||||
xfer_block = 10^(exp - 4)
|
||||
|
||||
bsent = 0
|
||||
bread = 0
|
||||
|
||||
@sync begin
|
||||
# Create an asynchronous task that can modify bread properly
|
||||
recv_task = @task begin
|
||||
while bread < xfer_size
|
||||
data = read(s, UInt8, xfer_block)
|
||||
@assert length(data) == xfer_block
|
||||
bread += xfer_block
|
||||
end
|
||||
end
|
||||
Base.sync_add(recv_task)
|
||||
Base.enq_work(recv_task)
|
||||
|
||||
send_task = @task begin
|
||||
# write in chunks of xfer_block
|
||||
data = fill!(zeros(UInt8, xfer_block), Int8(65))
|
||||
while bsent < xfer_size
|
||||
write(s, data)
|
||||
bsent += xfer_block
|
||||
end
|
||||
end
|
||||
Base.sync_add(send_task)
|
||||
Base.enq_work(send_task)
|
||||
end
|
||||
|
||||
return (bsent, bread)
|
||||
end
|
||||
|
||||
function test_bidirectional(exp)
|
||||
print("Testing 10^$exp bytes of concurrent bidirectional transfers:\n")
|
||||
(port, server) = listenany(8000)
|
||||
|
||||
# For both the server and the client, we will transfer/receive 10^exp bytes
|
||||
server_started = RemoteChannel()
|
||||
server_exited = RemoteChannel()
|
||||
client_exited = RemoteChannel()
|
||||
|
||||
@async begin
|
||||
print("\t\t\t[SERVER] Started on port $(port)\n")
|
||||
put!(server_started, true)
|
||||
server_sock = accept(server)
|
||||
(bsent, bread) = xfer(server_sock, exp)
|
||||
close(server_sock)
|
||||
print("\t\t\t[SERVER] Transmitted 10^$(log10(bsent))B and received 10^$(log10(bread))B\n")
|
||||
put!(server_exited, (bsent, bread))
|
||||
end
|
||||
|
||||
@spawnat(2, begin
|
||||
# Wait for the server
|
||||
take!(server_started)
|
||||
print("[CLIENT] Connecting to port $(port)\n")
|
||||
client_sock = connect("localhost", port)
|
||||
(bsent, bread) = xfer(client_sock, exp)
|
||||
close(client_sock)
|
||||
print("[CLIENT] Transmitted 10^$(log10(bsent))B and received 10^$(log10(bread))B\n")
|
||||
put!(client_exited, (bsent,bread))
|
||||
end)
|
||||
|
||||
(serv_bsent, serv_bread) = take!(server_exited)
|
||||
(cli_bsent, cli_bread) = take!(client_exited)
|
||||
close(server)
|
||||
|
||||
if serv_bsent != cli_bread || serv_bread != cli_bsent
|
||||
print("\t[ERROR] Data was not faithfully transmitted!")
|
||||
else
|
||||
print("OK\n")
|
||||
end
|
||||
end
|
||||
|
||||
# Test 1GB of bidirectional data
|
||||
test_bidirectional(9)
|
||||
Reference in New Issue
Block a user