{'fraction_non_alphanumeric': 0.024706867671691793, 'fraction_numerical': 0.0033500837520938024, 'mean_word_length': 5.422043010752688, 'pattern_counts': {'":': 0, '<': 0, '<?xml version=': 0, '>': 0, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
Scalable I / O Virtualization via Self-Virtualizing Devices

The virtualization of I/O devices is an integral part of system virtualization. This includes both virtualizing the physical devices and managing them across multiple guest virtual machines (VMs) or domains running on top of a virtual machine monitor (VMM) or hypervisor (HV). This paper presents the notion of self-virtualizing devices, where for higher end, ‘smart’ I/O devices, selected virtualization functionality is offloaded onto the devices themselves. In particular, a self-virtualizing device is aware of being used in a virtualized environment and implements the virtual device abstraction on the device itself. It also presents an interface to the HV to manage these virtual devices. Using this virtual device abstraction, a guest domain can interact with the physical device with minimal HV involvement. Theion, a guest domain can interact with the physical device with minimal HV involvement. The outcomes are reduced I/O virtualization costs caused by the HV (and additional software components required to virtualize the device) and improved scalability for device interactions with guest domains. The prototype self-virtualizing device described in this paper leverages the multi-core nature of modern computer architectures. It uses the IXP2400 network processor with multiple internal specialized communication cores to implement a self-virtualizing network interface attached to a x86 based host machine. The device is used in conjunction with the Xen hypervisor and provides virtual network interfaces (VIFs) to the guest domains. Initial results demonstrate that the performance of such a self-virtualizing network interface exceeds that of network interfaces virtualized in software by the HV and its driver domain(s); for a single guest domain, ∼ 50% improvement in latency is obtained. Further, device performance scales well with increasing the number of guest domains, in part because the self-virtualizing network device reduces system resource utilization by the driver domain and the HV. Additional insights from the design and implementation of self-virtualizing devices concern the device-side functionality appropriate for effective virtualization and issues concerning the efficient interaction of HVor domain-based activities with such devices, e.g. in future heterogenous multi-core systems.