LoginSignup
3
4

More than 5 years have passed since last update.

RSS対応NICのキューをそれぞれCPUに割り当てる

Last updated at Posted at 2014-05-02

RSS対応NICなのに、複数コアに分散されないことがあって、調べると次の記事が出てきて、irqbalanceいれよーってことになるけど、コメント欄で、別に入れなくても良いよ、ってかいてある。

irqbalance昔調べたけど、挙動がよくわかんなくて、結局次のようなシェルスクリプトを書いた、ことを忘れてまた調べていたので、ここに書いておく。irqbalanceはなんかのタイミングでコアの割り当てをぐるぐるまわしてくれるっぽいけど挙動がよくわからなかったので、誰か教えてくれるとうれしい。

set_irq_affinity.sh
#!/bin/bash
#
# = RSS対応NICの各キューをCPUコアに割り当てるスクリプト
#
# Author::  harukasan <harukasan@pixiv.com>
# License:: MIT
#
# == Ref
# http://d.hatena.ne.jp/sfujiwara/20121221/1356084456のコメント欄
#
# == NOTE
# irqbalaceを使うとよくわからないタイミングでコア割り当てを
# 変更されるので、起動しないようにしておく
#

# affinityを書き込む
# @param irq  integer IRQ番号
# @param mask integer ビットマスク
set_affinity()
{
    local irq=$1
    local mask=$2
    printf "set /proc/irq/%d/smp_affinity to '%X'\n" $irq $mask
    printf "%X" $mask > /proc/irq/$irq/smp_affinity
}

#
# MAIN
#
DEV="eth0" # SET NIC
NUM_CPU=`grep processor /proc/cpuinfo | wc -l`

I=0
for IRQ in `cat /proc/interrupts | egrep -i "$DEV.*-[0-9]$" | cut -d: -f1 | sed "s/ //g"`
do
    MASK=$((1<<$I%$NUM_CPU)) # MASK = 1 << I % NUM_CPU
    I=$((I+1))
    set_affinity $IRQ $MASK
done
3
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
4