XMLファイルでいっぱいのディレクトリを取得し、XSLTを介してCSVにそれらを実行し、すべての変換を単一のファイルに結合するbashコマンドがあります。私は
parallel
を使用しようとしました
、ただし、このコマンドではCPU使用率が100%を超えることはありません。
xargs
を使用できませんこれは、出力が散在するためです。
これには30秒ほどかかりますが、やはり出力が散在しています。
find /path/to/xml -type f -iname '*.xml' -print0 | xargs -0 -P8 xsltproc transform.xsl > out.txt
これには約90秒かかります。シングルコア。
find /path/to/xml -type f -iname '*.xml' -print0 | xargs -0 xsltproc transform.xsl > out.txt
これにも約90秒かかります。シングルコアと同じくらい遅く、
top
からのCPU使用量100%を超えることはありません。
find /path/to/xml -type f -iname '*.xml' -print0 | parallel -0 xsltproc transform.xsl > out.txt
これはとても簡単に思えますが、何が欠けているのかわかりません。誰でも提案を提供できますか?
GNU Parallelには、ジョブごとに5ミリ秒のオーバーヘッドがあります。したがって、ジョブが短命であれば、このオーバーヘッドが制限要因になります。
xsltproc
複数のファイルを引数として取ることができるため、これが役立つ場合があります編集
これが正しい場合:
(混合出力を除く)、
-X
ソリューションも正しいことをしなければなりません。ザ・xargs -P8
ソリューションは多くのファイル名をtransform.xsl
の後に配置します 。-X
の場合も同じです 。xargs -P8
からの出力は確かですか 完全な(混合された)出力ですか?xlstproc
の場合 単一のファイル名でのみ信頼できる動作をします。これを試してください:これにより、
parallel
が生成されます CPUコアごと。そのため、すべてのCPUの100%CPU使用率または100%ディスクI/Oが表示されるはずです。ファイルがキャッシュされている場合、100%のCPU使用率が表示されるはずです。ただし、その多くはGNU Parallelによるものです。