なぜ「猫」はこの奇妙な時間の振る舞いをしたのですか?


8

catさまざまなファイルを1つの大きなファイルにパイプするために使用しています。異なるファイルの数は2つから10個までさまざまですが、すべてのファイルの合計サイズは常に同じです(数GB)。

私の問題:合計6つのファイルがあるケースに到達するたびに、それらのピークを連結するのにかかる時間(つまり、5つまたは7つを使用した場合よりも大幅に長い)があり、その理由がわかりません。

誰かがアイデアを持っていますか?

ファイル(すべて同じサイズ)

output
outputTEMP1
outputTEMP2
outputTEMP3
outputTEMP4
outputTEMP5

コマンド

cat outputTEMP* >> output && rm -f outputTEMP*

現在、機械はいくつかの計算を実行する必要がありますが、新しい測定値が利用可能になったときに後で更新します。


使用している正確なコマンドラインは何ですか?
innM 2009

コマンドラインを追加しました。
brandstaetter 2009

これは確かに奇妙です。なぜこのように動作するのかはわかりませんが、プレーンテキストのバグレポートをbug-coreutils@gnu.orgに提出する必要があります。
レイノルズ

測定してください!そして、測定するときはキャッシュしないようにしてください!
Davide、

回答:


4

この問題をデバッグする1つの方法は、straceを使用することです。

strace -tt -e trace=open,close -o /tmp/strace.cat.log cat apt.list authors.txt >/tmp/t.test
cat /tmp/strace.cat.log 

23:12:08.022588 open("apt.list", O_RDONLY|O_LARGEFILE) = 3
23:12:08.023451 close(3)                = 0
23:12:08.023717 open("authors.txt", O_RDONLY|O_LARGEFILE) = 3
23:12:08.025403 close(3)                = 0

-ttオプションは、システムコールのタイムスタンプをミリ秒単位で記録します。-e trace = open、close log only open、close API。それらを削除してみると、非常にノイズの多いログファイルが表示されます。


2

したがって、Davidesのコメントは適切です。正確な評価を行うには、ここで2つのことが必要です。

  1. 保証キャッシングはシナリオの一部ではありません
  2. かかっている時間の実際の測定。

ディスクスペースがあると仮定して、これが実際の問題であるかどうかをより正確に判断するテストシナリオについて説明します。もしそうなら、このアプローチからの裏付けとなる証拠は、開発者がそれが本物であることを知り、それを再現できるようにするのに役立ちます。

問題の切り分けに役立つように、ここではrmの部分はまったく行わないでください。TEMPファイルを後で配置します。必要に応じて、後で「rm」部分を実行してテストを繰り返すことができます。

テストシナリオは次のとおりです。

  • 9つのディレクトリを作成します-ファイルの数量ごとに1つ(2 3 4 5 6 7 8 9および10)-スペースがない場合は、2、5、6、7、および10を実行します。
  • これらの各ディレクトリに異なるファイルを配置していることを確認してください。どこにも重複はありません
  • 次のようにtimeコマンドを使用します。

    時間(cat outputTEMP * >> output)

実行した各テストについて報告された実際の数、ユーザー数、およびシステム番号をキャプチャします。

私はレイノルズに同意します。これが本当なら、間違いなく詳細をbug-coreutils@gnu.orgにメールしてください。


別の考え:同じ合計量のデータを出力ファイルに確実にコピーするため。それは1GBの合計だのであれば、あなたは1/2 GBが大きかったファイルを持っているでしょう、と「10」ディレクトリにあなたはGB大などの1/10にあるファイルを持っているでしょう「2」ディレクトリに
PBRを
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.