Linux 상자에서 DMA를 끄려고 하면 다음이 반환됩니다.
HDIO_GET_DMA failed: Inappropriate ioctl for device
나는 이것이 DMA를 켜거나 끄는 데 사용되었던 것을 기억합니다. 또한 커널 매개변수를 사용해 보았지만 libata.dma=0
소용이 없었습니다! 그러나 ATA 드라이버와 DMA는 제대로 작동하는 것 같습니다. 그래서 이 문제에 대해 걱정해야 하는지 아니면 더 이상 지원되지 않는지 궁금합니다.
배포판은 Ubuntu 12이고 커널은 3.5.0-54-generic입니다. 칩셋은
00:1f.2 SATA 컨트롤러: Intel Corporation 7 시리즈/C210 시리즈 칩셋 시리즈 6포트 SATA 컨트롤러 [AHCI 모드](개정 04)
답변1
HDIO_*_DMA
libata에서는 지원되지 않습니다.
바라보다https://ata.wiki.kernel.org/index.php/Libata_FAQ:
오래되고 지원되지 않는 ioctl
HDIO_SET_DMA가 실패하는 이유는 무엇입니까? DMA를 사용하고 싶습니다! HDIO_SET_UNMASKINTR이 실패하는 이유는 무엇입니까?
libata는 의도적으로 이전 IDE 드라이버에서 지원하는 모든 HDIO_xxx ioctl을 지원하지 않습니다. 이제 각각의 특정 목적을 위해 수많은 ioctl을 생성하는 대신 SG_IO를 일반 ATA 명령 제출 방법으로 사용하는 것이 선호됩니다.
디자인 결정은 단순히 다른 프로그램에서 많이 사용되는 HDIO_xxx ioctl을 지원하는 것이었습니다. 일반적으로 드라이버는 사용자 개입이 전혀 필요하지 않고 항상 자동으로 하드웨어를 최대 기능으로 프로그래밍합니다. 예를 들어, DMA는 사용 가능한 경우 자동으로 활성화되고 사용되기 때문에 대다수의 사용자에게는 HDIO_SET_DMA가 필요하지 않습니다.