두 개의 스레드가있는 응용 프로그램이 있는데 thread1이 네트워크 카드 eth1에서 멀티 캐스트 패키지 을 받았다면 sched_setaffinity를 사용하여 CPU 선호도를 설정하는 데 을 할당 한 다음 thread2를 사용하여 이 패키지를 사용합니다. (힙 영역의 전역 변수에있는 thread1에서 수신) 일부 작업을 수행하려면 코어 1과 코어 7이 하이퍼 스레딩을 사용하는 동일한 코어에 인 것으로 가정하고 thread2에 대한 CPU 친 화성을 코어 7로 설정한다고 가정하십시오. 코어 1과 코어 7이 L1 캐시를 사용할 수 있기 때문에 성능이 좋을 것이라고 생각합니다 ( ).리눅스에서 네트워크 성능 튜닝
나는/proc 디렉토리/인터럽트가, 것 내가, 내가, thread1 핵심 1 CPU 선호도를 설정 eth1를 내 경우에 그렇게 여러 CPU 코어에 을 인터럽트를 가지고 볼 수 있지만 인터럽트가 많은 코어에
무슨 일이 있었 효과를 본 성능? eth1 에서받은 패키지는 어떤 코어가 인터럽트를 가지고 있더라도 직접 메인 메모리로 이동합니까?
리눅스 커널에 대한 네트워크에 대해 잘 모릅니다. 도서 또는 웹 사이트에서이 주제에 대해 도움을 줄 수있는 사람이 있습니까? 의견 ~
편집 주셔서 감사합니다 "모든 프로그래머가 메모리에 대해 알아야 할 사항"에 따라 6.3.5는 "직접 캐시 액세스가"나는 "DCA"생각 나는 알고 싶다 hwat입니다 ...
고맙습니다. Mats, 내 서버는 하이퍼 스레딩 기능이있는 6 코어, 12 유닛으로 구성되어 있습니다. 물어봐도 될까요, 어떻게 네트 카드 사용 DMA 여부를 확인할 수 있습니까? 그 패킷이 DMA를 사용한다면, 모든 패킷이 메인 메모리로 직접 이동하게되므로,이 경우 패킷은 메인 moery에로드되고 코어 1 (core 1) 캐시를 실행하는 thread1로 이동합니다. – barfatchen
정확히 어떻게 작동하는지 알지 못합니다 (드라이버의 소스 코드를 보지 않고). 하지만 대부분의 카드는 CPU를 사용하지 않고 메모리에 직접 쓸 것입니다. 즉, 캐시에 이미있는 데이터를 덮어 쓰는 데이터가 들어올 때 캐시 라인이 무효화된다는 것만 알 수 있습니다. 주 메모리는 "코어 당"이 아니므로 스레드가 실행중인 코어가 패킷 처리 중일 때 관련 데이터로 캐시를 채 웁니다. –