dan*_*dan 3 performance filesystems kernel fuse
我听说基于 FUSE 的文件系统是出了名的慢,因为它们是在用户空间程序中实现的。用户空间比内核慢是怎么回事?
无论是在内核中还是在用户态,代码都以相同的速度执行,但是内核代码可以直接执行某些操作,而用户态代码则必须跳过一些障碍。特别是,内核代码可以直接映射应用程序内存,因此它可以直接在应用程序内存和硬件复制的内部缓冲区之间复制文件内容。用户代码必须通过管道或套接字进行额外的复制,或者进行更复杂的内存共享操作。
此外,每个文件操作都必须通过内核——进程与任何事物交互的唯一方法是通过系统调用。如果文件操作完全在内核内部执行,则只需要执行一次用户/内核转换和一次内核/用户转换,这非常快。如果文件操作由另一个进程执行,则必须在进程之间进行上下文切换,这需要在MMU 中进行更昂贵的操作。
对于大多数硬件访问时间,速度性能仍然可以忽略不计,但是当硬件不是瓶颈时可以观察到,特别是当主处理器在做其他事情时可以异步执行许多硬件操作,而上下文切换和数据复制进程之间保持 CPU 忙碌。