다음을 통해 공유


WavePci 디바이스에 대한 하드웨어 요구 사항

새 하드웨어 디자인의 기능을 선택할 때 공급업체는 다음과 같은 일반적인 원칙을 따라야 합니다.

  • 공급업체는 단순히 모든 처리를 하드웨어로 이동하는 대신 각 기능의 비용을 성능에 미치는 영향과 비교해야 합니다.

  • 하드웨어 기능의 잠재적 가치를 고려할 때 공급업체는 오디오와 같은 특정 하위 시스템에 좁게 집중하지 않고 시스템 전체에 미치는 영향 측면에서 해당 기능을 평가해야 합니다.

  • 공급업체는 하드웨어에서 가속화할 기능을 신중하게 선택하여 CPU 워크로드를 완화하고 메모리 사용량을 개선할 수 있으므로 다른 작업에서 시스템의 리소스를 더 많이 사용할 수 있습니다.

지금까지 모든 오디오 하드웨어 디자인이 이러한 원칙을 따르는 데 성공한 것은 아닙니다.

오디오 콘텐츠를 재생하거나 여러 스트림을 혼합할 때 일부 WDM 오디오 드라이버는 불필요하게 많은 CPU 시간과 버스 대역폭을 사용합니다. 이러한 결함은 일반적으로 결함이 있는 하드웨어 디자인 및 비효율적인 드라이버 구현의 결과입니다. 하드웨어 디자인 결함으로 인해 오디오 드라이버가 특정 웨이브 형식을 처리하지 못하거나 소프트웨어 개입이 필요한 해결 방법이 필요할 수도 있습니다.

WaveCyclic 디바이스 모델의 목적은 이전 오디오 디바이스의 하드웨어 제한 사항을 수용하는 것입니다. 새로운 하드웨어 디자인은 WavePci를 완전히 준수해야 합니다.

진정한 분산/수집 DMA를 수행할 수 있는 WavePci 디바이스는 CPU가 버퍼 간에 오디오 데이터를 복사하는 데 시간을 할애할 필요가 없습니다. WaveCyclic과 달리 WavePci는 데이터 복사에 내재된 필요가 없으므로 다중 스트림 또는 하드웨어 가속 오디오 디바이스에 대한 기본 미니포트 드라이버입니다. 잘 설계된 WavePci 디바이스는 CPU 리소스를 거의 사용하지 않아야 하므로 3차원 처리 및 믹싱을 위해 많은 수의 오디오 스트림(64개 이상)을 하드웨어에 보낼 수 있습니다.

WavePci 디바이스에는 분산/수집 DMA 전송을 지원하는 버스 master DMA 컨트롤러가 필요합니다. 하드웨어 디자인은 DMA 컨트롤러가 처리할 수 있는 데이터 전송 종류에 임의로 제한을 두면 안 됩니다. WavePci 디바이스는 다음 요구 사항을 충족해야 합니다.

  • 디바이스는 버스 master 합니다.

    운영 체제의 개입 없이 시스템 DMA 리소스를 사용하지 않고도 시스템 메모리에 자율적으로 액세스할 수 있어야 합니다.

  • 디바이스는 임의의 길이의 데이터 전송을 처리할 수 있어야 합니다.

    메모리 페이지보다 큰 매핑( IPortWavePciStream::GetMapping 참조)을 처리해야 합니다. 예를 들어 전송 제한이 4KB인 디바이스는 WavePci에 대한 전체 요구 사항에 맞지 않습니다. Microsoft Windows를 지원하는 64비트 CPU에서 페이지 크기는 8KB이므로 일부 매핑 크기가 4KB보다 클 수 있습니다. 단일 매핑에서 32KB를 초과하는 데이터 전송은 물리적 메모리 조각화에 따라 이론적으로 가능합니다. 다른 극단적인 경우 1 바이트의 매핑 크기가 가능합니다.

  • 디바이스는 시스템 메모리의 모든 위치에서 데이터 전송을 처리해야 합니다.

    32킬로바이트 이상의 전력 2 경계에 걸쳐 있는 데이터 전송은 매우 가능성이 높습니다. 이제 컴퓨터에 4GB 이상의 RAM이 포함될 수 있으며, 이러한 시스템에서는 64비트 CPU 또는 x86 PAE(실제 주소 확장)의 경우 실제 메모리에서 4GB보다 높은 매핑을 배치할 수 있습니다. 이러한 컴퓨터에서 최상의 성능을 얻으려면 공급업체는 64비트 주소 지정을 지원하는 디바이스를 만들어야 합니다. 그렇지 않으면 소프트웨어에서 데이터 복사가 필요합니다. 데이터 복사는 지금까지 16MB 이상의 RAM이 있는 시스템에서 24비트 주소를 지정하는 디바이스에 필요했습니다. 디바이스는 실제 메모리의 어디에서나 읽거나 쓸 수 없는 경우 WavePci 대신 WaveCyclic을 사용해야 합니다. 드라이버가 시스템 메모리 버스의 전체 주소 범위에 액세스하기에 충분한지 여부를 결정할 기회가 있는 후 디바이스 시작 시간( IRP_MN_START_DEVICE 참조)에서 이 결정을 내릴 수 있습니다.

  • 디바이스는 임의 맞춤을 사용하여 데이터 전송을 처리해야 합니다.

    매핑은 메모리의 임의 바이트 경계에서 시작 및 종료할 수 있습니다. 오디오 데이터 프레임은 매핑 간에 분할될 수 있으며, 첫 번째 매핑의 끝에 처음 몇 개 채널에 대한 샘플과 두 번째 매핑의 나머지 채널에 대한 샘플을 사용할 수 있습니다. 예제는 웨이브 필터를 참조하세요. 일부 샘플 크기의 경우 샘플 컨테이너도 매핑 간에 분할할 수 있습니다. 디바이스에서 전송이 캐시 라인 경계에 있어야 하거나 디바이스에서 전송이 오디오 프레임 경계에 엄격하게 정렬되어야 하는 경우(예: 전송 크기가 스테레오 16비트 경우 4로 균등하게 나뉘어 있다고 가정) 이 디바이스는 완전한 WavePci 규정 준수에 적합하지 않습니다. 비규격 하드웨어는 드라이버가 노출하는 데이터 범위 또는 형식(예: 특정 비트 깊이 또는 특정 채널 구성만)을 제한하여 WavePci 디바이스로 노출될 수 있습니다.

이전 목록의 마지막 지점과 관련하여 WavePci 디바이스의 분산/수집 DMA 엔진은 메모리 페이지 경계를 가로지르는 버퍼를 처리해야 합니다. 예를 들어 48kHz, 5.1 채널 웨이브 스트림에 대한 16비트 PCM 오디오 샘플의 10밀리초 분량을 포함하는 버퍼의 크기는 다음과 같습니다.

(샘플/프레임 6개)*(2바이트/샘플)*(48K 프레임/초)*(10밀리초) = 5760바이트

이는 메모리 페이지 크기(4096바이트)를 초과합니다. 즉, 버퍼에 메모리에 배치되는 방식에 따라 하나 또는 두 개의 페이지 경계가 포함됩니다. 버퍼에는 오디오 데이터 프레임의 정수(480)가 포함되지만 이러한 프레임 중 하나 또는 두 개는 페이지 경계를 넘을 수 있습니다.

이러한 이유로 WavePci 디바이스에 대한 분산/수집 DMA 하드웨어는 메모리에서 물리적으로 연결되지 않은 두 페이지로 분할되는 오디오 프레임(예: 다음 그림의 프레임 197)을 처리하도록 설계되어야 합니다.

메모리 페이지의 시작 부분부터 오프셋이 있는 오디오 버퍼를 보여 주는 다이어그램

앞의 그림 맨 위에는 두 페이지 사이의 경계를 가로지르는 5760 바이트 버퍼가 있습니다. 이 예제에서 버퍼는 첫 번째 페이지의 시작부터 1728 바이트 오프셋으로 시작되며, 이 오프셋은 버퍼의 시작을 메모리의 64 바이트 경계에 맞춥니다. 각 오디오 프레임이 12바이트를 차지하고 6개의 채널을 포함하고 있다고 가정합니다. 첫 번째 페이지에는 0부터 196까지의 모든 프레임이 포함되지만 프레임 197의 처음 4바이트만 포함됩니다.

그림의 맨 아래에는 채널 0과 1에 대한 샘플만 첫 번째 페이지에 포함되는 오디오 프레임 197의 자세한 보기가 있습니다. 채널 2~5에 대한 샘플은 두 번째 페이지에 포함되어 있습니다.

두 페이지가 그림의 맨 위에 나란히 표시되지만 실제로는 커널 가상 메모리에서만 연속됩니다. 버퍼가 포함된 페이지는 실제 메모리에서 연속되지 않으므로 물리적 주소를 사용하는 분산/수집 DMA 컨트롤러는 버퍼의 두 부분을 전송 큐에 두 개의 개별 항목으로 지정해야 합니다. WavePci 포트 드라이버는 자동으로 버퍼를 페이지 경계에서 두 개의 개별 물리적 매핑으로 분할합니다.

앞의 예제가 버퍼를 첫 번째 페이지의 시작 부분에 맞게 변경하더라도 분할 프레임 문제는 사라지지 않습니다. 다음 그림에서는 이 점을 보여 줍니다. 이 경우 프레임 341은 첫 번째 페이지 내에 있는 채널 0 및 1에 대한 샘플과 두 번째 페이지에 있는 채널 2~5에 대한 샘플을 사용하여 페이지 경계에서 분할됩니다.

메모리 페이지의 시작 부분에 맞춰진 오디오 버퍼를 보여 주는 다이어그램

분산/수집 DMA 컨트롤러가 분할 오디오 프레임을 제대로 처리하지 못하는 WavePci 디바이스는 소프트웨어 해결 방법으로 일부 하드웨어 디자인 결함을 완화하는 데 도움이 될 수 있지만 처리할 수 있는 오디오 데이터 형식의 종류가 제한됩니다. 자세한 내용은 WavePci 대기 시간을 참조하세요.