PCI버스 카드의 실질적인 Data 전송 속도는 얼마인가요?

siva1976의 이미지

PCI버스 카드의 실질적인 Data 전송 속도는 얼마인가요?
PCI버스는 33Mhz 32bits 버스인걸로 아는데요.
이럴경우 실질적인 평균 전송속도를 추정할 수 있는 방법좀 알려주세요.

계산상으로는 133MBytes/s입니다만 현재 윈도우에서 테스트한 결과를 보면 8MBytes/s는 성공했는데 16MBytes/s는 성공하지 못했습니다.

PLX9056을 사용했구요 로컬버스는 66MHz를 사용하구요 32bits버스, J모드를 사용했습니다.

여기저기 찾아보니 Gbit이더넷 카드도 PCI로 되어있으면 실질적인 전송속도는 90Mbps정도라고 이야기 하던데요.
OS와 PCI프로토콜의 오버해드를 감안하면 이정도 속도가 한계인것인지요?

블루스크린의 이미지

PCI Gbit이더넷 카드 사용해보니(리얼텍8169), 실제 속도 400~500Mbps 나옵니다 (윈xp, iperf로 시험).
PCI 가 문제가 아니라 사용한 칩셋이나 CPU의 한계가 아닐까요.

----------------------------------------------------------------------------------------------------
이 댓글(comment)의 수정 및 삭제를 위해 이 글에 답글(reply)을 쓰지 말아 주십시요.
의견이 있으시면 원 글에 댓글(comment)로 써 주세요

-------------------------------------------------------------------------------
이 댓글(comment)의 수정 및 삭제를 위해 이 글에 답글(reply)을 쓰지 말아 주십시요.
의견이 있으시면 원 글에 댓글(comment)로 써 주세요.

김동수의 이미지

PCI 인터페이스는 (칩셋에 따라 다르긴 합니다만) 대역폭을 모두 공유해서 사용합니다.
문제는, 슬롯들만 대역폭을 공유하는게 아니라, pci버스에 연결된 모든 녀석들이 대역폭을 공유하는 설계로 되어 있습니다. (independent 한 칩들도 있습니다. ServerWorks 등에서 나온 칩이라던가..)

뭐 하여간, 결론만 이야기 하자면 32bit/33Mhz 버스의 경우는 이론상 133MB/s 가 나와야 하나, 실질적으로는 100MB/s 근처로 나오는게 일반적이더군요.
물론, 이 수치는 훨씬 더 떨어질수도, 약간 더 잘 나올 수도 있긴 하지만 아주 일반적인 환경에서 단는 100MB/s 근처로 나옵니다.

-------------------------------------
김동수 - Prototype for Evolution

김동수 - Prototype for Evolution

siva1976의 이미지

답변 감사합니다.
그렇다면 PCI버스 드라이버 사용에 있어서 100MB/s를 유지하기 위해서는 버스 전체를 거의 독점해야 한다는 답변으로 봐도 되는지요?
독점을 하기 위해서 프로그램(드라이버 운영)즉 커널로부터 획득해야 하는 사용권한 또는 PCI 드라이버 설정이 필요한지요?

김동수의 이미지

기본적으로 PCI장치들은 대역폭을 시분할로 나눠서 이용하게 됩니다.
즉, 장치 A,B,C 가 있을때 A가 먼저 쓰고, 그다음 B가 쓰고, 그다음 C가 쓰고 이런 형태를 가지게 되지요.

즉, PCI 컨트롤러에 각 장치들이 대역폭 사용 허가를 받아서 사용하는 그런 꾸리한 구조로 되어 있는데, 이 사용 허가라는게 단순히 라운드로빈으로 빙빙 돌리는게 아니라, 그 안에서도 우선권을 가진 장치의 요청을 먼저 처리하는 그런 방법을 사용하고 있습니다. 즉 장치 측에서 "나는 긴급해요" 라고 요청을 해야 한다는 것이죠.

즉, 해당 문제를 회피하는 방법은 크게 세가지가 있을 수 있는데...
첫번째로 가장 간단한 "PCI장치 드라이버에서 무조건 우선권을 높여서 PCI버스 사용권을 요청한다." 라는 방법이 있을 수 있겠고, 두번째로는 PCI장치의 사용권이 스위칭 되는 타임을 길게 갖는 방법이 존재하겠네요.

PCI장치의 대역 사용권의 최소 단위는 뭐 데스크탑 컴퓨터의 BIOS보시면 거의 모든 메인보드에서 세팅을 할 수 있는 메뉴가 존재하는데.. "PCI 레이턴시 타이머" 라는 항목이 존재합니다. 이건 pci를 사용하는 컴퓨터에서는 하드웨어적, 소프트웨어적으로 설정이 가능한 부분입니다만, 그게 static하게 박혀있을지는 플렛폼마다 조금씩 틀려서 뭐라고 이야기 하기가 어렵네요. 하여튼 저 값이 32Clk 로 설정되어 있는게 대부분인데, PCI대역을 긴 시간동안 점유하는 장치가 있을 경우 이 수치를 변경하면 일정 이상의 성능 향상을 볼 수 있습니다. 물론 그에 따른 오버헤드도 존재하지요.

마지막으로 세번째 방법은 PCI드라이버상에서 장치를 검색하고, 해당 장치(대역폭을 점유할 장치) 가 아니라면 강제적으로 sleep 상태로 만들어 버리는 방법인데, 이는 추천하지 않습니다. 부작용이 어마어마 합니다^^;

PS. 만약에 성능이 비상식적일 정도로 안 나온다면 DMA관련쪽을 한번 살펴 보시기 바랍니다.

-------------------------------------
김동수 - Prototype for Evolution

김동수 - Prototype for Evolution

siva1976의 이미지

답변 감사합니다.
그렇다면 PCI버스 드라이버 사용에 있어서 100MB/s를 유지하기 위해서는 버스 전체를 거의 독점해야 한다는 답변으로 봐도 되는지요?
독점을 하기 위해서 프로그램(드라이버 운영)즉 커널로부터 획득해야 하는 사용권한 또는 PCI 드라이버 설정이 필요한지요?

rainroot의 이미지


기본 인텔 보드를 기준으로 생각한다면.. 거의 모든 장치가 pci bus를 사용합니다.

단 임베디드 보드는 h/w구조에 따라서 100%는 아니더라도 80%정도는 독점적으로 사용 할수 있죠.

우선. 보드의 H/W적 구조를 분석해 보세요. 단순히 kernel에서 어떤 부분을 수정해서는 해결 방법이 없습니다.

ohhara의 이미지

느린 원인은 pci analyzer를 사용하거나 logic analyzer를 써서 pci신호를 직접 보는 것이 좋습니다.

테스트는 어떻게 했는지 잘 모르겠는데 보통 pci device가 slave로 되는 것보다 pci device가 master가 되는게 더 빠른 속도가 나오는 경향이 있으니 한번 pci device를 master로 되어 있는지도 확인해 보시기 바랍니다.

pci bus에 연결되어 있는 device중에 한개라도 66MHz를 지원하지 않으면 33MHz로 작동합니다. 이것도 확인해 보는 것이 좋을 것 같습니다.

같은 pci device를 다른 mainboard에 바꿔꼽아보면서 살펴보는 것도 도움이 됩니다. mainboard chipset에 따라 성능이 매우 다르게 나옵니다. logic analyzer나 pci analyzer로 신호를 참고해 보면 도움이 많이 될 것입니다.

Taeho Oh ( ohhara@postech.edu , ohhara@plus.or.kr ) http://ohhara.sarang.net
Postech ( Pohang University of Science and Technology ) http://www.postech.edu
Digital Media Professionals Inc. http://www.dmprof.com

Taeho Oh ( ohhara@postech.edu ) http://ohhara.sarang.net
Postech ( Pohang University of Science and Technology ) http://www.postech.edu
Alticast Corp. http://www.alticast.com

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.