Linux NFS 서버가 사용자 공간이 아닌 커널에서 구현되는 이유는 무엇입니까?

Linux NFS 서버가 사용자 공간이 아닌 커널에서 구현되는 이유는 무엇입니까?

Linux NFS 서버가 사용자 공간 애플리케이션이 아닌 커널에서 구현되는 이유를 알고 싶습니다.

나도 하나 알아사용자 공간 NFS 데몬존재하지만 NFS 서버 서비스를 제공하는 표준 방법은 아닙니다.

NFS 서버를 사용자 공간 애플리케이션으로 실행하는 것이 커널 대신 사용자 공간에서 데몬을 실행하여 추가 보안을 제공하므로 선호되는 접근 방식이라고 생각합니다. 또한 일반적인 Linux 원칙을 준수합니다. 즉, 한 가지 일을 잘 수행하십시오(그리고 데몬은 커널의 작업이 되어서는 안 됩니다).
사실, 커널에서 실행할 때 제가 생각할 수 있는 유일한 이점은 컨텍스트 전환을 통한 성능 향상입니다(이것은 논쟁의 여지가 있는 이유입니다).

그렇다면 이것이 구현되어야 하는 문서화된 이유가 있습니까? 인터넷 검색을 시도했지만 아무것도 찾을 수 없습니다.


많은 혼란이 있는 것 같습니다. 파일 시스템 마운트에 대해 묻는 것이 아니라 제공에 대해 묻는 것입니다.네트워크 파일 시스템의 서버 측. 매우 분명한 차이가 있습니다. 파일 시스템을 로컬로 마운트하려면 커널이 파일 시스템을 지원해야 합니다(예: samba 또는 unfs3).

답변1

unfs3내가 아는 한 죽었어.가네샤아직 완전히 성숙되지는 않았지만 현재 가장 활동적인 사용자 공간 NFS 서버 프로젝트입니다.

Samba는 다른 프로토콜을 제공하지만 사용자 공간에서 실행되는 성공적인 파일 서버의 예입니다.

최근 성능 비교를 본 적이 없습니다.

기타 질문:

  • 일반 응용 프로그램은 경로 이름으로 파일을 찾지만 nfsd파일 핸들로 찾을 수 있어야 합니다. 이는 까다로우며 파일 시스템 지원이 필요합니다(모든 파일 시스템이 이를 지원할 수 있는 것은 아닙니다). 과거에는 사용자 공간에서 이를 수행하는 것이 불가능했지만 최근 커널에는 시스템 호출이 추가되었습니다 name_to_handle_at(2).open_by_handle_at(2)
  • 파일 잠금 호출을 차단하는 것이 문제였던 것을 기억하는 것 같습니다. 현재 사용자 공간 서버가 이를 어떻게 처리하는지 잘 모르겠습니다. (잠금을 기다리는 서버 스레드를 점유하고 있습니까, 아니면 폴링하고 있습니까?)
  • 최신 파일 시스템 의미(변경 속성, 위임, 공유 잠금)는 먼저 커널에서 구현하기가 더 쉬울 수 있습니다(이론적으로는 대부분 아직 구현되지 않았습니다).
  • 권한, 할당량 등을 수동으로 확인하는 대신 uid를 변경하고 이를 수행하기 위해 공통 커널 vfs 코드를 사용하려고 합니다. Linux에는 이를 수행할 수 있는 시스템 호출( setfsuid(2))이 있습니다. 잊어버린 이유로 인해 서버에서 이것을 사용하는 것이 예상보다 더 복잡해지는 것으로 나타났습니다.

일반적으로 커널 서버의 장점은 vfs 및 내보낸 파일 시스템과의 긴밀한 통합입니다. 더 많은 커널 인터페이스(예: 파일 핸들 시스템 호출)를 제공하여 이를 보완할 수 있지만 쉽지 않습니다. 반면에 요즘 사람들이 내보내려는 일부 파일 시스템(예: Gluster)은 실제로 주로 사용자 공간에 존재합니다. FUSE를 사용하여 커널 nfsd에서 내보낼 수 있지만 새로운 기능에는 FUSE 인터페이스에 대한 확장이 필요할 수 있으며 성능 문제가 발생할 수 있습니다.

짧은 버전: 좋은 질문입니다!

답변2

Olaf Kirch는 원래 NFS 서버의 사용자 공간 및 커널 기반 버전을 개발했습니다. 그는 2000년에 쓴 "Linux Network Management"라는 책에서 이렇게 말했습니다.

2.2.0 커널은 Olaf Kirch가 개발하고 HJ Lu, G. Allan Morris 및 Trond Myklebust가 추가로 개발한 실험적인 커널 기반 NFS 서버를 지원합니다. 커널 기반 NFS 지원으로 서버 성능이 크게 향상됩니다.

제 생각엔 성능 향상을 위해 NFS 서버를 커널 안으로 옮긴 뒤에는 다시 꺼낼 이유가 없다고 생각하는 사람이 없었을 것입니다.

답변3

Starnamer가 맞습니다(저는 베타 테스터 중 한 명입니다).

열악한 성능(주로 PCNFS 클라이언트의 경우)을 개선하기 위해 커널에 삽입되었으며, 일단 문제가 해결되면 더 이상 아무도 관심을 두지 않았습니다.

커널에서 NFS를 사용하는 데에는 여러 가지 결함이 있습니다. 그 중 가장 중요한 것은 동일한 파일 시스템을 다루는 다른 것과 잘 작동하지 않는다는 것입니다(심각한 손상 위험이 있음). 당시(1993-4) 이것이 문제가 될 수 있다.

우리는 더 젊고, 더 멍청합니다.

답변4

제3조이 슬라이드커널 공간과 사용자 공간 NFS 서버 구현에 대해 논의합니다. 이 데모는 NFS 서버의 사용자 공간 구현을 용이하게 합니다(NFS-Ganesha가 수행하는 작업).

반면에 깊이있게 설명하는 블로그 게시물이 있습니다.여기커널 공간 구현이 훨씬 빠른 것으로 나타났습니다.

그렇다면 커널 공간이 필요한 이유는 짧은 대답은 더 나은 성능입니다.

관련 정보