rIOMMU: Efficient IOMMU for I/O Devices that Employ Ring Buffers