8
7
plain = ctypes.cdll.LoadLibrary("install/lib/libplain.so")
8
libc = ctypes.cdll.LoadLibrary("/lib/libc.so.6")
9
bionic = ctypes.cdll.LoadLibrary("install/lib/libbionic.so")
10
glibc = ctypes.cdll.LoadLibrary("install/lib/libglibc.so")
11
newlib = ctypes.cdll.LoadLibrary("install/lib/libnewlib.so")
9
12
helpers = ctypes.cdll.LoadLibrary("install/lib/libhelpers.so")
11
dest = ctypes.create_string_buffer(1024)
12
src = ctypes.create_string_buffer('Hi there', 1024)
14
dest = ctypes.create_string_buffer(1024*1024)
15
src = ctypes.create_string_buffer(('\x55' * 13) + '\0', 1024*1024)
20
base = 10**(int(math.log10(v)))
21
return int(v/base + 1) * base
15
24
timer = timeit.default_timer
28
39
# Calculate a good number of loops
32
43
elapsed = run(lambda: helpers.spawniis(plain.memcpy, loops, dest, src, 20))
39
base = 10**(int(math.log10(loops)))
40
loops = int(loops/base + 1) * base
48
loops = round2(loops*2/elapsed)
44
# Calculate the call overhead
45
elapsed = run(lambda: helpers.spawniis(helpers.bounce, loops, dest, src, 20))
49
elapsed = run(lambda: helpers.spawniis(plain.memcpy, loops, dest, src, 20))
56
#small = range(4096, limit, 4096)
57
big = [int(step**x) for x in range(1, int(math.log(limit)/math.log(step)+1))]
60
steps = sorted(list(set(big) | set(small)))
66
l = round2(int(loops*30/size))
71
# lambda: helpers.spawniis(helpers.bounce, l, dest, src, size),
72
# lambda: helpers.spawniis(plain.memcpy, l, dest, src, size),
73
# lambda: helpers.spawniis(plain.memcpy2, l, dest, src, size),
74
# lambda: helpers.spawniis(libc.memcpy, l, dest, src, size),
75
# lambda: helpers.spawniis(glibc.memcpy, l, dest, src, size),
76
# lambda: helpers.spawniis(bionic.memcpy, l, dest, src, size),
79
# lambda: helpers.spawniis(helpers.bounce, l, dest, src, size),
80
# lambda: helpers.spawniis(libc.strcpy, l, dest, src, size),
81
# lambda: helpers.spawniis(newlib.strcpy, l, dest, src, size)
84
lambda: helpers.spawniis(helpers.bounce, l, dest, src, size),
85
lambda: helpers.spawniis(libc.strlen, l, src, src, size),
86
lambda: helpers.spawniis(glibc.strlen, l, src, src, size),
87
lambda: helpers.spawniis(bionic.strlen, l, src, src, size),
88
lambda: helpers.spawniis(newlib.strlen, l, src, src, size),
91
results = [size, l] + [run(x) for x in tests]
92
print '\t'.join('%s' % x for x in results)