|
16 | 16 |
|
17 | 17 | package ai.philterd.phileas.benchmark;
|
18 | 18 |
|
| 19 | +import com.google.gson.Gson; |
| 20 | + |
| 21 | +import java.util.HashMap; |
| 22 | +import java.util.LinkedList; |
19 | 23 | import java.util.List;
|
| 24 | +import java.util.Map; |
20 | 25 |
|
21 | 26 | /**
|
22 | 27 | * Run benchmark workloads for Phileas PII engine.
|
23 | 28 | */
|
24 | 29 | public class Main {
|
25 | 30 |
|
26 | 31 | public static void main(String[] args) throws Exception {
|
| 32 | + |
27 | 33 | // show usage statement if needed
|
28 |
| - if (args.length != 4) { |
29 |
| - System.out.println("Usage: java ai.philterd.phileas.benchmark.Main <document> <redactor> <repetitions> <workload_millis>"); |
| 34 | + if (args.length != 4 && args.length != 5) { |
| 35 | + System.out.println("Usage: java ai.philterd.phileas.benchmark.Main <document> <redactor> <repetitions> <workload_millis> <output_format>"); |
30 | 36 | throw new IllegalArgumentException("Invalid arguments");
|
31 | 37 | }
|
32 | 38 |
|
33 | 39 | // read arguments
|
34 |
| - String arg_document = args[0]; |
35 |
| - String arg_redactor = args[1]; |
36 |
| - int repetitions = Integer.parseInt(args[2]); |
37 |
| - int workload_millis = Integer.parseInt(args[3]); |
| 40 | + final String arg_document = args[0]; |
| 41 | + final String arg_redactor = args[1]; |
| 42 | + final int repetitions = Integer.parseInt(args[2]); |
| 43 | + final int workload_millis = Integer.parseInt(args[3]); |
| 44 | + |
| 45 | + String arg_format = "sysout"; |
| 46 | + if(args.length == 5) { |
| 47 | + arg_format = args[4]; |
| 48 | + } |
38 | 49 |
|
39 | 50 | // create redactor based on Phileas PII engine
|
40 |
| - Redactor redactor = new Redactor(arg_redactor); |
| 51 | + final Redactor redactor = new Redactor(arg_redactor); |
| 52 | + |
| 53 | + final List<Result> results = new LinkedList<>(); |
41 | 54 |
|
42 | 55 | // repeatedly redact documents and print results
|
43 |
| - List<String> documents = "all".equals(arg_document) ? Documents.keys : List.of(arg_document); |
44 |
| - int[] value_lengths = {0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 768, 1024, 1280, 1536, 1792, 2048, 3072, 4096}; |
| 56 | + final List<String> documents = "all".equals(arg_document) ? Documents.keys : List.of(arg_document); |
| 57 | + final int[] value_lengths = {0, 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 768, 1024, 1280, 1536, 1792, 2048, 3072, 4096}; |
| 58 | + |
45 | 59 | for (int i = 0; i < repetitions; i++) {
|
46 |
| - for (String document : documents) { |
47 |
| - try { |
| 60 | + |
| 61 | + for (final String document : documents) { |
| 62 | + |
| 63 | + if (!arg_format.equals("json")) { |
48 | 64 | System.out.println("\n------------------------------------------------------------------------------------------");
|
49 | 65 | System.out.println("Using document: " + document);
|
50 | 66 | System.out.println("Using redactor: " + arg_redactor);
|
51 | 67 | System.out.println("Using workload_millis: " + workload_millis);
|
52 | 68 | System.out.println("\nstring_length,calls_per_sec");
|
53 |
| - for (int value_length : value_lengths) run_workload(workload_millis, redactor, Documents.get(document).substring(0, value_length)); |
54 |
| - } catch (StringIndexOutOfBoundsException e) { |
55 |
| - // do nothing, ignore |
56 | 69 | }
|
| 70 | + |
| 71 | + final Map<Integer, Long> calls = new HashMap<>(); |
| 72 | + |
| 73 | + for (int value_length : value_lengths) { |
| 74 | + |
| 75 | + if(Documents.get(document).length() >= value_length) { |
| 76 | + |
| 77 | + final String value = Documents.get(document).substring(0, value_length); |
| 78 | + final long calls_per_sec = run_workload(workload_millis, redactor, value); |
| 79 | + |
| 80 | + if (!arg_format.equals("json")) { |
| 81 | + System.out.println(value.length() + "," + calls_per_sec); |
| 82 | + } |
| 83 | + |
| 84 | + calls.put(value_length, calls_per_sec); |
| 85 | + |
| 86 | + } else { |
| 87 | + break; |
| 88 | + } |
| 89 | + |
| 90 | + } |
| 91 | + |
| 92 | + final Result result = new Result(); |
| 93 | + result.setWorkloadMillis(workload_millis); |
| 94 | + result.setRedactor(arg_redactor); |
| 95 | + result.setDocument(document); |
| 96 | + result.setCallsPerSecond(calls); |
| 97 | + |
| 98 | + results.add(result); |
| 99 | + |
57 | 100 | }
|
| 101 | + |
58 | 102 | }
|
| 103 | + |
| 104 | + if(arg_format.equals("json")) { |
| 105 | + final Gson gson = new Gson(); |
| 106 | + System.out.println(gson.toJson(results)); |
| 107 | + } |
| 108 | + |
59 | 109 | }
|
60 | 110 |
|
61 |
| - private static void run_workload(int millis, Redactor redactor, String value) throws Exception { |
62 |
| - long start = System.currentTimeMillis(); |
| 111 | + private static long run_workload(int millis, Redactor redactor, String value) throws Exception { |
| 112 | + |
| 113 | + final long start = System.currentTimeMillis(); |
63 | 114 | long calls = -1;
|
64 | 115 | while ((++calls % 100 != 0) || (System.currentTimeMillis() - start < millis)) redactor.filter(value);
|
65 |
| - long calls_per_sec = calls * 1000 / (System.currentTimeMillis() - start); |
66 |
| - System.out.println(value.length() + "," + calls_per_sec); |
| 116 | + |
| 117 | + return calls * 1000 / (System.currentTimeMillis() - start); |
| 118 | + |
67 | 119 | }
|
68 | 120 |
|
69 | 121 | }
|
0 commit comments