livaの雑記帳

qemu(not kvm)上のゲストOSへのsshが遅くてハゲるので何とかした備忘録

QEMU上でLinux動かす時、kvm有効化しないとめちゃくちゃ遅くないですか?

ゲストOSはUbuntuなんですが、ログインシェル出るまで数分かかるとかありえねぇ!kvm有効化すると10秒掛からずに起動するのに!!

 

・・・みたいな感じで深夜の研究室でブチ切れてたんですが、よく考えたら15年前とかOSの起動って普通に数分かかってましたよね。10年前でも1分近くしたような記憶。

確か、SSDとか出た辺りから起動がどんどん早くなっていったなぁ(しみじみ

 

昔語りしてると老けちゃうので、前置きはこのくらいにして本題へ。

kvm有効化しないqemuが遅いのはまあ仕方ないんですが、ホストからゲストにssh接続するのに10秒掛かるのはありえないだろう、と。ハゲそう

もちろんkvm使えば一瞬で繋がります。でもまあちょっとkvm使いたくない事情があって・・・

 

というわけで、なんとかしてssh接続してシェル出すまでの時間を削減すべく頑張った話。

 

ちなみに環境は以下の通り

  • CPU:Xeon E3-1275 v5 @ 3.60GHz
  • ストレージ:適当に生協で買ったCrucialのSATA SSD
  • メモリ:16GB

 

試したこと

UseDNS no, GSSAPIAuthentication no

鉄板ですね。意味無し。

 

dbusの再起動

ぐぐったら結構でてきた。これも意味なし。

 

公開鍵認証を使わずにパスワード認証にする

意味なし。

ただし、パスワード認証にすると速攻でパスワードを聞かれたので、とりあえずゲストOSがおねんねしているわけではないという事はわかった。

 

UsePrivilegeSeparation no, UseLogin no

後で示すやつを試すついでにもしやと思って試したのだけど、意味なし

 

効果があったもの

ログインシェルをbashからdashにする。

bash重いからねー。これで8秒。

ちなみに計測は人間ストップウォッチです。

 

~/.hushloginを作成する。

ログイン時にずらずら出てくるウェルカムメッセージが明らかに遅いので止める。

これで7秒。

これを作るとmotd周りが全て無効化されるらしい(?)んだけど、個人的には lsb_release -s -d が諸悪の根源であって、こいつを削れば良いんじゃないかとか思ったり。

ubuntu@ubuntu:~$ time lsb_release -s -d

Ubuntu 16.04.4 LTS

real 0m1.155s

user 0m1.056s

sys 0m0.100s

なんでたったこれだけの物を表示するのにこんなに時間が掛かるんだろうね、python3が遅いのかな。

 

で、この状態でも依然7秒。

ssh -vvvの出力を眺めると、

 

debug1: Entering interactive session.

debug1: pledge: network

*** ここで5秒くらい待つ ***

debug3: receive packet: type 80

debug1: client_input_global_request: rtype hostkeys-00@openssh.com want_reply 0

 

みたいな感じ。で、これを短縮したのが次。

 

/etc/ssh/sshd.confの設定で、UsePAM noにする

これで2秒になった。

たぶんPAMとの通信が遅いんだろうね。
PAM使わないと困る事があるのかもしれないけど(よくわかってない)、今の環境ではパット見問題なさそうなので大丈夫。

 

これでssh -vvvしてもサラサラッとログが流れて、すぐログインシェルに到達する。

まあもう少しチマチマした改善はできるのかもしれないけど、体感がそんな変わらなさそうなので、まあ良いかなー、と。

最終的に10秒 →2秒になったので、個人的には満足です。

 

僕の髪の毛は守られた!!!!