Whamcloud - gitweb
* Updated obdfilter-survey to drive non-local obdfilter/obdecho instances
[fs/lustre-release.git] / lustre-iokit / obdfilter-survey / README
1
2 Overview
3 --------
4
5 This survey script does sequential I/O with varying numbers of threads and
6 objects (files) by using lctl::test_brw to drive the echo_client connected
7 to local or remote obdfilter instances, or remote obdecho instances.
8
9 It can be used to characterise the performance of the following lustre
10 components.
11
12 1. The Stripe F/S.
13
14    Here the script directly exercises one or more instances of obdfilter.
15    They may be running on 1 or more nodes, e.g. when they are all attached
16    to the same multi-ported disk subsystem.
17
18    You need to tell the script all the names of the obdfilter instances.
19    These should be up and running already .  If some are on different
20    nodes, you need to specify their hostnames too (e.g. node1:ost1).
21
22    All the obdfilter instances are driven directly.  The script
23    automatically loads the obdecho module if required and creates one
24    instance of echo_client for each obdfilter instance.
25
26 2. The Network.
27
28    Here the script drives one or more instances of obdecho via instances of
29    echo_client running on 1 or more nodes.
30
31    You need to tell the script all the names of the echo_client instances.
32    These should already be up and running.  If some are on different nodes,
33    you need to specify their hostnames too (e.g. node1:ECHO_node1).
34    
35 3. The Stripe F/S over the Network.
36
37    Here the script drives one or more instances of obdfilter via instances
38    of echo_client running on 1 or more nodes.
39
40    As with (2), you need to tell the script all the names of the
41    echo_client instances, which should already be up and running.
42
43 Note that the script is _NOT_ scalable to 100s of nodes since it is only
44 intended to measure individual servers, not the scalability of the system
45 as a whole.
46
47    
48 Running
49 -------
50
51 The script must be customised according to the components under test and
52 where it should keep its working files.  Customisation variables are
53 described clearly at the start of the script.
54
55 If you are driving obdfilter instances directly, set the shell array
56 variable 'ost_names' to the names of the obdfilter instances and leave
57 'client_names' undefined.
58
59 If you are driving obdfilter or obdecho instances over the network, you
60 must instantiate the echo_clients yourself using lmc/lconf.  Set the shell
61 array variable 'client_names' to the names of the echo_client instances and
62 leave 'ost_names' undefined.
63
64 You can optionally prefix any name in 'ost_names' or 'client_names' with
65 the hostname that it is running on (e.g. remote_node:ost4) if your
66 obdfilters or echo_clients are running on more than one node.  In this
67 case, you need to ensure 'custom_remote_shell()' works on your cluster.
68
69 Use 'lctl device_list' to verify the obdfilter/echo_client instance names
70 e.g...
71
72 [root@ns9 root]# lctl device_list
73   0 UP confobd conf_ost3 OSD_ost3_ns9_UUID 1
74   1 UP obdfilter ost3 ost3_UUID 1
75   2 UP ost OSS OSS_UUID 1
76   3 AT confobd conf_ost12 OSD_ost12_ns9_UUID 1
77 [root@ns9 root]# 
78
79 ...here device 1 is an instance of obdfilter called 'ost3'.  To exercise it
80 directly, add 'ns9:ost3' to 'ost_names'.  If the script is only to be run
81 on node 'ns9' you could simply add 'ost3' to 'ost_names'.
82
83 When the script runs, it creates a number of working files and a pair of
84 result files.  All files start with the prefix given by ${rslt}.
85
86 ${rslt}_<date/time>.summary       same as stdout
87 ${rslt}_<date/time>.detail_tmp*   tmp files
88 ${rslt}_<date/time>.detail        collected tmp files for post-mortem
89
90 The script iterates over the given numbers of threads and objects
91 performing all the specified tests and checking that all test processes
92 completed successfully.
93
94 Note that the script does NOT clean up properly if it is aborted or if it
95 encounters an unrecoverable error.  In this case, manual cleanup may be
96 required, possibly including killing any running instances of 'lctl' (local
97 or remote), removing echo_client instances created by the script and
98 unloading obdecho.
99
100
101 Script output
102 -------------
103
104 The summary file and stdout contain lines like...
105
106 ost 8 sz 67108864K rsz 1024 obj    8 thr    8 write  613.54 [ 64.00, 82.00] 
107
108 ost 8          is the total number of OSTs under test.
109 sz 67108864K   is the total amount of data read or written (in K).
110 rsz 1024       is the record size (size of each echo_client I/O).
111 obj    8       is the total number of objects over all OSTs
112 thr    8       is the total number of threads over all OSTs and objects
113 write          is the test name.  If more tests have been specified they
114                all appear on the same line.
115 613.54         is the aggregate bandwidth over all OSTs measured by
116                dividing the total number of MB by the elapsed time.
117 [64.00, 82.00] are the minimum and maximum instantaneous bandwidths seen on
118                any individual OST.  
119
120 Note that although the numbers of threads and objects are specifed per-OST
121 in the customisation section of the script, results are reported aggregated
122 over all OSTs.
123
124
125 Visualising Results
126 -------------------
127
128 I've found it most useful to import the summary data (it's fixed width)
129 into Excel (or any graphing package) and graph bandwidth v. # threads for
130 varying numbers of concurrent regions.  This shows how the OSS performs for
131 a given number of concurrently accessed objects (i.e. files) with varying
132 numbers of I/Os in flight.  
133
134 It is also extremely useful to record average disk I/O sizes during each
135 test.  These numbers help find pathologies in file the file system block
136 allocator and the block device elevator.