| 1 | Performance data |
| 2 | |
| 3 | We have gathered performance data of two types of ABAC scenario. |
| 4 | The first is the daisychaining of a large answer proof from a |
| 5 | similarly sized ruleset. The second is the searching of a proof |
| 6 | from a noisy ruleset. |
| 7 | |
| 8 | ==> daisychain <== |
| 9 | |
| 10 | Many cascading Likes-rules and their matching principal credentials are |
| 11 | generated: |
| 12 | |
| 13 | John0.likes <-John0 |
| 14 | John1.likes <-John0 |
| 15 | John2.likes <-John1 |
| 16 | John3.likes <-John2 |
| 17 | ... |
| 18 | JohnMax.likes <-JohnMax-1 |
| 19 | |
| 20 | Following graph shows the the time needed to load both attribute |
| 21 | credentials and principal certificates ((2*Max)+2) into the YAP prolog |
| 22 | db. The Y axis is the total time in milliseconds. The X axis is the |
| 23 | number of credentials that are in the YAP backend db. |
| 24 | |
| 25 | XXX |
| 26 | |
| 27 | |
| 28 | A valid query in the form of JohnMax.likes <-?-John0 is issued multiple |
| 29 | times. The first query's time is collected and then subsequent 10 queries |
| 30 | are collected and an average is taken. Next graph shows these lines. The |
| 31 | X axis is the query time in microseconds and the Y axis is number of |
| 32 | credentials in the YAP backend db. |
| 33 | |
| 34 | XXX |
| 35 | |
| 36 | An invalid query in the form of John0.likes <-?-JohnMax is issued |
| 37 | multiple times. The first query's time is collected and then subsequent |
| 38 | 10 queries are collected and an average is taken. Next graph shows these |
| 39 | lines. The X axis is the query time in microseconds and the Y axis is |
| 40 | number of credentials in the YAP backend db. |
| 41 | |
| 42 | XXX |
| 43 | |
| 44 | |
| 45 | ==> haystack <== |
| 46 | |
| 47 | The core credential setup is borrowed from the |
| 48 | Ralphs' fruitprice and shopper's eating preference RT2 example, |
| 49 | |
| 50 | Mary.what2eat <- Ralphs.fruitprice(P:[.. 2.00]) |
| 51 | Bob.what2eat <- Ralphs.fruitprice(P:[1.00 .. 5.00]) |
| 52 | Ralphs.fruitprice(1.50) <- 'apple' |
| 53 | Ralphs.fruitprice(1.50) <- 'kiwi' |
| 54 | Ralphs.fruitprice(2.50) <- 'black rasberry' |
| 55 | Ralphs.fruitprice(0.50) <- 'navel orange' |
| 56 | |
| 57 | Noises are introduced by adding the rules about bananas |
| 58 | and Johns. |
| 59 | |
| 60 | Ralphs.fruitprice(1.00) <- 'banana1' |
| 61 | Ralphs.fruitprice(2.00) <- 'banana2' |
| 62 | .. |
| 63 | Ralphs.fruitprice(Max.00) <- bananaMax |
| 64 | |
| 65 | John1.what2eat <- Ralphs.fruitprice(P:[1.00 .. 5.00]) |
| 66 | John2.what2eat <- Ralphs.fruitprice(P:[1.00 .. 5.00]) |
| 67 | .. |
| 68 | JohnMAX.what2eat <- Ralphs.fruitprice(P:[1.00 .. 5.00]) |
| 69 | |
| 70 | Following graph shows the the time needed to load both attribute |
| 71 | credentials and principal certificates ((3*Max)+9) into the YAP prolog |
| 72 | db. The Y axis is the total time in milliseconds. The X axis is the |
| 73 | number of credentials that are in the YAP backend db. |
| 74 | |
| 75 | XXX |
| 76 | |
| 77 | A valid query, Mary.what2eat<-?-'navel orange', is issued multiple |
| 78 | times. The returning answer proof is, |
| 79 | Mary.what2eat <- pRalphs.fruitprice(P:[..2.000000]) |
| 80 | Ralphs.fruitprice(0.50) <- 'navel orange'. |
| 81 | The first query's time is collected and the subsequent 20 queries |
| 82 | are collected and averaged. Next graph shows these lines. The X |
| 83 | axis is the query time in |
| 84 | microseconds and the Y axis is number of credentials in the YAP |
| 85 | backend db. |
| 86 | |
| 87 | XXX |
| 88 | |
| 89 | An invalid query in the form of Bob.what2eat<-?-'navel orange' |
| 90 | is issued multiple times. The first query's time is collected and |
| 91 | then subsequent 20 queries are collected and averaged. Next graph |
| 92 | shows these lines. The X axis is the query time in microseconds |
| 93 | and the Y axis is number of credentialsi in the YAP backend db. |
| 94 | |
| 95 | XXX |
| 96 | |