isolcpuオプションとgrubの編集

・isolcpuについて

isolcpusオプションは,複数のコアを持つCPUで,通常のプログラムを実行するCPUとは別に,

isolcpusで通常プログラム用CPU割り当て可能リストから除外したCPUに対して,

リアルタイム性の必要なプログラムを割り当てることで,他のプログラムからの邪魔が入りにくくなったり,

実行するCPUの変更に伴う処理の遅れを削減することが期待されます.

(記事書くにあたって,調べたのですが,正直これ以上のうまい説明はできそうにありません.

詳しく知りたい人は各自調べてください)

・Linuxcncでの役割

効果としては,「base-thread」でのジッタ量が減少することで,

パラレルポートから出せる最大パルス数が増加する効果が期待できます.

これはひいてはステッピングモータの回転速度を上げたりなどCNCの機能向上に役立ちます.

・機能を一時的にオンにするとき

起動時に GNU GRUBと画面上に書いてあるページが出たら,

キーボードの 「e」を押して起動オプションの編集画面に入り,「quiet splash」という文字列を探し,

その後ろに,半角スペースを入れてから,(2コアCPUなら)「isolcpus=1」と入力します.

この際,日本語キーボードがUSキーボードと認識されてしまっていると,

「=」キーを押すと「_」が入力されてしまうことがあります.

その場合は,「^」キーを押すと「=」が入力されるはずです.

正しく入力できたら,「Ctrl+x」キーを押すと起動します.

この方法では,シャットダウンや再起動すると設定がもとに戻るので,

一時的に設定してみたいときにお勧めです.

・恒久的にisolcpusオプションを利用するときの編集方法

grubの設定ファイルは直接編集するのではなく,

いったん編集用ファイルをいじってからそれを反映するという手法を使うそうです.

編集用のファイルも権限がないと書き込みできないようになっているため,

まず,端末(terminal)で以下のように入力します

$ sudo gedit /etc/default/grub

パスワードを訊かれるので,インストール時に設定したものを入力してください.

すると,ルートユーザでメモ帳が起動します.

GRUB_CMDLINE_LINUX_DEFAULTから始まる行の「quiet splash」の後ろに,

半角スペースを入れてから,(2コアCPUなら)以下のように追記します

isolcpus=1

追記したら,保存します.なお,誤字があってもそのあとの登録はできてしまうので注意.

数字には,2コアCPUの場合は0か1,

4コアCPUの場合には0から3までの数字を入力します.

ここでいうCPUとは論理CPUの数なので,ハイパースレッディングしている場合は物理コア数の2倍になります.

入力可能な数値は0から(CPUコアの数-1)までで,

複数指定したい際は,0,1,3 のように,範囲で指定する場合は1-3のようにできます.

http://wiki.linuxcnc.org/cgi-bin/wiki.pl?The_Isolcpus_Boot_Parameter_And_GRUB2

に設定する論理CPUを変えるとレイテンシテストの結果が変化する様子が載っているので,

いろいろと試してみるとよいでしょう.

(=0はあまり良い結果にはならない可能性が高いような気がします.)

保存したら,端末に次のように入力します

$ sudo update-grub

これで,起動時のgrubブートオプションの設定が更新されます.

次回の起動時から,入力したオプションが有効になります.

将来的には,面倒なisolcpusの設定が要らなくなるであろうことが予告されていますが,

当面のマルチコアCPUでの性能向上策としては有望です.

またno-hltやidol=pollなどのオプションも多少効く場合があるようなので,興味があれば試してみるとよいでしょう