안녕하세요, Linux 전문가 여러분!
PCI 장치를 제어하고 스트레스를 주는 최선의 방법을 찾으려고 노력 중입니다. 먼저 pciutils(lspci 및 setpci)의 명령을 사용하여 장치를 구성하고 버스에서 트래픽을 생성하는 간단한 bash 스크립트를 작성했습니다.
스크립트는 제대로 작동하지만 PCIe 링크 속도보다 훨씬 느리게 실행되는 것으로 보이므로 버스에 스트레스를 가하거나 전원 모드와 링크 속도 사이를 빠르게 전환하기가 어렵습니다.
pci.h 라이브러리의 함수를 호출하기 위해 커널 모듈을 작성하면 더 빨리 실행될지 궁금합니다. PCI 장치에 더 빠르게 액세스할 수 있나요?
어떤 도움이라도 대단히 감사하겠습니다 :)
답변1
셸에는 작업을 수행하기 위해 외부 명령을 호출할 때 많은 오버헤드가 있습니다. Fork/exec에는 상대적으로 높은 오버헤드가 있습니다.
CLI 유틸리티를 호출하는 대신 API를 직접 사용하여 쉘 스크립트에서 사용자 공간 C 프로그램으로 이동하면 속도가 크게 향상됩니다. 또한 커널 모듈을 작성하는 것보다 쉽습니다. 스크립팅 언어(Perl, Python, Ruby 등)에 대한 API 바인딩을 찾을 수 있다면 거의 그만큼 빠릅니다.
커널 모듈로 변환하여 제거할 수 있는 잔여 오버헤드(예: 시스템 호출 오버헤드)가 여전히 있습니다. 이 시점에서는 기본적으로 모든 오버헤드가 제거되었으며 더 빠른 속도를 얻을 수 있는 유일한 방법은 운영 체제 및/또는 사용자 정의 테스트 하드웨어를 제거하는 것입니다.
추신: 실제로 사용자 공간 C 프로그램이나 커널 모듈을 작성하는 방법에 대한 질문이 더 나을 수도 있습니다.스택 오버플로, 프로그래밍 문제를 해결하기 위한 Stack Exchange 웹사이트입니다. 다른 Stack Exchange 사이트와 마찬가지로 다음 사이트도 확인해 보세요.스택 오버플로 도움말 센터거기에 질문을 게시하기 전에. 특히, 인기 있는 질문에 대한 몇 가지 유용한 팁을 제공합니다.