Doom-emacs: Ivy proyektil menemukan file / penyelesaian SANGAT lambat, CPU sampai 100%, dan mesin kadang-kadang terkunci?

Dibuat pada 1 Agu 2018  ·  23Komentar  ·  Sumber: hlissner/doom-emacs

Perilaku yang diamati

Dalam folder proyek besar (400+ file?) File pencarian proyektil dengan Ivy SANGAT lambat, dengan pemrosesan CPU melonjak hingga hampir 100% dan terkadang bahkan mengunci mesin saya. Apakah masalah penyelesaian Ivy ini dengan proyektil?

Di bawah ini adalah tangkapan layar yang menunjukkan perilaku tersebut. Pada tangkapan layar di bawah ini, saya telah mengetik src/services/submit-order-service/index.js sepenuhnya. Kita dapat melihat bahwa file pencarian Ivy Projectile macet di src/services dan bahwa pemrosesan CPU saya telah melonjak hingga 99,8% persen dan clocking. Sistem saya pada gambar di bawah ini hampir sepenuhnya terkunci!

screen shot 2018-07-31 at 4 40 06 pm

Ivy menjadi benar-benar tidak dapat digunakan untuk saya. Saya telah beralih menggunakan HELM dan tidak memiliki masalah dengan helm-proyektil dan menemukan file / penyelesaian. Semuanya lancar dan cepat dengan HELM. Namun, saya masih lebih suka menggunakan Ivy 😢

Apakah mungkin terkait dengan komit penggabungan ini? https://github.com/hlissner/doom-emacs/pull/740

Perilaku yang diharapkan

Ivy proyektil menemukan file / penyelesaian (file pengetikan SPC pp + yang kami cari) agar lancar dan cepat. Penyelesaian Ivy menjadi secepat menemukan file biasa (SPC f.) Dan file pencarian proyektil HELM.

Langkah-langkah untuk mereproduksi

  1. Gunakan Ivy alih-alih HELM, ido
  2. Dapatkan proyek besar yang diindeks dengan Proyektil
  3. Pilih proyek proyektil menggunakan SPC - p - p + pilih proyek
  4. Mulai penyelesaian Ivy untuk menemukan file jauh di dalam folder proyek mencari file di folder dengan banyak file (300-400 + file)
  5. Amati pemrosesan CPU yang meroket hingga 100% dan penguncian mesin 😢

Sistem Informasi

Saya menggunakan develop cabang DOOM dan bekerja. Saat ini telah menginstal HELM dan menonaktifkan Ivy.

Beri tahu saya jika Anda ingin saya mengaktifkan kembali Ivy dan melakukan dump debug lengkap!


Klik untuk memperluas

Replace this line with the output of *one* of these commands:

+ `M-x doom/info` (from inside Emacs)
+ `DEBUG=1 make doctor` (command line)

bug

Semua 23 komentar

Jika itu berfungsi dengan baik untuk kemudi, saya curiga ini mungkin kesalahan Doom. Coba ini dan lihat apakah itu membantu:

(after! counsel-projectile
  (ivy-set-display-transformer
   'counsel-projectile-find-file
   'counsel-projectile-find-file-transformer))

Sebenarnya, semakin saya memikirkannya, semakin kecil kemungkinan Doom yang harus disalahkan. Cuplikan di atas membatalkan modifikasi _only_ Doom yang diterapkan pada proyektil ivy + yang dapat mengganggu proses pembuatan daftar file, dan default dari konsel menghabiskan jumlah siklus yang sama.

Selain itu, 300-400 file sebenarnya cukup kecil. Doom memiliki ~ 390 * .el file dalam modules/ saja, dan itu mengindeks hampir seketika, terlepas dari penggunaan proyektil backend ( git-grep atau find ).

Jadi mari kita coba ini:

  1. Beralih ke proyek masalah secara manual (yaitu beralih ke file di dalamnya dengan M-x find-file )
  2. Nyalakan profiler dengan M-x doom/toggle-profiler
  3. Panggil counsel-projectile-find-file dengan SPC SPC (jika Anda telah mengembalikannya, itu juga terikat ke SPC f / )
  4. jika terlalu lama, tumbuk C-g sampai dibatalkan, jika tidak coba tunggu.
  5. Jalankan M-x doom/toggle-profiler agar Doom membuat laporan tentang apa yang telah dilakukannya selama ini.

Itu akan membantu kami mengetahui di mana Emacs berjuang!

Saya pernah mengalami hal serupa. Kami memiliki banyak file dalam proyek kami
dan lebih dari 6 karakter dengan pencarian fuzzy default
menggiling hingga berhenti.

Pada Rabu, 1 Agustus 2018, 15:28 Henrik Lissner, [email protected]
menulis:

Sebenarnya, semakin saya memikirkannya, semakin kecil kemungkinan Doom yang harus disalahkan. Itu
potongan di atas membatalkan satu -
ivy + proyektil yang dapat mengganggu proses pembuatan daftar file,
dan default konselor mengkonsumsi jumlah siklus yang sama.

Selain itu, 300-400 file sebenarnya cukup kecil. Doom memiliki ~ 390 file
modul / sendiri, dan itu mengindeks hampir seketika, terlepas dari
penggunaan proyektil backend (git-grep atau temukan).

Jadi mari kita coba ini:

  1. Beralih ke proyek masalah secara manual (yaitu beralih ke file
    di dalamnya dengan Mx find-file)
  2. Nyalakan profiler dengan Mx doom / toggle-profiler
  3. Panggil konseling-proyektil-temukan-file dengan SPC SPC (jika Anda telah pulih
    itu, itu juga terikat ke SPC f /)
  4. Setelah selesai, atau terlalu lama, tumbuk Cg sampai batal
  5. Jalankan Mx doom / toggle-profiler agar Doom membuat laporan
    apa yang telah dilakukannya selama ini.

Itu akan membantu kami mengetahui di mana Emacs berjuang!

-
Anda menerima ini karena Anda berlangganan utas ini.
Balas email ini secara langsung, lihat di GitHub
https://github.com/hlissner/doom-emacs/issues/774#issuecomment-409594778 ,
atau nonaktifkan utasnya
https://github.com/notifications/unsubscribe-auth/AABRjpogQ8anoNyRgmFuephVn2SwBqpUks5uMbslgaJpZM4Vqh3p
.

@ocharles Apakah Anda pengguna windows? Proyektil kembali ke implementasi elisp di sana, yang secara signifikan lebih lambat.

Meskipun hal itu memunculkan kemungkinan baru: apakah Anda berdua mengaktifkan +fuzzy untuk modul :completion ivy ?

Saya menggunakan default init.example.el yang diperbarui setiap kali diperbarui.
Ini secara default telah mengaktifkan (ivy +fuzzy) , benar?

Tentu saja karena masalah ini muncul, saat ini saya menggunakan (helm +fuzzy) 😄

Akan mencoba rekomendasi profiler Anda nanti malam ketika saya punya kesempatan!

Ah begitu, ya, +fuzzy diaktifkan secara default dan sepertinya penyebabnya. Saya tidak menggunakannya karena implikasi kinerja.

Bisakah Anda mencoba menonaktifkannya (kemudian menjalankan bin/doom refresh )?

Pencarian fuzzy didukung oleh flx , yang mungkin menjadi penyebabnya. Saya berencana untuk beralih ke presclient , yang mengklaim lebih cepat, tetapi saya ingin memastikan sebelum melakukannya.

@hlner Hmm? Saya menggunakan (helm +fuzzy) sebagai cadangan sekarang tanpa masalah apa pun dan ini super cepat dan lancar.

+fuzzy akan memiliki implikasi kinerja yang berbeda ketika digunakan dengan Ivy vs HELM?

Tidak, Linux dan saya menggunakan + fuzzy (dan + childframe)

Pada Rabu, 1 Agustus 2018, 16:02 Henrik Lissner, [email protected]
menulis:

@ocharles https://github.com/ocharles Apakah Anda pengguna windows?
Proyektil kembali ke implementasi elisp di sana, yaitu
jauh lebih lambat.

Meskipun hal itu memunculkan kemungkinan baru: lakukan yang Anda berdua miliki
+ fuzzy diaktifkan untuk: modul ivy penyelesaian?

-
Anda menerima ini karena Anda disebutkan.

Balas email ini secara langsung, lihat di GitHub
https://github.com/hlissner/doom-emacs/issues/774#issuecomment-409606418 ,
atau nonaktifkan utasnya
https://github.com/notifications/unsubscribe-auth/AABRjkrD8n-wiLbKJANhWZLQo4srhMWQks5uMcLzgaJpZM4Vqh3p
.

+ fuzzy akan memiliki implikasi kinerja yang berbeda saat digunakan dengan Ivy vs HELM?

@alfyfan Itu mungkin. Mungkin bukan flx , tapi bagaimana ivy / helm mengimplementasikannya. Ini akan membantu menghilangkan kemungkinan. Jika menonaktifkan +fuzzy tidak mengubah apa pun, setidaknya itu akan memberi tahu saya di mana tidak perlu mencari.

@hlner Anda mengerti! 💯

Saya baru saja menguji Ivy tanpa +fuzzy dan itu bekerja dengan baik dan super cepat !! Jika saya mengaktifkan kembali

(ivy
  +fuzzy)

Kemudian itu keluar lagi seperti yang saya jelaskan. Saya menjalankan make pada setiap modifikasi konfigurasi. Tampaknya masalahnya pasti dengan implementasi Ivy flx karena Helm baik-baik saja! 🤔

Baiklah, saya telah mengganti flx dengan prescient, yang saya harap akan lebih cepat untuk pengguna +fuzzy (belum lagi, membawa penyortiran frecency ke berbagai perintah).

Cobalah dan beri tahu saya jika itu telah meningkatkan kinerja konseling-proyektil-temukan-file dalam proyek-proyek besar.

Saya telah menggunakan counsel-fzf untuk pencarian fuzzy, yang merupakan bagian dari ivy dan menggunakan fzf . Apakah ada keuntungan untuk mengaktifkan +fuzzy ?

@hlissner baru saja mendapatkan yang terbaru dari develop . Menjalankan make dan menghapus flx dan menginstal ivy-prescient .

Maaf untuk melaporkan bahwa kinerja sama buruknya dengan ivy-prescient seperti dengan flx , bahkan mungkin sedikit lebih buruk! 😭 Saya masih membuka Activity Monitor saat mengetik ini dan Emacs adalah @ 100% CPU dan telah macet di sana selama beberapa menit.

Saya akan mencoba saran profiler Anda sebelumnya dan melaporkan kembali jika saya menemukan sesuatu!

@hlissner mencoba metode profiler yang Anda jelaskan di sini (menggunakan ivy-prescient ):
https://github.com/hlissner/doom-emacs/issues/774#issuecomment -409594778

CPU melonjak ke 100% lagi jadi saya harus menghentikannya dengan C-g .

Inilah yang saya dapatkan di laporan:
screen shot 2018-08-02 at 11 21 32 am

Apakah itu membantu?

@hliebert counsel-fzf lebih unggul untuk pencarian file, karena fzf pasti cepat, meskipun Anda mengorbankan beberapa tambahan estetika, seperti penyorotan pertandingan untuk kueri yang rumit dan mengharuskan Anda menginstal fzf. Dalam pengujian saya, kinerja semacam itu hanya diperlukan untuk paket yang sangat besar, jadi saya lebih suka tidak memaksakan ketergantungan lain pada pengguna (atau diri saya sendiri) jika saya tidak perlu.

@skalfyfan Setelah beberapa pengujian, saya menemukan ada inefisiensi dalam paket counsel-projectile (dan prakiraan di atasnya membuatnya lebih buruk).

Saya telah menemukan solusi yang layak yang dapat menggunakan beberapa pengujian lagi. Bisakah Anda mencoba menambahkan ini ke ~/.doom.d/config.el :

  (after! ivy
    (global-set-key [remap projectile-find-file] nil)
    (setf (alist-get 'projectile-find-file ivy-sort-functions-alist) nil)
    (setf (alist-get 'projectile-find-file ivy-re-builders-alist) 'ivy--regex-fuzzy)
    (after! ivy-prescient
      (add-to-list 'ivy-prescient-excluded-commands 'projectile-find-file nil #'eq)))

Ini akan menonaktifkan fitur ivy-prescient dan advisor-projectile secara eksklusif untuk projectile-find-file, yang menurut saya jauh lebih cepat. Saya mengujinya di kernel linux (dengan lebih dari 60k file) pada pc linux i5, ssd, 8gb ram yang layak dan latensi, meskipun terlihat, dapat diterima, jadi saya berharap ini akan menyelesaikan masalah untuk proyek yang jauh lebih kecil .

Jika Anda _are_ dalam proyek 60k + file atau perbaikan ini tidak membantu / tidak cukup, saya sarankan:

  1. Menggunakan counsel-fzf sebagai gantinya. Anda harus menginstal fzf , tetapi pengalaman ini dijamin akan jauh lebih cepat.
  2. Menonaktifkan +fuzzy support. Maklum, ada kurva pembelajaran ke sintaks pencarian default (itu sama dengan helm ketika dukungan fuzzynya dinonaktifkan), tetapi saya merasa sama kuatnya, jika tidak lebih dari itu.

Biarkan aku tahu!

Saya telah mendorong pengaturan ini ke hulu dan kemudian beberapa. Beri tahu saya jika itu memperbaiki masalah kecepatan Anda.

@hlissner terima kasih telah mencoba tetapi maaf untuk mengatakan refactoring tidak membantu. 😢 (ivy +fuzzy) masih mulai mengunci mesin saya dan CPU melonjak hingga 100% ketika mencoba menemukan file melalui proyektil.

Saya kira saya harus tetap menggunakan (helm +fuzzy) untuk saat ini (yang tidak masalah bagi saya). Beri tahu saya jika ada info debugging / profiling lagi yang Anda inginkan dari saya. Senang membantu jika Anda ingin menggali lebih jauh ...!

@skalfyfan Aneh sekali. Saya menggunakan implementasi ini pada proyek file 60k dan hanya _mildly_ lamban (bahkan pada pemanggang roti duo inti saya yang menjalankan El Capitan). Proyek file ~ 400 seharusnya bukan apa-apa. Bahkan jika Anda salah mengetik dan bermaksud 4k, itu tetap harus tajam.

Maukah Anda mencoba beberapa tes ini untuk saya?

  1. Buka file apa pun dalam proyek bermasalah ini dan jalankan M-x eval-expression RET (projectile-get-ext-command) ; apa itu nilai kembali?
  2. Jalankan M-x doom/info dan tempelkan hasilnya untuk saya lihat.
  3. Coba aktifkan projectile-find-file secara langsung: M-x projectile-find-file (tentu saja, dengan +fuzzy diaktifkan)
  4. Apakah Anda mengalami kelambatan ini dalam proyek yang lebih kecil? Misalnya, proyek 10-20 file? Jika tidak, dapatkah Anda mencoba membuat profil dengan M-x doom/toggle-profiler (jalankan sebelum pengujian, lalu buat laporan lagi).
  5. Coba nonaktifkan ivy-prescient seluruhnya dengan menambahkan (package! ivy-prescient :disable t) ke file ~/.doom.d/packages.el dan menjalankan make . Kemudian lihat apakah itu menyelesaikan masalah Anda.

@hlissner Apakah https://github.com/hlissner/doom-emacs/commit/a01aeb6daf099cdfdc90a9758cdb22b469c24f41 menandai akhir dari masalah ini? 🤔

Jika demikian kami dapat menutup masalah.

Menutup ini karena @hlissner telah secara resmi memindahkan mode penyelesaian default ke Helm sekarang seperti yang diidentifikasi oleh komit ini: https://github.com/hlissner/doom-emacs/commit/a01aeb6daf099cdfdc90a9758cdb22b469c24f41

@skalfyfan Maaf terlambat membalas. Saya masih tidak yakin tentang kasus spesifik Anda.

Memang benar bahwa ada batasan yang tidak dapat dihindari pada ivy yang akan menyebabkan hal ini, tetapi sekali lagi, kita berbicara tentang proyek _large_ dari 30k + file. Proyek 500 file seharusnya tidak mengalami pelambatan ini.

Lingkungan shell Anda mencurigakan. Mungkinkah ada hambatan dalam konfigurasi shell Anda? Mungkin menginisialisasi plugin seperti oh-my-zsh, zprezto, pyenv, rvm, nvm, dll. Saya bertanya karena, setiap kali penasihat (atau helm, dalam hal ini) memanggil ag / rg / pt (dan itu dilakukan pada setiap penekanan tombol ), ini memberi contoh lingkungan shell Anda, bersama dengan semua penyiapannya.

@skalfyfan Saya telah membuat kemajuan dalam mengoptimalkan ivy; Khususnya, saya menunda pemungut sampah saat minibuffer aktif. Saya harap ini mengatasi masalah Anda. Jika Anda punya waktu untuk memperbarui dan melompat ke ivy untuk mencobanya, beri tahu saya bagaimana tarifnya.

@hlissner akan mencobanya akhir pekan ini dan memberi tahu Anda! Terima kasih! 👍

Apakah halaman ini membantu?
0 / 5 - 0 peringkat