NTFS 드라이브의 게임에서 일부 성능 문제가 발생했습니다. PCIe4 NVME, NTFS 형식에 있는 Linux와 Windows 간에 Steam 라이브러리를 공유하고 있습니다. 예를 들어 Baldur's Gate 3를 실행하면 ext4에서 실행하는 것(pcie4 NVME에서도 실행)에 비해 매우 느리게 로드됩니다. 15초와 60초의 차이는 엄청납니다. 그러나 두 드라이브는 읽기 사양이 유사합니다. ntfs-3g 드라이버는 로드 시 CPU 스파이크를 일으킬 수도 있습니다.
성능을 향상시키기 위해 noatime, big_writes 등 거의 모든 것을 시도했지만 아무것도 효과가 없었습니다. lowntfs-3g를 시도하기 전까지는 말이죠. 최후의 수단으로 이것을 시도했는데 효과가 있었습니다. 매우 빠르며 ext4만큼 빠릅니다!
그렇다면 내가 무엇을 놓치고 있는 걸까요? 단점은 무엇입니까? 인터넷이나 매뉴얼 페이지에서 관련 정보를 찾을 수 없었습니다.
저는 Ubuntu 22.04(KDE Neon 5.27)와 Xanmod 커널 6.4.10을 사용하고 있습니다.
답변1
예, 이것은 놀랍게도 문서화되지 않은 것입니다.
따라서 정직한 대답은 다음과 같습니다. NTFS ntfs-3g
와 lowntfs-3g
NTFS는 서로 다른 두 가지 드라이버입니다. 그들은 일부 코드를 공유하지만 다음과 같은 주요 기능에서는 그다지 많지 않습니다 fuse_ntfs_read
.NTFS-3G 버전,lowntfs-3g 버전.
이름에서 알 수 있듯이 lowntfs-3g는 낮은 수준의 FUSE API를 사용하며 더 빠른 것으로 보입니다. 이것이 낮은 수준의 FUSE API가 더 빠르기 때문인지, 아니면 코드가 몇 년 안에 더 새로운 것처럼 보이고 첫 번째 개정판에서 배우기 때문인지는 말할 수 없습니다.
man 8 ntfs-3g
lowntfs-3g만이 대소문자를 무시하고 모든 파일 이름을 소문자로 바꿀 수 있으며, ntfs-3g만이 대체 데이터 스트림을 처리할 수 있다는 점을 알려주세요. (이것에 대해 들어보지 못했다면 용서해 주세요!)
따라서 본질적으로 동일한 패키지인 NTFS 드라이버의 두 가지 다른 구현입니다. 개발자는 이들 중 하나의 사용을 명시적으로 권장하지 않습니다.
내 생각에는 ntfs-3g가 철저하게 테스트될 가능성이 더 높다고 생각합니다. 모든 사람과 할머니가 기본적으로 ntfs-3g를 사용하기 때문입니다. 저와 여러분도 그랬듯이요. 오류는 더 일찍 발견되어야 합니다.
ext4가 ntfs-3g보다 4배만 빠르다는 사실에 조금 놀랐습니다! 그런데, 이것은 FUSE 드라이버에게는 큰 성과입니다. 일반적으로 파일(예: ext4)에 액세스하려면 프로그램이 시스템 호출만 하면 됩니다. 이는 프로세서 상태를 저장합니다(실행 프로그램 지점과 모든 관련 레지스터에 설명되어 있음). CPU) 및 스케줄링 상태, 커널에서 데이터를 가져오는 작업, 커널이 프로그램에 필요한 데이터 가져오기를 완료하면 프로그램 실행을 계속할 수 있으므로 커널 코드가 프로세스 상태를 저장할 수 있습니다. 그리고 프로그램 코드가 실행되었을 때의 프로세서 상태가 복원되고, CPU는 프로그램이 시스템 호출을 실행했을 때 중단되었던 위치로 다시 점프합니다. (물론 세부 사항은 더 복잡하지만 이것이 기본 아이디어입니다.)
FUSE(USERland의 파일 시스템)에서 프로그램은 시스템 호출(프로그램 상태 저장, 커널 상태 복원)을 수행하고, 커널은 사용자가 요청한 파일이 FUSE 파일 시스템에 있는지 확인하고 어떤 파일을 찾은 다음 해당 파일을 호출합니다. 파일 시스템의 기능적 사용자 모드 드라이버(커널 상태 저장, FUSE 프로그램 상태 복원), 이 파일 시스템 드라이버는 기본 블록 장치에서 읽어야 할 내용을 결정하고 시스템 호출을 실행하여 읽기(FUSE 상태 저장, 커널 상태 복원)를 수행합니다. , 커널이 데이터를 읽고 반환(커널 상태 저장, FUSE 프로그램 상태 복원)한 다음 FUSE 드라이버가 요청에 따라 데이터를 조립하여 커널에 반환(FUSE 프로그램 상태 저장, 커널 상태 복원) ), 그러면 커널이 데이터(완료된 경우!)를 프로그램에 제공합니다(커널 상태는 저장되고 프로그램 상태는 복원됩니다).
따라서 FUSE는 많은 CPU 캐시가 적중될 수 있는 사실상 컨텍스트 스위치(2개가 아닌 6개 이상)의 사악한 향연입니다. 이는 성능에 매우 좋지 않습니다(개별 읽기 요청이 작을수록 더 나쁩니다!). 그래서 ntfs-3g의 성능에 많이 놀랐고,놀라다보고된 낮은 ntfs-3g 성능을 기준으로 합니다!