2024-1-11讨论班
Contextual Dispatch for Function Specialization
OOPSLA’20
JIT对函数的优化策略是根据上下文来决定的,以R为例
- 需要在函数调用之前编译器插入类型检查代码
- 运行时如果发现参数类型变了就trigger recompiling
- 根据最近的调用删除一些参数的类型检查(如果用不到)以加速
缺点:
- 综合多次调用可能不是最优的优化
- deoptimize/recompile的过程比较花时间
方法:
- 空间换时间,记录context->code version表,call函数需要查表
- Context记录什么信息……
- 对Context的可能值建立偏序(因为同一个context可能有多个次优化版本)关系,每次从表里找到>=当前ctx的最小的ctx’。若ctx’大于ctx,取ctx’的子节点,取其优化规则的并集重新编译然后插进来,若满了就随机逐出一个
Comment:
- 没说内存占用
- 我感觉这个工作有点捞
WaVe: a verifiably secure WebAssembly sandboxing runtime
S&P’23
主要讨论wasm的安全性
内存隔离:每个程序都有一块独立的区域
- 总内存12G,规范要求从4G地址开始,总可用空间不超过4G,前后至少8G是guard page(可能motivated by±int32)
WebAssembly System Interface(WASI)的挑战:
- 缺乏完备的WASI规范
- 需要保证资源隔离
- 内存隔离
- 文件系统隔离
- 网络隔离(说constraint更适合一定)
例如对于一个删除文件夹的API
- 需要验证path字符串的地址是否在合法内存内
- 需要验证路径是否在根目录内
- 调用POSIX中的对应函数
WaVe:一个可验证WASI安全的Wasm Runtime
静态扫描WASI(实验用的是他们自己实现的)函数中的Effect,包括
- 内存操作/文件操作/网络操作(共7种)
- 对每种Effect有检验规则,静态检查
Evaluation:
- 通过Fuzz验证正确性
- AFL
- 通过QuickCheck验证pre-post-condition
- 随机生成syscall差分测试
- 和wasmtime比较运行时性能【非静态检查的性能,没啥意义的测试】
Contribution主要在于给出了一个WASI实现的标准/流程,可以仿照他们的工作做个验证器,然后给定验证条件来实现需要的API