49fb8a8603c337ea9ee273d6026254154144d602
[barrelfish] / tools / harness / tests / xeonphi.py
1 ##########################################################################
2 # Copyright (c) 2009, ETH Zurich.
3 # All rights reserved.
4 #
5 # This file is distributed under the terms in the attached LICENSE file.
6 # If you do not find this file, copies can be found by writing to:
7 # ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
8 ##########################################################################
9
10 # MAKEOPTS=-j12 ./scalebench.py -m xeon_phi_1 -B /mnt/local/" + machine.get_tftp_subdir() + "/barrelfish/build -t xeon_phi_spawn /mnt/local/" + machine.get_tftp_subdir() + "/barrelfish/ /mnt/local/" + machine.get_tftp_subdir() + "/harness-results/ -v
11
12
13 import re, os, sys, debug, shutil, datetime
14
15 import tests
16 from common import TestCommon
17 from barrelfish import BootModules
18 from results import PassFailResult
19
20 #module /" + machine.get_tftp_subdir() + "/x86_64/sbin/xeon_phi_mgr
21
22 @tests.add_test
23 class XeonPhi_Boot_Test(TestCommon):
24     '''Xeon Phi Spawn test'''
25     name = "xeon_phi_boot"
26     nphi = 2;
27
28     def set_xeon_phi_bootmodules(self, build_dir, machine):
29         fullpath = os.path.join(machine.get_tftp_dir(), 'menu.lst.k1om')
30         f = open(fullpath, 'w')
31
32         tftpdir = machine._operations.get_tftp_subdir()
33
34         f.write("title   Barrelfish \n")
35         f.write("root    (nd) \n")
36         f.write("kernel  /" + tftpdir + "/k1om/sbin/weever\n")
37         f.write("module  /" + tftpdir + "/k1om/sbin/cpu loglevel=3 \n")
38         f.write("module  /" + tftpdir + "/k1om/sbin/init\n")
39
40         # Domains spawned by init
41         f.write("module  /" + tftpdir + "/k1om/sbin/mem_serv\n")
42         f.write("module  /" + tftpdir + "/k1om/sbin/monitor\n")
43
44         # Special boot time domains spawned by monitor
45         f.write("module  /" + tftpdir + "/k1om/sbin/ramfsd boot \n")
46         f.write("module  /" + tftpdir + "/k1om/sbin/skb boot \n")
47         f.write("module  /" + tftpdir + "/k1om/sbin/xeon_phi boot \n")
48         f.write("module  /" + tftpdir + "/k1om/sbin/spawnd boot \n")
49         f.write("module  /" + tftpdir + "/k1om/sbin/startd boot \n")
50
51         # drivers
52         f.write("module  /" + tftpdir + "/k1om/sbin/corectrl auto \n")
53
54         # GDDR Memory we have 6GB on our Xeon PHi
55         f.write("mmap map 0x0000000000 0x00FEE00000 1 \n")
56         # memory hole for the APIC and the flash rom 
57         f.write("mmap map 0x00FEE00000 0x120000 3 \n")
58         f.write("mmap map 0x0100000000 0x80000000 1 \n")
59         # put additional modules herei
60         f.write("\n")
61         f.close()
62
63
64     def setup(self, build, machine, testdir) :
65         super(XeonPhi_Boot_Test, self).setup(build, machine, testdir)
66
67         # setup menu.lst.k1om
68         menulst = os.path.join(machine.get_tftp_dir(), "menu.lst.k1om")
69         if (os.path.isfile(menulst)) :
70             os.remove(menulst)
71         self.set_xeon_phi_bootmodules(build.build_dir, machine)
72 #        self.nphi = machine.get_xphi_ncards()
73         
74
75     def get_build_targets(self, build, machine):
76         targets = super(XeonPhi_Boot_Test, self).get_build_targets(build, machine)
77         targets.append('k1om/sbin/weever')
78         targets.append('k1om/sbin/cpu')
79         targets.append('k1om/sbin/init')
80         targets.append('k1om/sbin/mem_serv')
81         targets.append('k1om/sbin/monitor')
82         targets.append('k1om/sbin/ramfsd')
83         targets.append('k1om/sbin/xeon_phi')
84         targets.append('k1om/sbin/spawnd')
85         targets.append("k1om/sbin/skb")
86         targets.append('k1om/sbin/startd')
87         targets.append('k1om/sbin/corectrl')
88         return targets
89
90     
91
92
93     def cleanup(self, machine):
94         # remove the xeon phi image directory
95         menulst = os.path.join(machine.get_tftp_dir(), "menu.lst.k1om")
96         if (os.path.isfile(menulst)) :
97             os.remove(menulst)
98         super(XeonPhi_Boot_Test, self).cleanup(machine)        
99
100     def get_modules(self, build, machine):
101         modules = super(XeonPhi_Boot_Test, self).get_modules(build, machine)
102         tftpdir = machine._operations.get_tftp_subdir()
103         modules.add_module("xeon_phi_mgr", [""])
104         modules.add_module("xeon_phi", ["auto", 
105                                         "--tftp=tftp://10.110.4.4:69",
106                                         "--modlist=/" + tftpdir + "/menu.lst.k1om"])
107         modules.add_module("e1000_net_sockets_server", ["auto"])
108         modules.add_module("dma_mgr", [""])
109
110         return modules
111
112     def get_finish_string(self):
113         return "Xeon Phi operational: xeon_phi." + str(self.nphi - 1) + ".ready"
114
115     def boot(self, *args):
116         super(XeonPhi_Boot_Test, self).boot(*args)
117 #        self.set_timeout(NFS_TIMEOUT)
118
119     def process_data(self, testdir, rawiter):
120         # the test passed iff the last line is the finish string
121         print "PROCESS DATA"
122         passed=False
123         for line in rawiter:
124             m = re.search("Xeon Phi operational: xeon_phi." + str(self.nphi - 1) + ".ready", line)
125             if m:
126                 passed=True
127                 
128         return PassFailResult(passed)