SSD에 키 누르기 쓰기 및 웨어 레벨링

SSD에 키 누르기 쓰기 및 웨어 레벨링

나는 상당한 양의 데이터를 절대 잃지 않기 위해 가능한 한 많은 양의 파일을 파일에 쓰려고 하는 애플리케이션을 작성할 계획입니다. 마이크로초 또는 나노초 타이밍을 포함한 모든 키 입력을 디스크에 기록합니다. 이것은 많은 양처럼 들리지만, 기록된 데이터의 GB에 도달하는 데는 여전히 상당한 시간이 걸립니다. 상황을 완화하기 위해 출력 스트림을 사용하여 이 데이터를 파일 끝에 대한 업데이트로 쓸 계획이지만 나중에는 즉시 스트림을 플러시합니다.

이제 SSD를 사용하면 데이터를 쓸 때마다 일반적으로 업데이트가 수행될 때마다 다른 위치에 쓰게 됩니다. 나는 OS/FS가 드라이브에 "섹터"를 전송하기만 하고 이것이 파일 끝 부분에 대한 업데이트인지 구분할 수 없을 것이라고 가정합니다. 따라서 업데이트가 작더라도 SSD 마모 레벨링이 끝이 없을 것이라는 의미입니다.

위의 설명이 정확합니까? 애플리케이션에서 적절한 버퍼링 양을 고려해야 합니까? 최신 파일 시스템은 SSD에 쓰기 전에 얼마나 많이 스스로 캐시합니까? 아니면 SSD 자체 내부의 버퍼링이 도움이 될까요? 그러한 사용에 대한 분석을 수행한 사람이 있습니까?

답변1

이와 같은 상황에서 OS는 쓰기를 버퍼링하고 몇 초마다 플러시해야 합니다. 또한 대부분의 SSD는 정전 시 데이터가 손실되지 않도록 "안전한" 제한된 형태의 쓰기 버퍼링을 구현합니다. 대부분의 저장 장치와 OS는 4KB 블록에서 작동하므로 시스템은 디스크에 단일 바이트를 쓰지 않습니다.

즉, 애플리케이션이 지속적으로 소량의 데이터를 디스크에 써야 하는 경우 자체 버퍼를 구현하거나 적절한 OS 기능을 사용하여 쓰기 버퍼를 명시적으로 사용하는 것이 가장 좋습니다. 모든 디스크 쓰기는 OS 수준에서 적지 않은 양의 오버헤드를 수반하므로 적절한 간격으로 또는 버퍼가 특정 크기(예: 수십 또는 수백 KB)에 도달할 때 플러시되는 메모리 버퍼에 써야 합니다.

정기적으로 상당히 큰 데이터 청크를 쓰고 디스크의 임의 위치에 데이터를 덮어쓰지 않고 연속적인 로그 데이터 스트림을 쓰는 것처럼 보이는 경우 과도한 쓰기 증폭이나 성능 저하가 발생해서는 안 됩니다. 성능. 드라이브의 마모 레벨링은 여기에서 잘 수행됩니다.

관련 정보