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. 如何irqbalance決定使用哪個套件來處理 IRQ?

答案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. 如何irqbalance決定使用哪個套件來處理 IRQ?

    這當然是 的全部要點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;
    }
    

相關內容