This approach introduces new problems and issues, of which the most important are synchronization, interrupt delivery, physical memory allocation, access to shared resources, and performance. We successfully addressed the functional issues, as demonstrated by the fact that the majority of device drivers execute successfully without change and are routinely used by Fluke developers. Based on our experience with the minority of drivers that did require changes, and our experience developing the framework, we propose guidelines for improving device drivers' portability across different execution environments.
Running device drivers in user mode raises serious performance issues but on the whole they were successfully mitigated. We compare the driver performance in Fluke with that in the original legacy systems, in terms of latency, bandwidth, and processor utilization. We find that reasonable performance (between 88-93% of the best-performing Unix systems in a realistic workload) and acceptable processor overhead (between 0-100%) are achievable. The limiting factor is the IPC performance of the underlying Fluke layers.