2013-07-04 3 views
0

문맥 (중요하지 않지만)하는 넷 필터 모듈에, 우리가 좋아하는 구조체 사용업데이트 전 (memcmp before memcpy) 또는 업데이트만으로 어떤 성능이 더 좋습니까?

struct data { 
    char mac[ETH_ALEN]; 
    char in6_addr addr; 
}; 

MAC 주소와 IPv6 주소를 추적합니다. IPv6 주소 변경을 처리하기위한

:

  1. 내가 새로운 오래된 값 (memcmp는)을 비교해야 다른 경우, 다음 업데이트 (방어 적이기).
  2. 또는 방금 업데이트합니다.

모두 유효한 동작이므로 성능이 주요 관심사입니다. https://jira.mongodb.org/browse/SERVER-66

그들이 "바로 업데이트"방법을 선택할 것 같다

내가 한 비슷한 질문을 발견했다.

+0

얼마나 자주 발생합니까? 전반적인 런타임에 눈에 띄는 차이를 만들 예정입니까? –

+0

우리는 가능한 주소 변경을 반영하여 전달되는 모든 패킷을 검사합니다. 따라서 매우 자주 발생합니다. –

답변

1

가장 좋은 점은 벤치마킹하고 합당한 차이가 있는지 확인하는 것입니다. 다른 주소를 사용하는 것과 비슷한 주소를 사용한다고 가정하면됩니다 (실제 데이터를 사용해야 할 수도 있습니다).

내가 생각할 수있는 유일한 점은 분기 선택을 건너 뛰면 (if (!memmcmp(..))을 피하면 수행 함) 분기 예측기에서 실패 할 가능성을 건너 뜁니다.

+0

사실. 불필요한 캐시 라인 무효화의 비용에 비추어 비교해야합니다. –

+0

코드 분기가 적거나 캐시 라인 무효화가 불필요한 경우? 비슷한 상황에서 우리는 일반적인 예측이나 벤치마킹을해야합니다. –