내 MMIO 읽기/쓰기 대기 시간이 부당하게 높습니다. 누군가가 나에게 제안을 해줄 수 있기를 바랍니다.MMIO 읽기/쓰기 대기 시간
커널 공간에서 PCIe 장치의 BAR0 주소에서 4 바이트 값을 읽는 간단한 프로그램을 작성했습니다. 이 장치는 PCIe Intel 10G NIC이며 Xeon E5 서버의 PCIe x16 버스에 연결되어 있습니다. 내가 읽고 끝 MMIO의 시작 사이의 시간을 측정하는 RDTSC를 사용하는 코드는 다음과 같습니다
vaddr = ioremap_nocache(0xf8000000, 128); // addr is the BAR0 of the device
rdtscl(init);
ret = readl(vaddr);
rmb();
rdtscl(end);
내가 (끝은, 초기화)이 1us 미만이어야하는 사이의 경과 시간을 기대하고 있습니다 결국 PCIe 데이터 링크를 통과하는 데이터는 불과 몇 나노초가되어야합니다. 그러나 내 테스트 결과는 5.5에서 MMIO PCIe 장치 읽기를 수행하는 것으로 나타났습니다. 이것이 합리적인지 궁금합니다. 원격 코드를 메모리 장벽 (rmb)으로 변경하지만 지연 시간은 약 5입니다.
이 백서에서는 PCIe 대기 시간 측정에 대해 언급합니다. 보통 1 초 미만입니다. www.cl.cam.ac.uk/~awm22/.../miller2009motivating.pdf 더 낮은 MMIO 액세스 대기 시간을 얻으려면 커널이나 장치와 같은 특수 구성을 수행해야합니까? 또는 이전에 경험 한 사람이 있습니까?
로컬 PCIe 버스에있는 장치의 BAR에서 단어를 읽는 데 1 us 미만을 측정합니다. 필자가 논문의 결과가 사실적임을 확인하고 나서 내 의견이 왜 투표에 실패했는지 확신 할 수 없다. BAR이 사용자 공간에 매핑되었으므로 주소를 읽었습니다. ioremap_nocache() 시간도 계산하고 있습니까? 제 직업의 일환으로 방 전체의 시스템에서 BAR 레지스터를 읽었습니다. 5.5 점이 적습니다. 시스템간에 IB 스위치가있는 Mellanox FDR Infiniband보다 RDMA를 사용하고 있습니다. –