- October 31, 2016 /
- by Oleg Kravtsov
Developing technologies that connect different platforms and ecosystems is one of the main reasons Tuxera exists. That’s why in addition to our file system suite, we invest in other technologies that enable reliable, high-performance data transfer and storage between devices. Tuxera SMB is one of our latest products and one of the best examples of this. What sets Tuxera SMB apart from the rest is that it can be built to run either in user or kernel space.
The benefits of user space versus kernel space
A user-space application is the most obvious and straightforward way of implementing an SMB server, but consumes considerable memory. The other alternative, running an SMB server in kernel space can be dangerous as any defect in software at that level can cause the whole system to crash.
When developing our SMB server, we decided to have the same code base (the core of the architecture) and use different abstraction layers. By doing this, we can build two versions of our software as required: one that runs in user space, and another one that runs in kernel space. With this dual-port architecture, we can also implement features of the SMB protocol in parallel for both spaces. It also makes porting easier to other OSes like QNX or BSD.
Differences in performance between user and kernel space versions
We tested* both ports of the server, in the user space and in the kernel space, in low and high-end devices**. Regardless of a faster CPU and larger memory, the kernel space version always has better performance while requiring less CPU usage in high-end devices.
*We ran read, write, and file-listing benchmarks on a Qualcomm IPQ4019 with a 1 Gbps network interface.
**Same tests as for low-end devices but on a 4x Intel Xeon E3-1225 with a 10 Gbps network interface.
A well-designed abstraction layer saves time and effort
By building an abstraction layer, we are able to create two different versions of the software (user space and kernel space), while providing a consistent interface. Other advantages of a well-designed abstraction layer include:
- Improvements and system-specific optimizations can be done in the application layer. This saves development time and makes the application less prone to software defects.
- Porting to other platforms like QNX or BSD Kernel is extremely easy, because you only need to implement this abstraction layer to the selected target.
- Because the core of the software is the same, developers spend less time supporting multiple versions of the application.
Testing in user space finds defects in kernel space, and vice versa
Our dual-port development and architecture revealed defects that appeared only in user space or kernel space, though they were generic. This means you can debug the software in user space, and any defects found will then be automatically fixed in kernel space.
Dual-port architecture is not only possible, it has benefits!
Having a dual-port architecture like Tuxera SMB gives the flexibility to choose where you want it to run and makes it easy to port to other platforms. What’s more, Tuxera SMB provides larger performance boosts in kernel space where performance gains are best realized.