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


33

사용자 공간 응용 프로그램이 아닌 Linux NFS 서버가 커널에 구현 된 이유가 궁금합니다.

사용자 공간 NFS 데몬 이 존재한다는 것을 알고 있지만 NFS 서버 서비스를 제공하는 표준 방법은 아닙니다.

NFS 대신 사용자 공간 응용 프로그램으로 NFS 서버를 실행하는 것이 커널 대신 사용자 공간에서 데몬을 실행하는 추가 보안을 제공 할 수 있기 때문에 선호되는 방법이라고 생각합니다. 또한 한 가지 일을하고 잘하는 일반적인 Linux 원칙에 적합합니다 (데몬은 커널에 대한 일이 아니어야합니다).
실제로 커널에서 실행한다고 생각할 수있는 유일한 이점은 컨텍스트 전환에서 성능을 향상시키는 것입니다 (이는 논란의 여지가있는 이유입니다).

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


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


NFS는 파일 시스템입니다. 사용자 공간 파일 시스템 드라이버는 일반적으로 성능이 좋지 않은 FUSE를 사용해야합니다.
jordanm

@jordanm 아니에요. 실제로 FUSE를 통해 네트워크 파일 시스템 (NFS, CIFS / samba, coda 등)을 실행할 수 없습니다. FUSE는 파일 시스템을 제공하지 않고 로컬 시스템에 마운트하기위한 것입니다.
패트릭

내 말은 고객에게만 적용됩니다.
jordanm

@jordanm도 불행히도. FUSE없이 파일 시스템을 마운트 할 수 있습니다. FUSE는 어쨌든 비교적 새로운 기술이며, 네트워크 파일 시스템의 클라이언트 쪽은 FUSE가 수행하기 오래 전에 존재했습니다. FUSE 단지 (단지 오해 - P를 정리하기를 바라고, 평균려고 노력하지 않음) 커널에서 제공하지 않는 지원 파일 시스템에있는 방법을 제공합니다
패트릭

2
@StarNamer 여전히 클라이언트에 대해 이야기하고 있습니다. 서버에 대해 이야기하고 있습니다. unfs3커널 지원없이 실행할 수 있습니다 (NFS 서버).
Patrick

답변:


25

unfs3내가 아는 한 Ganesha 는 현재 가장 활동적인 사용자 공간 NFS 서버 프로젝트이지만 완전히 성숙하지는 않습니다.

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

최근 성능 비교를 보지 못했습니다.

다른 문제들 :

  • 일반 응용 프로그램은 경로 이름으로 파일을 조회하지만 nfsd파일 핸들로 파일을 조회 할 수 있어야합니다. 이것은 까다 롭고 파일 시스템의 지원이 필요합니다 (일부 파일 시스템이이를 지원하지는 않습니다). 과거에는 사용자 공간에서이 작업을 수행하는 것이 불가능했지만, 최근 커널은 추가 name_to_handle_at(2)open_by_handle_at(2)시스템 호출.
  • 파일 잠금 호출을 차단하는 것이 문제라고 생각합니다. 요즘 사용자 공간 서버가 서버를 어떻게 처리하는지 잘 모르겠습니다. (잠금 대기중인 서버 스레드를 묶거나 폴링합니까?)
  • 최신 파일 시스템 의미 (변경 속성, 위임, 공유 잠금)는 커널에서 더 쉽게 구현 될 수 있습니다.
  • uid를 변경하고 일반적인 커널 vfs 코드를 사용하여 권한, 할당량 등을 직접 확인하지 않아도됩니다. 그리고 Linux에는 setfsuid(2)이를 수행해야하는 시스템 호출 ( )이 있습니다. 필자가 잊어 버린 이유 때문에 서버에서 사용해야하는 것보다 더 복잡하다고 생각합니다.

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

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


2
독자들은 Bruce가 리눅스 NFS 서버의 관리자 (또는?)를 유지하고 있다는 것을 알아야한다. :)
Dan Pritts

@derfian 참고-여기에 " unfs3살아 있고 Github로 이동 하는 " 효과에 대해 언급하고 싶 습니까?
ms-ati

나는 때문에 @derfian 위의 댓글을 달았습니다, 또는 (StackOverflow의 사용자 unix.stackexchange.com/users/23034/derfian는 ) unfs3의 메인테이너이며, 최근에는 예를 들면, 죽은 아니었다 발표 이 Github에서 주석
밀리-ATI

NFS 관리자에 의해 작성된이 답변은 매우 모호합니다.
Torsten Bronger

18

Olaf Kirch는 원래 NFS 서버의 사용자 공간과 커널 기반 버전을 모두 개발했습니다. 2000 년 책 "Linux 네트워크 관리"에서 그는 다음과 같이 말합니다.

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

일단 NFS 서버가 성능 향상을 위해 커널로 이동 한 후에는 아무도 그것을 다시 꺼낼 이유가 없다고 생각합니다.


8

Starnamer는 정확합니다 (베타 테스터 중 하나였습니다).

커널에 넣는 것은 (비주로 PCNFS 클라이언트에 대한) 끔찍한 성능을 개선하려는 시도였으며 일단 그 문제가 해결되면 아무도 다시는 그것을 보지 못했습니다.

커널에 NFS를 가지고있는 데에는 여러 가지 결함이 있습니다. 최소한 동일한 파일 시스템을 건 드리는 것 (심각한 심한 부패 위험이 있음)과 잘 어울리지 않지만 그 당시에는 (1993-4) 그것이 문제가 될 것이라는 것을 깨닫지 못합니다.

우리는 젊고 어리석은 등이었습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.