Video: Rio: a system solution for sharing i/o between mobile systems

A user nowadays owns a variety of mobile systems, including smartphones, tablets, smart glasses, and smart watches, each equipped with a plethora of I/O devices, such as cameras, speakers, microphones, sensors, and cellular modems. There are many interesting use cases in which an application running on one mobile system accesses I/O on another system, for three fundamental reasons. (i) Mobile systems can be in different physical locations or orientations. For example, one can control a smartphone's high-resolution camera from a tablet camera application to more easily capture a self-portrait. (ii) Mobile systems can serve different users. For example, one can a play music for another user if one's smartphone can access the other device's speaker. (iii) Certain mobile systems have unique I/O devices due to their distinct form factor and targeted use cases. For example, a user can make a phone call from her tablet using the modem and SIM card in her smartphone.Solutions exist for sharing I/O devices, e.g., for camera [1], speaker [2], and modem (for messaging) [3]. However, these solutions have three limitations. (i) They do not support unmodified applications. (ii) They do not expose all the functionality of an I/O device for sharing. (iii) They are I/O class-specific, requiring significant engineering effort to support new I/O devices.We demonstrate Rio (Remote I/O), an I/O sharing solution for mobile systems that overcomes all three aforementioned limitations. Rio adopts a split-stack I/O sharing model, in which the I/O stack is split between the two mobile systems at a certain boundary. All communications that cross this boundary are intercepted on the mobile system hosting the application and forwarded to the mobile system with the I/O device, where they are served by the rest of the I/O stack. Rio uses device files as its boundary of choice. Device files are used in Unix-like OSes, such as Android and iOS, to abstract many classes of I/O devices, providing an I/O class-agnostic boundary. The device file boundary supports I/O sharing for unmodified applications, as it is transparent to the application layer. It also exposes the full functionality of each I/O device to other mobile systems by allowing processes in one system to directly communicate with the device drivers in another. Rio is not the first system to exploit the device file boundary; our previous work, Paradice [5], uses device files as the boundary for I/O virtualization inside a single system. However, Rio faces a different set of challenges regarding how to properly exploit this boundary, as explained in the full paper [6].In this demo, we use a prototype implementation of Rio for Android systems. Our implementation supports four important I/O classes: camera, audio devices such as speaker and microphone, sensors such as accelerometer, and cellular modem (for phone calls and SMS). It consists of about 7100 lines of code, of which less than 500 are specific to I/O classes. Rio also supports I/O sharing between heterogeneous mobile systems, including tablets and smartphones. See [4] for a video of the demo.