OLD | NEW |
1 DESIGN | 1 DESIGN |
2 ====== | 2 ====== |
3 | 3 |
4 | 4 |
5 Overview | 5 Overview |
6 -------- | 6 -------- |
7 Provides interactive dashboard for Skia performance data. | 7 Provides interactive dashboard for Skia performance data. |
8 | 8 |
9 Code Locations | 9 Code Locations |
10 -------------- | 10 -------------- |
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
189 | 189 |
190 $ mysql -h 173.194.104.24 -u root -p | 190 $ mysql -h 173.194.104.24 -u root -p |
191 | 191 |
192 | 192 |
193 mysql> use skia | 193 mysql> use skia |
194 | 194 |
195 mysql> show tables; | 195 mysql> show tables; |
196 | 196 |
197 Initial setup of the database, the users, and the tables: | 197 Initial setup of the database, the users, and the tables: |
198 | 198 |
| 199 * Create the database and set up permissions. Execute the following after |
| 200 you connect to a MySQL database (not necessary for SQLite). |
| 201 |
199 CREATE DATABASE skia; | 202 CREATE DATABASE skia; |
200 USE skia; | 203 USE skia; |
201 CREATE USER 'readonly'@'%' IDENTIFIED BY <password in valentine>; | 204 CREATE USER 'readonly'@'%' IDENTIFIED BY <password in valentine>; |
202 GRANT SELECT ON *.* TO 'readonly'@'%'; | 205 GRANT SELECT ON *.* TO 'readonly'@'%'; |
203 CREATE USER 'readwrite'@'%' IDENTIFIED BY <password in valentine>; | 206 CREATE USER 'readwrite'@'%' IDENTIFIED BY <password in valentine>; |
204 GRANT SELECT, DELETE, UPDATE, INSERT ON *.* TO 'readwrite'@'%'; | 207 GRANT SELECT, DELETE, UPDATE, INSERT ON *.* TO 'readwrite'@'%'; |
205 | 208 |
206 CREATE TABLE shortcuts ( | 209 * Create the versioned database tables. |
207 id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, | |
208 traces MEDIUMTEXT NOT NULL | |
209 ); | |
210 | 210 |
211 CREATE TABLE clusters ( | 211 We use the 'migrateDB' tool to keep the database in a well defined (versioned) |
212 id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, | 212 state. The 'db_conn_string' flag allows to specify the target database. |
213 ts BIGINT NOT NULL, | 213 By default it will try to connect to the production environment. |
214 hash TEXT NOT NULL, | 214 But for testing a local MySQL database can be provided. If it cannot |
215 regression FLOAT NOT NULL, | 215 connect to MySQL it will fall back to SQLite. |
216 cluster MEDIUMTEXT NOT NULL, | |
217 status TEXT NOT NULL, | |
218 message TEXT NOT NULL | |
219 ); | |
220 | 216 |
221 CREATE TABLE tries ( | 217 Bring the production database to the latest schema version: |
222 issue VARCHAR(255) NOT NULL PRIMARY KEY, | 218 |
223 lastUpdated BIGINT NOT NULL, | 219 $ migrateDB -logtostderr=true |
224 results LONGTEXT NOT NULL | 220 |
225 ); | 221 Bring a local database to the latest schema version: |
| 222 |
| 223 $ migrateDB -logtostderr=true -db_conn_string="root:%s@tcp(localhost:3306)/
skia?parseTime=true" |
| 224 |
| 225 Bring a local SQLite database to the latest schema version: |
| 226 |
| 227 $ migrateDB -logtostderr=true -db_conn_string="" |
| 228 |
226 | 229 |
227 Clustering | 230 Clustering |
228 ---------- | 231 ---------- |
229 | 232 |
230 The clustering is done by using k-means clustering over normalized Traces. The | 233 The clustering is done by using k-means clustering over normalized Traces. The |
231 Traces are normalized by filling in missing data points so that there is a | 234 Traces are normalized by filling in missing data points so that there is a |
232 data point for every commit, and then scaling the data to have a mean of 0.0 | 235 data point for every commit, and then scaling the data to have a mean of 0.0 |
233 and a standard deviation of 1.0. See the docs for ctrace.NewFullTrace(). | 236 and a standard deviation of 1.0. See the docs for ctrace.NewFullTrace(). |
234 | 237 |
235 The distance metric used is Euclidean distance between the traces. | 238 The distance metric used is Euclidean distance between the traces. |
(...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
405 config, os, etc.) and select exactly two configs from it to compare against in | 408 config, os, etc.) and select exactly two configs from it to compare against in |
406 the query (say, "8888" and "gpu"). We then organize the data to calculate the | 409 the query (say, "8888" and "gpu"). We then organize the data to calculate the |
407 ratio of the benches from the two choices in the criteria (vertical) where all | 410 ratio of the benches from the two choices in the criteria (vertical) where all |
408 other parameters are the same. For instance, we calculate the ratio of benches | 411 other parameters are the same. For instance, we calculate the ratio of benches |
409 in the "config" vertical from the following two traces: | 412 in the "config" vertical from the following two traces: |
410 | 413 |
411 x86_64:HD7770:ShuttleA:Win8:gradient_create_opaque_640_480:gpu | 414 x86_64:HD7770:ShuttleA:Win8:gradient_create_opaque_640_480:gpu |
412 x86_64:HD7770:ShuttleA:Win8:gradient_create_opaque_640_480:8888 | 415 x86_64:HD7770:ShuttleA:Win8:gradient_create_opaque_640_480:8888 |
413 | 416 |
414 and put the value into the cell in a table that has | 417 and put the value into the cell in a table that has |
415 _row_gradient_create_opaque_640_480_ and | 418 _row_gradient_create_opaque_640_480_ and |
416 column _x86_64:HD7770:ShuttleA:Win8_. Basically, the table row will be the | 419 column _x86_64:HD7770:ShuttleA:Win8_. Basically, the table row will be the |
417 "test" name, and the column will be the rest of the keys. The number of columns | 420 "test" name, and the column will be the rest of the keys. The number of columns |
418 will be the number of perf bots we run (20+ for now). | 421 will be the number of perf bots we run (20+ for now). |
419 | 422 |
420 The value will then tell us if the performance is better (<1) or worse (>1) for | 423 The value will then tell us if the performance is better (<1) or worse (>1) for |
421 gpu against 8888. We can then heatmap-color the table cells by their value | 424 gpu against 8888. We can then heatmap-color the table cells by their value |
422 ranges, to provide a visual way for users to identify the problems in cell | 425 ranges, to provide a visual way for users to identify the problems in cell |
423 groups. By sorting the rows with aggregated performance, users will be able to | 426 groups. By sorting the rows with aggregated performance, users will be able to |
424 pinpoint the benches with worst/best relative performance to look into. | 427 pinpoint the benches with worst/best relative performance to look into. |
425 | 428 |
(...skipping 24 matching lines...) Expand all Loading... |
450 | 453 |
451 But sysv init only handles starting and stopping a program once, so we use | 454 But sysv init only handles starting and stopping a program once, so we use |
452 Monit to monitor the application and restart it if it crashes. The config | 455 Monit to monitor the application and restart it if it crashes. The config |
453 is in: | 456 is in: |
454 | 457 |
455 /etc/monit/conf.d/perf | 458 /etc/monit/conf.d/perf |
456 | 459 |
457 Installation | 460 Installation |
458 ------------ | 461 ------------ |
459 See the README file. | 462 See the README file. |
OLD | NEW |