Mercurial-2.6の並列になったupdateの注意点

いくつか注意点があることを id:flying-foozy さんに指摘してもらったので紹介します。

並列updateで10万規模のファイルを一度に更新するとlinux kernelでsoft lockupと誤認される

10万規模のファイルを更新するとlinux kernelでsoft lockupと誤認されるようです。

バグとして登録されているのですが、linux kernel側の問題ということで、mercurial側で対応する気はないようです。

soft lockupとはタスクやカーネルスレッドがCPUを一定時間専有している状態(一定時間割り込みが禁止されている状態)を指すらしく、 通常はカーネルのバグかハードウェアのバグで発生するみたいです。(遭遇したこと無い、、)

そもそも10万ファイルあるような巨大なリポジトリを利用するケースは少ないと思いますが、*1 この問題に遭遇した場合は、次で紹介するworker.numcpusで調整すると良いかもしれません。

並列実行のworker数はhgrcのworker.numcpusで設定可能

並列実行のworker数はhgrcのworker.numcpusで設定可能です。

[worker]
numcpus = 1 # 並列実行しない

未設定の場合、worker数はCPU数に応じて4から32の間になります。

POSIX環境(≒Windows)では並列updateが利用できない

POSIX環境ではworkerの起動コスト1e30という非常に大きな値にする事によって実質並列updateが行われないように調整されています。

気になった点

よく見ると、この2つのif文の条件は両方ともif os.name == 'posix'で良い気がします。

*1:mozilla-centralでさえ7万8千ファイル