irqbalance는 사용할 패키지를 어떻게 결정합니까?

irqbalance는 사용할 패키지를 어떻게 결정합니까?

irqbalance --debug다음을 표시합니다.

Package 0: Core 0, 2, 4, 6, 8, 10, 12, 14
Package 1: Core 1, 3, 5, 7, 9, 11, 13

네트워크 응용 프로그램을 실행하면 IRQ는 패킷 1에서 처리되는 것처럼 보이지만 smp_affinityNIC에 대한 IRQ는 패킷 0에 있습니다.

  1. irqbalance구성을 덮어쓰시겠습니까 smp_affinity?
  2. irqbalanceIRQ를 처리하는 데 사용할 패키지를 결정하는 방법은 무엇입니까?

답변1

특별히 큰 프로그램은 아니므로 그냥소스를 확인하세요좋은 생각인 것 같습니다.

  1. irqbalance구성을 덮어쓰시겠습니까 smp_affinity?

    나는 대답이 '아니요'라고 믿습니다. 파일 시스템의 smp_affinity설정을 읽는 것을 명확하게 볼 수 있습니다./procactivate.c:

    sprintf(buf, "/proc/irq/%i/smp_affinity", info->irq);
    file = fopen(buf, "r");
    if (!file)
            return 1;
    if (getline(&line, &size, file)==0) {
            free(line);
            fclose(file);
            return 1;
    }
    cpumask_parse_user(line, strlen(line), current_mask);
    
  2. irqbalanceIRQ를 처리하는 데 사용할 패키지를 결정하는 방법은 무엇입니까?

    물론 이것은 요점 irqbalance이므로 다음 내용은 지나치게 단순화될 수 있습니다.

    하지만 내가 읽은 바에 따르면 관련 기능은 다음과 같습니다.placement.c이라는 함수 내에서 find_best_object_for_irq()를 호출합니다 find_best_object().

    크리티컬 라인은 다음과 같습니다.여기:

    asign = place.least_irqs ? place.least_irqs : place.best;
    

    이는 IRQ가 현재 할당된 IRQ가 가장 적은 위치(예: 패킷)에 할당되거나, 할당되지 않은 경우 "최적" 위치에 할당됨을 나타내는 것으로 보입니다. 여기서 "최적"은 로드가 가장 낮은 위치입니다.

    newload = d->load;
    if (newload < best->best_cost) {
            best->best = d;
            best->best_cost = newload;
            best->least_irqs = NULL;
    }
    

관련 정보