SmartIO: Device sharing and memory disaggregation in PCIe clusters using non-transparent bridging