Statistiques
| Branche: | Révision :

root / dfs_bench_seq_write_4GB.py @ d0677cdf

Historique | Voir | Annoter | Télécharger (7,43 ko)

1 d0677cdf Simon Delamare
#!/usr/bin/python
2 d0677cdf Simon Delamare
3 d0677cdf Simon Delamare
import sys
4 d0677cdf Simon Delamare
import tempfile
5 d0677cdf Simon Delamare
import time
6 d0677cdf Simon Delamare
from execo_g5k import *
7 d0677cdf Simon Delamare
from execo import *
8 d0677cdf Simon Delamare
9 d0677cdf Simon Delamare
OUTDIR="/home/dponsard/DFS_EXECO/RESULT"
10 d0677cdf Simon Delamare
11 d0677cdf Simon Delamare
12 d0677cdf Simon Delamare
def usage():
13 d0677cdf Simon Delamare
  print "Usage %s job site dfs_type" % sys.argv[0]
14 d0677cdf Simon Delamare
  sys.exit(1)
15 d0677cdf Simon Delamare
16 d0677cdf Simon Delamare
17 d0677cdf Simon Delamare
def start_benchmark(client_nodes,bench_size=4096):
18 d0677cdf Simon Delamare
  prepare=Remote("sync && echo 3 > /proc/sys/vm/drop_caches && echo 3 > /proc/sys/vm/drop_caches", client_nodes, connexion_params={'user': 'root'})
19 d0677cdf Simon Delamare
  bench=Remote("TMP_DIR=`mktemp -d /data/BENCH.XXXX` ;dd if=/dev/zero of=${TMP_DIR}/write.dd bs=1M count=%d; sync" % bench_size, client_nodes, connexion_params={'user': 'root'})
20 d0677cdf Simon Delamare
21 d0677cdf Simon Delamare
  prepare.run()
22 d0677cdf Simon Delamare
  bench.run()
23 d0677cdf Simon Delamare
24 d0677cdf Simon Delamare
  cumul_speed = 0
25 d0677cdf Simon Delamare
  for p in bench.processes():
26 d0677cdf Simon Delamare
    cumul_speed += bench_size/float(p.end_date()-p.start_date())
27 d0677cdf Simon Delamare
28 d0677cdf Simon Delamare
  print "Benchmark speed is "+str(cumul_speed)
29 d0677cdf Simon Delamare
30 d0677cdf Simon Delamare
  print "Benchmark output"
31 d0677cdf Simon Delamare
  for p in bench.processes():
32 d0677cdf Simon Delamare
    print p.stdout() 
33 d0677cdf Simon Delamare
34 d0677cdf Simon Delamare
  return cumul_speed
35 d0677cdf Simon Delamare
36 d0677cdf Simon Delamare
37 d0677cdf Simon Delamare
def create_dfs5k_conf(dfs_type,site,job,master_node,client_nodes,data_nodes):
38 d0677cdf Simon Delamare
  try:
39 d0677cdf Simon Delamare
    f=tempfile.NamedTemporaryFile(prefix="dfs5k_%s_%s_%s-" % (dfs_type,site,job), delete=False)
40 d0677cdf Simon Delamare
  except Exception as e: 
41 d0677cdf Simon Delamare
    print "Failed to open /tmp/dfs5k.conf"
42 d0677cdf Simon Delamare
    print e
43 d0677cdf Simon Delamare
    sys.exit(1)   
44 d0677cdf Simon Delamare
   
45 d0677cdf Simon Delamare
  if dfs_type == "ceph" or dfs_type=="lustre":
46 d0677cdf Simon Delamare
    f.write("""name: DFS5k
47 d0677cdf Simon Delamare
options:
48 d0677cdf Simon Delamare
dataDir: /tmp
49 d0677cdf Simon Delamare
master: root@%s
50 d0677cdf Simon Delamare
clients:
51 d0677cdf Simon Delamare
""" % master_node.address)
52 d0677cdf Simon Delamare
53 d0677cdf Simon Delamare
    for client_node in client_nodes:
54 d0677cdf Simon Delamare
      f.write("  root@%s\n" % client_node.address)
55 d0677cdf Simon Delamare
56 d0677cdf Simon Delamare
    f.write("dataNodes:\n")
57 d0677cdf Simon Delamare
    for data_node in data_nodes:
58 d0677cdf Simon Delamare
      f.write("  root@%s\n" % data_node.address)
59 d0677cdf Simon Delamare
  
60 d0677cdf Simon Delamare
  elif dfs_type == "glusterfs":
61 d0677cdf Simon Delamare
    f.write("""name: DFS5k
62 d0677cdf Simon Delamare
options: stripe %d
63 d0677cdf Simon Delamare
master: root@%s
64 d0677cdf Simon Delamare
clients:
65 d0677cdf Simon Delamare
""" % (len(data_nodes),master_node.address))
66 d0677cdf Simon Delamare
67 d0677cdf Simon Delamare
    for client_node in client_nodes:
68 d0677cdf Simon Delamare
      f.write("  root@%s\n" % client_node.address)
69 d0677cdf Simon Delamare
70 d0677cdf Simon Delamare
    f.write("dataNodes:\n")
71 d0677cdf Simon Delamare
    for data_node in data_nodes:
72 d0677cdf Simon Delamare
      f.write("  root@%s:/tmp\n" % data_node.address)
73 d0677cdf Simon Delamare
  
74 d0677cdf Simon Delamare
  else:
75 d0677cdf Simon Delamare
    print "Error: Unsupported dfs type %s" % dfs_type
76 d0677cdf Simon Delamare
    sys.exit(1)
77 d0677cdf Simon Delamare
78 d0677cdf Simon Delamare
  f.close() 
79 d0677cdf Simon Delamare
  return f
80 d0677cdf Simon Delamare
81 d0677cdf Simon Delamare
82 d0677cdf Simon Delamare
def start_localfs_bench(site,job,node,bench_size=4096):
83 d0677cdf Simon Delamare
  prepare=SshProcess("sync && echo 3 > /proc/sys/vm/drop_caches && echo 3 > /proc/sys/vm/drop_caches", node, connexion_params={'user': 'root'})
84 d0677cdf Simon Delamare
  bench=SshProcess("dd if=/dev/zero of=/tmp/write.dd bs=1M count=%d && sync" % bench_size, node, connexion_params={'user': 'root'})
85 d0677cdf Simon Delamare
  prepare.run()
86 d0677cdf Simon Delamare
  start=time.time()
87 d0677cdf Simon Delamare
  bench.run()
88 d0677cdf Simon Delamare
  end=time.time()
89 d0677cdf Simon Delamare
  print "Benchmark output"
90 d0677cdf Simon Delamare
  print bench.stdout()
91 d0677cdf Simon Delamare
  print "Cleanning /tmp"
92 d0677cdf Simon Delamare
  clean=SshProcess("rm -rf /tmp/write.dd",node, connexion_params={'user': 'root'})
93 d0677cdf Simon Delamare
  clean.run()
94 d0677cdf Simon Delamare
  speed = bench_size/float(end-start)
95 d0677cdf Simon Delamare
  print "Benchmark speed is "+str(speed)
96 d0677cdf Simon Delamare
  return speed
97 d0677cdf Simon Delamare
98 d0677cdf Simon Delamare
def clean_nodes_before(dfs_type,site,dfs_conf,nodes):
99 d0677cdf Simon Delamare
  print "Cleaning /data"
100 d0677cdf Simon Delamare
  Remote("rm -rf /data/* 2&>/dev/null", nodes, connexion_params={'user': 'root'}).run()
101 d0677cdf Simon Delamare
  
102 d0677cdf Simon Delamare
  print "Umounting DFS5k"
103 d0677cdf Simon Delamare
  print "Umounting DFS5k"
104 d0677cdf Simon Delamare
  SshProcess("dfs5k -d -a umount -s %s -f %s" % (dfs_type,dfs_conf.name) , Host(site)).run()
105 d0677cdf Simon Delamare
  
106 d0677cdf Simon Delamare
  if dfs_type != "lustre":
107 d0677cdf Simon Delamare
        print "UnDeploying DFS5k" 
108 d0677cdf Simon Delamare
        SshProcess("dfs5k -d -a undeploy -s %s -f %s" % (dfs_type,dfs_conf.name) , Host(site)).run()
109 d0677cdf Simon Delamare
  else:
110 d0677cdf Simon Delamare
        print "UnDeploying DFS5k" 
111 d0677cdf Simon Delamare
        p=SshProcess("dfs5k -d -a undeploy -s %s -f %s" % (dfs_type,dfs_conf.name) , Host(site), close_stdin=False).start()
112 d0677cdf Simon Delamare
        p._process.stdin.write("y\n")
113 d0677cdf Simon Delamare
        p._process.stdin.flush()
114 d0677cdf Simon Delamare
        p.wait()
115 d0677cdf Simon Delamare
116 d0677cdf Simon Delamare
  print "Cleaning /tmp and /data"
117 d0677cdf Simon Delamare
  Remote("rm -rf /tmp/* /data/* 2&>/dev/null", nodes, connexion_params={'user': 'root'}).run()
118 d0677cdf Simon Delamare
  return
119 d0677cdf Simon Delamare
120 d0677cdf Simon Delamare
def clean_nodes_after(dfs_type,site,dfs_conf,nodes):
121 d0677cdf Simon Delamare
  print "Cleaning /data"
122 d0677cdf Simon Delamare
  Remote("rm -rf /data/* 2&>/dev/null", nodes, connexion_params={'user': 'root'}).run()
123 d0677cdf Simon Delamare
124 d0677cdf Simon Delamare
  print "Umounting DFS5k"
125 d0677cdf Simon Delamare
  SshProcess("dfs5k -d -a umount -s %s -f %s" % (dfs_type,dfs_conf.name) , Host(site)).run()
126 d0677cdf Simon Delamare
127 d0677cdf Simon Delamare
  print "UnDeploying DFS5k"
128 d0677cdf Simon Delamare
  SshProcess("dfs5k -d -a undeploy -s %s -f %s" % (dfs_type,dfs_conf.name) , Host(site)).run()
129 d0677cdf Simon Delamare
130 d0677cdf Simon Delamare
  print "Cleaning /tmp and /data"
131 d0677cdf Simon Delamare
  Remote("rm -rf /tmp/* /data/* 2&>/dev/null", nodes, connexion_params={'user': 'root'}).run()
132 d0677cdf Simon Delamare
  return
133 d0677cdf Simon Delamare
134 d0677cdf Simon Delamare
135 d0677cdf Simon Delamare
136 d0677cdf Simon Delamare
def start_dfs_bench(dfs_type,site,job,master_node,client_nodes,data_nodes):
137 d0677cdf Simon Delamare
138 d0677cdf Simon Delamare
  f = create_dfs5k_conf(dfs_type,site,job,master_node,client_nodes,data_nodes)
139 d0677cdf Simon Delamare
  print "Copying dfs5k configuration file" 
140 d0677cdf Simon Delamare
  Process("scp %s %s:/tmp/" % (f.name,site)).run()
141 d0677cdf Simon Delamare
  
142 d0677cdf Simon Delamare
  print "Copying SSH key to master node" 
143 d0677cdf Simon Delamare
  SshProcess("scp ~/.ssh/id_rsa root@%s:.ssh/" % master_node.address, Host(site)).run()
144 d0677cdf Simon Delamare
 
145 d0677cdf Simon Delamare
  clean_nodes_before(dfs_type, site, f, data_nodes+client_nodes+[master_node])
146 d0677cdf Simon Delamare
147 d0677cdf Simon Delamare
  print "Deploying DFS5k" 
148 d0677cdf Simon Delamare
  SshProcess("dfs5k -d -a deploy -s %s -f %s" % (dfs_type,f.name) , Host(site)).run()
149 d0677cdf Simon Delamare
150 d0677cdf Simon Delamare
  print "Mounting DFS5k" 
151 d0677cdf Simon Delamare
  print "Deploying DFS5k"
152 d0677cdf Simon Delamare
  SshProcess("dfs5k -d -a mount -s %s -f %s" % (dfs_type,f.name) , Host(site)).run()
153 d0677cdf Simon Delamare
  
154 d0677cdf Simon Delamare
  print "Performing benchmark %s" % dfs_type
155 d0677cdf Simon Delamare
  print "Master node is %s" % master_node
156 d0677cdf Simon Delamare
  print "## %d Data nodes are %s" % (len(data_nodes), data_nodes)
157 d0677cdf Simon Delamare
  print "## %d Client nodes are %s" % (len(client_nodes), client_nodes)
158 d0677cdf Simon Delamare
  
159 d0677cdf Simon Delamare
  speed = start_benchmark(client_nodes)
160 d0677cdf Simon Delamare
  
161 d0677cdf Simon Delamare
  clean_nodes_after(dfs_type, site, f, data_nodes+client_nodes+[master_node])
162 d0677cdf Simon Delamare
 
163 d0677cdf Simon Delamare
  return speed
164 d0677cdf Simon Delamare
165 d0677cdf Simon Delamare
166 d0677cdf Simon Delamare
def prepare_nodes(job,site,dfs_type):
167 d0677cdf Simon Delamare
  nodes = []
168 d0677cdf Simon Delamare
  try:
169 d0677cdf Simon Delamare
    if get_oar_job_info(job,site)["state"]!="Running":
170 d0677cdf Simon Delamare
      print "Cannot deploy on job %s @ %s, job not started" % (job,site)
171 d0677cdf Simon Delamare
    else: 
172 d0677cdf Simon Delamare
      nodes += get_oar_job_nodes(job,site)
173 d0677cdf Simon Delamare
  except Exception as e:
174 d0677cdf Simon Delamare
    print "Cannot get info on job %s @ %s" % (job,site)
175 d0677cdf Simon Delamare
    print e
176 d0677cdf Simon Delamare
  try:
177 d0677cdf Simon Delamare
    print "Deploying on %s" % nodes
178 d0677cdf Simon Delamare
    if dfs_type=="lustre":
179 d0677cdf Simon Delamare
      print "Deploying on %s  environment centos-x64-lustre for %s" % (nodes, dfs_type)
180 d0677cdf Simon Delamare
      (ok_nodes, failed_nodes) = deploy(Deployment(nodes,env_name="centos-x64-lustre"), node_connexion_params={'user': 'root'})
181 d0677cdf Simon Delamare
    else:
182 d0677cdf Simon Delamare
      print "Deploying on %s  environment squeeze-x64-nfs for %s" % (nodes, dfs_type)
183 d0677cdf Simon Delamare
      (ok_nodes, failed_nodes) = deploy(Deployment(nodes,env_name="squeeze-x64-nfs"))
184 d0677cdf Simon Delamare
    print "Deployed on %s " % ok_nodes
185 d0677cdf Simon Delamare
186 d0677cdf Simon Delamare
  except Exception as e:
187 d0677cdf Simon Delamare
    print "Failed to deploy"
188 d0677cdf Simon Delamare
    print e
189 d0677cdf Simon Delamare
    raise e
190 d0677cdf Simon Delamare
    sys.exit(1)
191 d0677cdf Simon Delamare
  else: 
192 d0677cdf Simon Delamare
    #print "Installing iozone"
193 d0677cdf Simon Delamare
    #Remote("apt-get update && apt-get install -y iozone3",ok_nodes, connexion_params={'user': 'root'}).run()
194 d0677cdf Simon Delamare
    return list(ok_nodes)
195 d0677cdf Simon Delamare
196 d0677cdf Simon Delamare
if len(sys.argv) < 4:
197 d0677cdf Simon Delamare
  usage()
198 d0677cdf Simon Delamare
199 d0677cdf Simon Delamare
job = int(sys.argv[1])
200 d0677cdf Simon Delamare
site = sys.argv[2]
201 d0677cdf Simon Delamare
dfs_type= sys.argv[3]
202 d0677cdf Simon Delamare
203 d0677cdf Simon Delamare
f_result = open(OUTDIR+"/results_%s_%s_%s.txt" % (job,site,dfs_type),"w")
204 d0677cdf Simon Delamare
205 d0677cdf Simon Delamare
nodes=prepare_nodes(job,site,dfs_type)
206 d0677cdf Simon Delamare
#nodes=["A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P"]
207 d0677cdf Simon Delamare
print nodes
208 d0677cdf Simon Delamare
209 d0677cdf Simon Delamare
master_node=nodes[0]
210 d0677cdf Simon Delamare
211 d0677cdf Simon Delamare
#Write first line of the table
212 d0677cdf Simon Delamare
line="X"
213 d0677cdf Simon Delamare
for i in range(2,len(nodes)-1):
214 d0677cdf Simon Delamare
  line+=" %d" % i
215 d0677cdf Simon Delamare
line+="\n"
216 d0677cdf Simon Delamare
f_result.write(line)
217 d0677cdf Simon Delamare
218 d0677cdf Simon Delamare
print "#### START LOCALFS BENCH #####"
219 d0677cdf Simon Delamare
speed = start_localfs_bench(site,job,master_node)
220 d0677cdf Simon Delamare
line="0"
221 d0677cdf Simon Delamare
for i in range(2,len(nodes)-1):
222 d0677cdf Simon Delamare
  line+=" %d" % int(speed)
223 d0677cdf Simon Delamare
line+="\n"
224 d0677cdf Simon Delamare
f_result.write(line)
225 d0677cdf Simon Delamare
226 d0677cdf Simon Delamare
for n_clients in [1,2,4,6,8,10,12,14,16,18,20]:
227 d0677cdf Simon Delamare
228 d0677cdf Simon Delamare
  f_result.write("%d" % n_clients)
229 d0677cdf Simon Delamare
230 d0677cdf Simon Delamare
  available_nodes = nodes[1:]
231 d0677cdf Simon Delamare
232 d0677cdf Simon Delamare
  client_nodes=available_nodes[:n_clients]
233 d0677cdf Simon Delamare
  available_nodes=available_nodes[n_clients:]
234 d0677cdf Simon Delamare
235 d0677cdf Simon Delamare
  for n_datanodes in range(2,len(available_nodes)+1):
236 d0677cdf Simon Delamare
    data_nodes=available_nodes[:n_datanodes]
237 d0677cdf Simon Delamare
238 d0677cdf Simon Delamare
    print "\n\n"
239 d0677cdf Simon Delamare
    print "#### START DFS BENCH #####"
240 d0677cdf Simon Delamare
    print master_node,client_nodes,data_nodes
241 d0677cdf Simon Delamare
    print "#### ############### #####"
242 d0677cdf Simon Delamare
243 d0677cdf Simon Delamare
    speed = start_dfs_bench(dfs_type,site,job,master_node,client_nodes,data_nodes)
244 d0677cdf Simon Delamare
    f_result.write(" %d" % int(speed))
245 d0677cdf Simon Delamare
    f_result.flush()
246 d0677cdf Simon Delamare
247 d0677cdf Simon Delamare
248 d0677cdf Simon Delamare
  f_result.write("\n")
249 d0677cdf Simon Delamare
  f_result.flush()
250 d0677cdf Simon Delamare
251 d0677cdf Simon Delamare
f_result.write("\n\n\n")
252 d0677cdf Simon Delamare
f_result.write(str(nodes))
253 d0677cdf Simon Delamare
f_result.close()