From a discussion in one seminar
Here, I am attaching my email that was sent to my peers who were in one seminar (CSL) at my department.


I've realized that what I'm doing regarding my research shares the common goal, "move up any headache in kernel to the easy-going and soon-to-be-stable user-mode world."
 But my approach is not a systematic way. So, I just would like to add my humble experience here which may be related to the performance issue.

I'm investigating problematic behaviors of auto rate algorithms in multihop wireless networks using Emulab wireless nodes. Each wireless node has two Atheros-chipset-based Wifi cards. These wifi cards are controlled by a linux driver, Madwifi, that provides three different autorate algorithms. I'm also using a Click-implementation of Roofnet (mesh networks) on top of the Madwifi driver. While testing and modifying these autorate algorithms, I got many system crashes as I expected. So I determined to move the existing algorithms into Click USER-LEVEL modules. It took just several hours for me to make a corresponding click module in user-level mode (Of course, based on concrete understanding of all details on Madwifi and Click). After I've done with two of them (SampleRate and Minstrel autorate algorithms), most of tests were just straightforward without worrying about any possible system crash. As a result, it was easy and fast to find some bugs (potentially critical) in the existing implementations (I made sure they were not my mistakes in transferring -:) - some of them were algorithmic errors while others were just implementation bugs.

 Although I've been happy with this approach, I've noticed there is a performance issue. I've observed in some cases there is up to 20% of performance degradation in click-user-level mode, compared to one in the Madwifi driver. So the main reason would be, I guess, due to three context switches between user mode and kernel mode when the user-level click is running (there are some reasons that the user-level click cannot avoid those three context switches). So, according to my experience, besides the performance issue, it has been excellent to have some partial functionality of interest in the driver run in user-level mode.

 Just my two cents :)