Hi, Avi,
Personally, I think that's a super intriguing problem--maybe because I am an academic. Performance prediction has been proposed in many domains, and I think it can be particularly useful for cloud. Suppose you need to replicate an enclaved application to one or multiple hosts, how soon do you expect one of the replicas to complete? When can you expect the resources to be reclaimable, these are all useful questions from scalability (elasticity) or fault tolerance perspective.
However, looking from a pragmatic side, I would say that it can be difficult to come up with an accurate for a nontrivial workload. The main issue is that there are too many factors to consider when it comes to enclave performance. You have the nondeterminism inside the program like user inputs, randomness, and thread interleaving. Outside the enclaves you have microarchitecture-level interference, system call latencies, scheduling and paging decisions---When ever you have a program, the difficulty of predicting it inside the enclave(s) will be at least higher than predicting it outside the enclave(s). And you also have the problem that you may have to re-train the model frequently to adapt to system changes. Even all those are possible, you need to ask yourself whether it's worthwhile to spend CPU/GPU/TPU for these kinds of prediction. It's a lot.
Anyhow, if you really need to do this, my suggestion is to start a testbed where you can automatically run Graphene against various inputs and system parameters to generate the ground truth. You should also collect samples of performance counters from the CPUs. In addition, using fuzzing or symbolic execution can help you increase your coverage to reduce the chance of overfitting. That's pretty much all I can think of right now.
Good luck on your path of research. If you are interested, please feel free to reach out to us or me personally for any follow-up question/discussion.
Thanks!
Chia-Che