오디오를 녹음하고 SD 카드에 기록하는 경우 데이터 속도는 약 1.5MB/s입니다. 내가 ext4 파일 시스템과 클래스 4 SD 카드를 사용하고 있습니다.linux : smart fsync()?
일정한 간격 후에 커널은 파일을 자동으로 동기화합니다. 이것의 단점은 응용 프로그램 버퍼가 디스크에 쓰여지기를 기다리고 있다는 것입니다.
나는 커널이 현재 무엇을하는지 자주 동기화하면 문제를 해결할 수 있다고 생각한다.
특정 간격 후에 동기화하려면 응용 프로그램에서 fsync()
을 사용했습니다. 그러나 응용 프로그램에서 호출 된 fsync()가 시간 낭비이므로 특정 시간 커널이 응용 프로그램이 fsync()
이라는 바로 전에 동기화 되었기 때문에이 방법으로는 문제가 해결되지 않습니다.
동기화 메커니즘이 필요합니다 (예 : smart_fsync()
). 응용 프로그램이 smart_fsync()를 호출하면 잠시 동안 동기화되지 않은 경우에만 커널이 동기화됩니다. 그렇지 않으면 그냥 돌아옵니다.
smart_fsync()
과 같은 기능이 없으므로 가능한 해결 방법은 무엇입니까?
파일 버퍼를 초과하지 않으면 커널이 아무 것도 동기화하지 않는다고 저는 생각하지 않습니다. 수동으로 (그리고 꽤 자주) 동기화하면 모든 동기화 시간을 줄일 수 있지만 전체적으로 소요되는 시간은 거의 동일하게 유지됩니다.또한 nonblocking I/O 또는 쓰는 쓰레드를 사용할 수 있지만 약간 까다 롭습니다. Btw, 클래스 4의 1.5Mb는 상당히 낮습니다. FS 저널을 사용하지 않으면 도움이 될 수 있습니다. – keltar