QNX 6.5에서 캐시 없이 하드 디스크 읽기(), 쓰기() 속도 측정

QNX 6.5에서 캐시 없이 하드 디스크 읽기(), 쓰기() 속도 측정

QNX 6.5 운영 체제를 사용하고 있습니다. QNX 6.5는 POSIX API를 지원합니다. 하드 드라이브 성능을 평가하기 위한 애플리케이션을 구축하려고 합니다. 내 응용 프로그램은 사용자 정의 데이터 버퍼(kB 또는 MB)를 시작 섹터부터 끝 섹터까지 지속적으로 하드 디스크에 읽고/쓰고/씁니다. 수행되는 작업(읽기, 쓰기, 쓰기 후 읽기)은 사용자의 선택에 따라 달라집니다. 작업이 수행될 때마다 애플리케이션은 사용 시간을 추적 ClockCycles()하고 각 섹터 읽기/쓰기 작업의 속도를 계산합니다.

나는 open()장치 파일을 열기 위해 호출을 사용하고 있습니다. 예를 들어 읽기/쓰기 작업을 수행하기 위해 API를 사용 /dev/hd0하고 있습니다 . 내 문제는 실제 디스크 읽기/쓰기에 대한 올바른 속도를 얻지 못한다는 것입니다. 실제로 애플리케이션은 데이터 읽기/쓰기 속도를 캐시에 반환하는 경우가 많습니다. 쓰기 작업 직후에 읽기를 수행하려고 하면 문제가 더욱 분명해집니다. 쓰기 작업 후의 읽기 작업 속도는 약 1000-1200MB/S로 매우 높지만 일반 읽기에는 50-60MB/S가 필요합니다. 나는 및 와 같은 열린 기호를 사용하고 있습니다 . 또한 플래그를 및 으로 변경해 보았습니다 . 그러나 나는 이러한 플래그가 애플리케이션의 출력에 아무런 영향을 미치지 않는다는 것을 발견했습니다. Linux에는 유사한 플래그가 없습니다.read()write()O_SYNCO_RDWRO_DSYNCO_RSYNCO_DIRECT

또한 시작하는 동안 하드 드라이브의 캐시를 비활성화해 보았습니다. 그런 다음 데이터 크기에 따라 MB 단위의 읽기/쓰기 속도 정확도를 얻었습니다. 하지만 그럼에도 불구하고 쓰기 직후에 더 작은 데이터 크기를 읽으면 읽기 속도가 여전히 매우 높습니다. 예를 들어 DMA 전송이 필요한 드라이버에 사용되는 CACHE_FLUSH일부 매크로도 보았습니다 . CACHE_INVALIDATE하지만 내 응용 프로그램에서 이러한 매크로를 사용하는 방법을 모르겠습니다. 캐시를 우회하고 하드 디스크 읽기/쓰기 작업 속도를 높이는 방법을 알려줄 수 있는 사람이 있습니까? 내 하드 드라이브는 포맷되거나 포맷되지 않을 수 있습니다. 두 가지 시나리오를 모두 테스트했습니다.

답변1

HD 캐시

마지막 단락과 관련하여 드라이브에 1-2M 미만의 데이터를 읽고 쓸 때 성능은 드라이브의 캐시에 의해 영향을 받는 것으로 생각됩니다. 오늘날 HD의 캐시 범위는 일반적으로 2M에서 16M입니다.

HD 캐시의 영향 최소화

운영 체제 수준 파일 시스템 캐싱을 성공적으로 비활성화했다고 가정합니다. HD 캐시의 영향을 최소화하려면 HD 캐시보다 최소한 두 배 많은 데이터를 써야 합니다.

하드 디스크에 2M 캐시가 있다고 가정합니다.

200kb 파일에 데이터를 기록하여 테스트했습니다. 20개(단일 파일)를 쓰고 처음 10개 파일의 결과를 삭제하고 마지막 10개의 평균을 계산합니다.

200kb 읽기 테스트에는 20개의 파일이 필요합니다. 내용은 동일할 수 있지만 별도의 파일이어야 합니다. 동일한 작은 파일(<2M)을 여러 번 읽으면 HD 캐시가 사용됩니다.

유사한 프로그램

당신은 그것을 확인해야합니다보니++. QNX에서 컴파일할 수도 있습니다.

관련 정보