cygwinのフォークを高速化できますか?


15

Cygwinでのフォークの速度について議論している投稿に出会いました。WindowsXPで予想される「フォークレート」は1秒あたり約30〜50です(link

同等の結果が得られると予想されるCore 2デュオ(1.79GHz)がありますが、管理しているのは1秒あたり約8フォーク(そしてもっと少ない場合もあります)です。

$ while (true); do date --utc; done | uniq -c
      5 Wed Apr 21 12:38:10 UTC 2010
      6 Wed Apr 21 12:38:11 UTC 2010
      1 Wed Apr 21 12:38:12 UTC 2010
      1 Wed Apr 21 12:38:13 UTC 2010
      8 Wed Apr 21 12:38:14 UTC 2010
      8 Wed Apr 21 12:38:15 UTC 2010
      6 Wed Apr 21 12:38:16 UTC 2010
      1 Wed Apr 21 12:38:18 UTC 2010
      9 Wed Apr 21 12:38:19 UTC 2010

物事をスピードアップするために私ができるかもしれない何かを提案できますか?このマシンは、Cygwinでは、以前に使用した他のマシンよりもかなり遅くなります、実際はかなり遅くなりました。

更新

私の質問を正当化します:より速いフォークを持つことは魔法のように私の人生を良くするとは思わないが、このベンチマークは外部実行可能ファイルの通常の使用のためにbashで見ているパフォーマンスの問題の良いプロキシだと思う値を計算します。シェルの起動スクリプトとbash-completionを実行し、外部コマンドを内部コマンドに置き換えようとすることで、Cygwinの速度が大幅に向上します。Linuxでは、これは問題ではありません。しかし、多くの場合、これは不可能であり、私のPCは現在、ウォームキャッシュで負荷のないシェルを開始するのに最大14秒かかります。


1
Cygwinは常に遅くなります。VirtualBox / VMWareでさえパフォーマンスが向上します。開発環境が必要な場合は、msysを使用してください。しかし、これは...わかりません.. cygwinを実際に使用できるとは決して思いませんでした。
Apacheの

素晴らしくシンプルなフォークベンチマークのために+1!私のi7 Windowsラップトップと比較するために、これを月額5ドルのLinux VPSで実行したところ、VPSのスコアが30倍高くなりました。
マークKコーワン14

回答:


2

これは、フォークが遅いこととは関係ありません。

Windowsの「ホーム」ディレクトリがネットワークドライブ上にある場合、cygwin run dogが遅くなるのを見ました。すべての単一コマンドがそこでバイナリを検索し、物事を非常に遅くします。

見るか

while (true); do /bin/date --utc; done | uniq -c

もしそうなら、それはおそらくあなたの問題です

それ以外の場合は、strace / ltraceを使用してbashを実行して(cygwinでも動作する場合)、dateの実行に1秒かかるときに何をしているのかを確認します。


1
残念ながら、パスをハードコーディングしてもそれほど大きな違いはありません。straceはCygwinで動作しますが、トレースを見ると何も飛び出しません。
アンドリューエイレット

1

私はあなたがこれについてできることは何もないと思います。

Windowsにはネイティブfork()syscall がないため、Cygwinはこれをエミュレートする必要があります。ただし、このエミュレーションの実装は非常に非効率的です。(Cygwin FAQを参照してください

MSYS2は、Windows上でフル機能のLinuxライクなコマンドライン環境を必要とするアプリケーションでよく使用されますが、Cygwinに基づいているため、この影響も受けます。

実際には非常に悪いので、fork()Windowsの場合はLinuxの場合より少なくとも 1桁遅くなります。

msys2bash-windows-box$ time { date; }
Sa, 24. Feb 2018 16:51:44

real    0m0,046s
user    0m0,000s
sys     0m0,000s

msys2bash-windows-box$ while (true); do /bin/date --utc; done | uniq -c
     13 Sa, 24. Feb 2018 15:57:18
     17 Sa, 24. Feb 2018 15:57:19
     16 Sa, 24. Feb 2018 15:57:20


bash-linux-box$ time { date; }
Sat Feb 24 15:51:54 UTC 2018

real    0m0.002s
user    0m0.000s
sys     0m0.000s

bash-linux-box$ while (true); do date --utc; done | uniq -c
    211 Sat Feb 24 15:56:35 UTC 2018
    286 Sat Feb 24 15:56:36 UTC 2018
    260 Sat Feb 24 15:56:37 UTC 2018

上記の例は、i5-2500k @ 4GHz、32GiB RAM Windows 10 Proボックスと、弱い1コア、1GiB RAM VPSの違いを示しています


0

あなたはフォークを見ていません。fork、exec、時刻を読み取るシステムコール、出力のフォーマットおよび変換が表示されます。言うまでもなく、並行して時間を共有するものは何でもありません。

他のマシンは「実際に遅い」とどのように言っていますか?コンピューターの実際の速度とユーザーのコンピューター速度の認識に寄与するものはたくさんあります。フォーク/秒がパフォーマンスの良い尺度である場合、どのようなことをしていますか?メモリの速度、アーキテクチャ、および量はどのくらいですか?ディスクI / O速度とバッファリング?

512 MBのRAMを搭載したVistaを実行するCore i7と2 GBの最小Linuxを実行するCeleronのどちらが、より多くのフォーク/秒を実行すると思いますか?


@ mpez0:最新の正当化をご覧ください。あなたの質問に具体的に答えるために、彼らが遅いと言った私の根拠は、彼らがより遅いクロック速度、より少ない(そしてより遅い)RAMとより古い、より遅いディスク、それでもXPである古いアーキテクチャのものだったということです。Linuxは、Windowsが使用しないカーネルで分岐モデルを使用するため、ほとんど常に分岐が高速になります。私はそのベンチマークで〜60点を獲得するP3を持っています:)。
アンドリューエイレット
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.