게시물 139건
   
Receive-Side Scaling (RSS)
글쓴이 : 최고관리자 날짜 : 2009-12-01 (화) 11:03 조회 : 10822
글주소 :
                          

 
 
 
Receive-Side Scaling (이하 RSS)는 멀티프로세서 시스템에서 여러 개의 CPU를 이용하여 네트워크 수신 처리 부담을 효율적으로 분산하는 기법입니다. 참고: 하이퍼스레드 CPU같은 경우 같은 실행 엔진을 공유하기 때문에 멀티 코어랑 같은 효과가 나지 않습니다. 이 때문에 하이퍼스레드 CPU는 지원하지 않습니다.

수신 데이터를 효율적으로 처리하기 위해서, 미니포트 드라이버는 인터럽트 서비스 함수에서 DPC를 예약합니다. RSS를 안 쓴다면 DPC가 호출될 때 해당 DPC 내에서 수신한 데이터를 모두 처리하게 됩니다. 그런고로 원래는 처음 인터럽트 받은 CPU에서 수신 처리를 전부 하게 되어있습니다.

RSS를 사용하는 경우, NIC와 미니포트 드라이버는 다른 프로세서로 수신 처리하는 DPC를 떠넘길 수 있습니다. 특정 연결에 CPU를 할당해서 처리하는 것도 가능합니다. NIC는 해시 함수를 구현하고, 이 함수의 실행 결과로 나온 해시값을 사용해서 CPU를 고르게 됩니다. 정확히 말하자면 해시값의 LSB를 뽑아서 Indirection 테이블의 엔트리를 선택하고, 엔트리 값에 따라 CPU를 선택하는 것입니다.

이렇게 되면 아래와 같은 성능 개선 효과가 있습니다:
  • 단일 NIC의 수신 처리를 여러 개의 CPU로 분산하면서 처리 지연 시간을 줄입니다. 다른 CPU가 놀고 있고 한 CPU만 죽어라 노가다하는 상황을 방지할 수 있습니다.
  • 가급적 공유하는 데이터는 같은 CPU에서 실행할 수 있도록 해서 스핀락 오버헤드를 줄입니다.
  • 가급적 공유하는 데이터는 같은 CPU에서 실행할 수 있도록 해서 캐시나 다른 리소스의 리로딩을 줄입니다.
RSS 하드웨어 지원은 3가지로 나뉩니다.
  • RSS with a Single Hardware Receive Queue : NIC가 해시값 계산하고 큐에 밀어넣으면, 미니포트 드라이버가 DPC에서 해시값 보고 각 CPU별로 DPC를 다시 걸어서 작업을 분배하는 방식. 모든 DPC가 끝나는 것 확인하고 인터럽트 Enable.
  • RSS with Hardware Queuing : NIC가 해시값 계산도 하고 CPU 별 큐에 밀어넣는 작업까지 전부 다 하는 방식. 미니포트 드라이버는 인터럽트 서비스 함수에서 DPC 호출만 걸어주면 됨. 모든 DPC가 끝나는 것 확인하고 인터럽트 Enable.
  • RSS with MSI-X : NIC가 해시값 계산도 하고 CPU 별 큐에 밀어넣는 작업도 하고 인터럽트까지 아주 그냥 다 해주는 방식. MSI-X 사용.
MSI는 Message-signaled interrupt의 약자로, 비스타는 PCI V2.2 MSI와 PCI V3.0 MSI-X를 지원합니다. MSI-X를 지원하는 미니포트 드라이버라면 interrupt affinity도 지정 가능합니다.

이름 패스워드
비밀글 (체크하면 글쓴이만 내용을 확인할 수 있습니다.)
왼쪽의 글자를 입력하세요.
   

 



 
사이트명 : 모지리네 | 대표 : 이경현 | 개인커뮤니티 : 랭키닷컴 운영체제(OS) | 경기도 성남시 분당구 | 전자우편 : mojily골뱅이chonnom.com Copyright ⓒ www.chonnom.com www.kyunghyun.net www.mojily.net. All rights reserved.