Bisakah saya mempercepat garpu cygwin?

15

Saya menemukan posting membahas kecepatan forking di Cygwin, memberikan 'fork rate' yang diharapkan di Windows XP sekitar 30-50 per detik ( tautan )

Saya punya duo Core 2 (1.79GHz) yang saya harapkan akan mendapatkan hasil yang sebanding, tetapi hanya mengelola sekitar 8 garpu per detik (dan kadang-kadang jauh lebih sedikit):

$ 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

Bisakah Anda menyarankan sesuatu yang saya bisa lakukan untuk mempercepat? Mesin ini bertindak jauh lebih lambat di Cygwin daripada yang lain saya gunakan sebelumnya yang benar-benar berada jauh lebih lambat.

Memperbarui

Biarkan saya membenarkan pertanyaan saya: Saya tidak percaya bahwa memiliki garpu yang lebih cepat secara ajaib akan membuat hidup saya lebih baik, tetapi saya percaya bahwa tolok ukur ini adalah proksi yang baik untuk masalah kinerja yang saya lihat di bash karena penggunaan normal executable eksternal untuk menghitung nilai. Saya menemukan saya mendapatkan kecepatan nyata pada Cygwin dengan melewati shell saya memulai skrip dan bash-completion dan mencoba mengganti perintah eksternal dengan yang internal; di Linux ini bukan masalah. Namun, seringkali, ini tidak mungkin, dan PC saya sekarang mengambil ~ 14s untuk memulai shell dengan cache hangat dan tanpa beban.

Andrew Aylett
sumber
1
Cygwin akan selalu lambat, lebih lambat. Bahkan VirtualBox / VMWare akan memberikan kinerja yang lebih cepat, atau jika Anda memerlukan lingkungan dev, gunakan msys. Tapi ini ... tidak tahu .. tidak pernah benar-benar menemukan cygwin bisa digunakan.
Apache
+1 untuk tolok ukur garpu yang bagus dan sederhana! Hanya menjalankan ini pada VPS Linux 5 $ / bulan untuk membandingkan dengan laptop Windows i7 saya, dan VPS mencetak 30x lebih tinggi.
Mark K Cowan

Jawaban:

2

Ini tidak ada hubungannya dengan garpu yang lambat.

Saya telah melihat cygwin menjalankan anjing lambat ketika direktori "home" windows berada pada drive jaringan. Setiap perintah akan mencari di sana binari memperlambat segalanya dengan sangat cepat.

Lihat jika

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

lebih cepat, jika demikian, itu mungkin masalah Anda

kalau tidak coba jalankan bash melalui strace / ltrace (jika mereka bahkan bekerja di cygwin) dan lihat apa yang dilakukannya ketika dibutuhkan 1 detik untuk mengeksekusi tanggal.

pengguna23307
sumber
1
Sayangnya, mengkodekan jalur tidak membuat perbedaan yang berarti. strace bekerja di Cygwin, tetapi tidak ada yang melompat keluar ketika saya melihat jejaknya.
Andrew Aylett
1

Saya khawatir tidak banyak yang dapat Anda lakukan tentang ini.

Windows tidak memiliki fork()syscall asli sehingga Cygwin harus meniru ini. Namun implementasi dari emulasi ini sangat tidak efisien. (Lihat FAQ Cygwin )

MSYS2, yang sering digunakan dalam aplikasi di mana seseorang menginginkan lingkungan baris perintah seperti Linux yang mungkin berfitur lengkap di Windows, didasarkan pada Cygwin, yang karenanya juga dipengaruhi oleh ini.

Ini sebenarnya sangat buruk, bahwa fork()pada Windows setidaknya satu urutan besarnya lebih lambat daripada di Linux

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

Contoh di atas menunjukkan perbedaan antara i5-2500k @ 4GHz, 32GiB RAM Windows 10 Pro box vs. 1GiB RAM VPS 1 inti yang lemah.

luxifer
sumber
0

Anda tidak melihat garpu; Anda melihat fork, exec, system call untuk membaca waktu siang hari, memformat dan mengonversi output. Belum lagi apa pun yang berbagi waktu secara paralel.

Atas dasar apa yang Anda katakan mesin lain "sebenarnya adalah lebih lambat"? Ada banyak hal yang berkontribusi terhadap kecepatan aktual komputer dan persepsi pengguna tentang kecepatan komputer. Apa yang Anda lakukan di mana fork / detik adalah ukuran kinerja yang baik? Berapa kecepatan memori, arsitektur, dan jumlahnya? Disk I / O kecepatan dan buffering?

Menurut Anda, mana yang akan melakukan lebih banyak fork / detik: Core i7 yang menjalankan Vista dengan RAM 512MB atau Celeron yang menjalankan Linux minimal dengan 2 GB?

mpez0
sumber
@ mpez0: Silakan lihat justifikasi saya yang diperbarui. Untuk menjawab pertanyaan Anda secara khusus, dasar saya untuk mengatakan bahwa mereka lebih lambat adalah bahwa mereka adalah dari arsitektur yang lebih tua dengan kecepatan clock lebih lambat, lebih sedikit (dan lebih lambat) RAM dan lebih tua, lebih lambat disk, tetapi masih XP. Linux hampir selalu lebih cepat dalam forking, karena menggunakan model forking di kernel di mana Windows tidak. Saya memiliki P3 yang skor ~ 60 pada patokan itu :).
Andrew Aylett