Dlaczego uruchomienie Emacsa w systemie Windows trwa dłużej niż w systemie Linux?

14

Konfiguracja:

  • Jeden system
  • System operacyjny Windows 10 jako podwójny rozruch
  • System operacyjny Ubuntu 15.10 jako podwójny rozruch
  • Emacs 25.0.1 z GUI

Mam jeden dot-emacsplik i wszystko w moim .emacs.dfolderze (paczki również się znajdują .emacs.d). Wszystkie te pliki znajdują się w jednym folderze Dropbox.

W systemie Windows 10: dowiązałem do dot-emacsiz .emacs.dfolderu domowego w systemie Windows do lokalizacji w Dropbox.

W systemie Linux / Ubuntu 15.10: dowiązałem również do dot-emacsiz .emacs.dmojego katalogu domowego Ubuntu (/ home / user /) do lokalizacji w Dropbox.

Więc wszystkie pliki związane z Emacsem są przechowywane w jednym folderze Dropbox w różnych systemach operacyjnych.

Windows i Linux działają jako podwójny rozruch na tym samym dysku, a więc także na tym samym sprzęcie.

Kiedy uruchamiam Emacsa w systemie Windows, uruchomienie zajmuje 7,4 sekundy.

Kiedy uruchamiam Emacsa w systemie Linux, uruchomienie zajmuje tylko 2,3 sekundy.

Dotyczy to zarówno Emacsa z graficznym GUI, jak i wersji 25.0.1. Oba systemy operacyjne znajdują się na tym samym komputerze na tym samym dysku SSD. Więc to także ten sam sprzęt.

W systemie operacyjnym (Windows 10 i Ubuntu 15.10) następujące rzeczy są identyczne:

  • Oprogramowanie Emacs, wersja 25.0.1
  • Pliki konfiguracyjne (.emacs.d)
  • Jeden dysk twardy (wszystkie pliki w .emacs.d) i oba systemy operacyjne są na tym samym dysku SSD).
  • Sprzęt komputerowy

Jedna różnica:

  • Skompilowany Emacs dla Windows lub Linux działa odpowiednio na platformie Windows lub Linux. To jedyna różnica.

Próbuję zrozumieć, dlaczego Emacs ma zauważalnie krótszy czas uruchamiania na Ubuntu niż Windows.

ReneFroger
źródło
2
Zapomniałeś wspomnieć, co to jest kompilacja. Powinieneś także porównywać czasy uruchamiania nagiej sesji Emacsa emacs -Q.
wasamasa,
Potrzebuję (message emacs-init-time)zmierzyć czas uruchamiania. O ile mi wiadomo, nie jest to ograniczone do funkcji. Jak więc mógłbym to zmierzyć emacs -Q?
ReneFroger
1
M-x emacs-init-time RET
Giordano
1
Widzę też ten problem ... mój emacs potrzebuje 5-6 sekund na uruchomienie w Linuksie, ale nawet minutę w Windows. Na szczęście Windows nie jest moim podstawowym systemem operacyjnym w pracy.
Kaushal Modi
1
To chyba dlatego, że GCC. Windows Emacs jest kompilowany w GCC, co nie jest świetne w systemie Windows, jest wiele błędów i tak dalej. Jeśli istnieje sposób na skompilowanie EMACS z Visual C ++, chciałbym zobaczyć wydajność.
João Paulo Andrade

Odpowiedzi:

21

Op-ed: Windows działa powoli.

Regularnie używam Emacsa zarówno na Windowsie (Cygwin i natywnym), jak i GNU / Linux (Arch), i zauważyłem to również. Wierzę, że odpowiedź jest taka, że ​​Linux jest po prostu szybszy niż Windows w wielu obszarach, w szczególności w operacjach systemu plików 1 i operacjach wątkowania / rozwidlania 2 .

Myślę, że różnica w wydajności jest najbardziej widoczna na przykładzie używania git, a zwłaszcza Magit (ponieważ uruchamia całkiem sporo poleceń dla swojego bufora stanu). Git jest strasznie powolny w systemie Windows. W rzeczywistości jest tak powolny, że często edytuję kod w systemie Windows w folderze Dropbox, czekam na zsynchronizowanie go z moim VPS w systemie Linux, a następnie używam Magit przez SSH, zamiast po prostu używać go w systemie Windows.

Wykonanie time git statusw gałęzi głównej Emacsa zajmuje mi średnio 0,025 sekundy na Arch. W systemie Windows (natywny) zajmuje to 0,075-0,100 sekundy, Windows (cygwin) 0,200 sekundy. To może nie wydawać się dużo, ale oznacza to, że jest 3-4 razy wolniejszy w systemie Windows.

Powinienem również zauważyć, że niektóre programy antywirusowe (w szczególności McAfee) mogą powodować ogromne spowolnienia. Po włączeniu skanera McAfee On-Access skaner jest dla mnie zauważalnie wolniejszy. Cygwin git statusmoże zająć do 2 minut! Dopiero po wyłączeniu dostaję czasy, które podałem powyżej.


Na bok: Właśnie znalazłem zmienną magit-refresh-verbose, która odświeża status. Oto kilka razy, aby odświeżyć magit-statusbufor w głównej gałęzi Emacsa:

Windows (natywny)

GNU Emacs 24.5.1 (i686-pc-mingw32) of 2015-04-11 on LEG570
Magit 20151028.1649, Git 2.6.1.windows.1, Emacs 24.5.1
Refreshing buffer `*magit: emacs'...done (9.317s)
Refreshing buffer `*magit: emacs'...done (9.318s)
Refreshing buffer `*magit: emacs'...done (9.357s)

Windows (cygwin)

GNU Emacs 25.0.50.1 (i686-pc-cygwin) of 2015-07-29 on NAND-LT
Magit 20151015.22, Git 2.5.0.234.gefc8a62, Emacs 25.0.50.1
Refreshing buffer `*magit: emacs'...done (4.609s)
Refreshing buffer `*magit: emacs'...done (4.720s)
Refreshing buffer `*magit: emacs'...done (4.626s)

GNU / Linux (Arch, gorszy sprzęt, VPS)

GNU Emacs 25.0.50.6 (x86_64-unknown-linux-gnu, GTK+ Version 3.18.2) of 2015-10-26
Magit 20151028.1649, Git 2.6.2, Emacs 25.0.50
Refreshing buffer ‘*magit: emacs’...done (0.517s)
Refreshing buffer ‘*magit: emacs’...done (0.507s)
Refreshing buffer ‘*magit: emacs’...done (0.523s)

Zaskoczyła mnie szybsza prędkość Cygwina.

  1. http://www.slideshare.net/PrincipledTechnologies/comparing-file-system-performance-red-hat-enterprise-linux-6-vs-microsoft-windows-server-2012

  2. /programming/12878980/speed-performance-of-a-qt-program-windows-vs-linux

niania
źródło
Czy próbowałeś dodać ścieżkę do poleceń związanych z git exec-path? ( stackoverflow.com/questions/16884377/… ) W moim przypadku znacznie poprawiło to prędkość.
czerwiec
1
@joon Tak, wszystkie odpowiednie ścieżki są już w mojej exec-path.
niania
Rozumiem - powinienem to również przetestować w systemie Linux. Dzięki!
czerwiec
@joon Bez problemu. Jeśli znajdziesz sposób na przyspieszenie tego w systemie Windows, daj mi znać. To naprawdę ból.
niania
1
Ale wciąż pozostaje pytanie… nawet bez Gita, dlaczego Emacs jest wyraźnie wolniejszy w systemie Windows?
ReneFroger
0

Może możesz spróbować skonfigurować emacs-server, aby mieć lepsze wrażenia. Używając tego podejścia lub uruchamiając emacsa jako demona, możesz po prostu użyć emacsclient, aby uruchomić nowe okna, nie ładując innej instancji emacsa. To miłe podejście. Nie testowałem tego w systemie Windows, ale tutaj jest link wyjaśniający, jak go używać. Mam nadzieję, że to ci pomoże.

Serwer Emacsa

Sebas
źródło