読者です 読者をやめる 読者になる 読者になる

VirtualBox + CentOS6.5 + Mac で 仮想CPUの数を増やすと SSHのシェル操作が遅い

VirtualBox 4.3.8 + CentOS6.5 + Mac (Mavericks) でゲストの仮想CPUの数を増やすと SSHのシェル操作がやったら遅いという問題があります。シェルでキー入力する度につっかかる感じがあります。

VirtualBoxのドキュメントや Linuxカーネル周りでいろいろ調べてるけど、原因が分かりません ...

再現にあたって下記の Vagrantfile を使うとよいと思います

# -*- mode: ruby -*-
# vi: set ft=ruby :

# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
  config.vm.box     = "CentOS 6.5 x86_64"
  config.vm.box_url = "https://github.com/2creatives/vagrant-centos/releases/download/v6.5.1/centos65-x86_64-20131205.box"
  config.vm.provider :virtualbox do |vb|
    vb.gui = true
    vb.customize ["modifyvm", :id, "--cpus", 4]
    vb.customize ["modifyvm", :id, "--ioapic", "on"]
    vb.customize ["modifyvm", :id, "--natdnsproxy1", "off"]
    vb.customize ["modifyvm", :id, "--natdnshostresolver1", "off"]
  end
end

とりあえずのワークアラウンド

CPU の数に応じてネットワーク割り込みのCPU番号を /proc/irq/19/smp_affinity/ で変えると改善します。IRQ 19 は virtio-net ドライバです ( IRQが環境によって変わることあるのかな? )

仮想CPU 2個の場合

# CPU1 で IRQ19 の割り込みをうける
echo 2 | sudo tee /proc/irq/19/smp_affinity

仮想CPU 3個の場合

# CPU2 で IRQ19 の割り込みをうける
echo 4 | sudo tee /proc/irq/19/smp_affinity

仮想CPU 4個の場合

# CPU3 で IRQ19 の割り込みをうける
echo 8 | sudo tee /proc/irq/19/smp_affinity

他に試したこと

  • ググると、コア数増やしたら --ioapic on にしろってな回答あるけど、現行ではデフォルト on ぽいので有効でない
  • VirtualBox はデフォルトで virtio-net ドライバを使うので、別のドライバに変えたりしてみたが改善した感じでもない
  • カーネルのバージョン上げたら ( 3.13.6 ) 若干マシな気はする
  • resolv.conf `options single-request-reopen` に書くやつは DNSの名前解決時なので、関係ない

いずれにせよ定量的な評価の仕方が分からないので「なんとなくもっさり」の感想レベルでしか判別してないです。調査方法がんばります ... 

P.S

社内向けに書いたネタの転載なのでした