FUSE 기반 파일 시스템은 사용자 공간 프로그램에서 구현되기 때문에 매우 느리다고 들었습니다. 사용자 공간이 커널보다 느린 이유는 무엇입니까?
답변1
코드는 커널 모드에서든 사용자 모드에서든 동일한 속도로 실행되지만, 커널 코드가 직접 실행할 수 있는 몇 가지 사항이 있는 반면, 사용자 모드 코드는 일부 단계를 건너뛰어야 합니다. 특히 커널 코드는 애플리케이션 메모리를 직접 매핑할 수 있으므로 애플리케이션 메모리와 하드웨어에서 복사한 내부 버퍼 간에 파일 내용을 직접 복사할 수 있습니다. 사용자 코드는 파이프나 소켓을 통해 추가 복사본을 만들거나 더 복잡한 메모리 공유 작업을 수행해야 합니다.
또한 모든 파일 작업은 커널을 거쳐야 합니다. 프로세스가 모든 것과 상호 작용할 수 있는 유일한 방법은 시스템 호출을 통해서입니다. 파일 작업이 완전히 커널 내부에서 수행되는 경우 사용자/커널 변환과 커널/사용자 변환이 하나씩만 수행되므로 속도가 매우 빠릅니다. 파일 작업이 다른 프로세스에 의해 수행되는 경우 프로세스 간에 컨텍스트 전환이 수행되어야 합니다.메모리 관리 유닛.
대부분의 하드웨어 액세스 시간에 대해 속도 성능은 여전히 미미하지만 하드웨어에 병목 현상이 발생하지 않을 때, 특히 메인 프로세서가 다른 작업을 수행할 때 관찰할 수 있습니다. 데이터 복사 프로세스 사이에 CPU가 사용 중입니다.
답변2
매우 단순화됨:
애플리케이션이 파일을 읽으려고 합니다.
애플리케이션은 커널에 요청하고 커널은 파일 시스템(커널 공간)에 액세스하여 권한을 확인하고 애플리케이션에 대한 파일 설명자를 처리합니다.
사용자 공간 파일 시스템의 경우 커널에서 사용자 공간으로의 전환이 상대적으로 더 느립니다.
응용 프로그램은 커널에 파일 열기를 요청하고, 커널은 사용자 공간 파일 시스템을 호출하고, 사용자 공간 fs는 디스크 액세스를 위해 커널을 호출하고, 사용자 공간 fs는 데이터를 커널에 보내고, 커널은 데이터를 사용자에게 전달합니다. 공간 응용.
사용자 공간 파일 시스템을 사용하면 더 많은 컨텍스트 스위치가 있습니다.