Cygwin from Windows is very slow/ laggy

Occasionally I work in a Windows domain with thousands of users.

I don't want to do any best-guess approach. I would prefer Cygwin to cache user information on an as-needed basis. It turns out this is easy to do.

Simply run cygserver on login.

To set this up properly, run cygserver-config once only. This will set up cygserver to run as a Windows service with the correct credentials. Do this from an administrator Cygwin window.

$ cygserver-config
Generating /etc/cygserver.conf file

Warning: The following function requires administrator privileges!

Do you want to install cygserver as service?
(Say "no" if it's already installed as service) (yes/no) yes

The service has been installed under LocalSystem account.
To start it, call `net start cygserver' or `cygrunsrv -S cygserver'.

Further configuration options are available by editing the configuration
file /etc/cygserver.conf. Please read the inline information in that
file carefully. The best option for the start is to just leave it alone.

Basic Cygserver configuration finished. Have fun!

What does cygserver do for me?

Have a look at the documentation over at the Cygwin site. Basically it does the user caching stuff, together with ensuring IPC works between all Cygwin processes.

Your mileage may vary of course, but this is now my preferred way of working. I should have done it years ago.


It seems to be to do with authentication. For me, 40 seconds to get something to execute. After that though, process creation in that process tree seems pretty quick.

https://www.cygwin.com/faq.html#faq.using.startup-slow

So, I

  • Made a cache of my local authentication, and my own Active Directory (AD) credentials

    $ mkpasswd -l -c >/etc/passwd
    $ mkgroup -l -c >/etc/group
    
  • Told Cygwin just to use these two files

    $ echo 'passwd: files' >/etc/nsswitch.conf
    $ echo 'group: files' >>/etc/nsswitch.conf
    

I killed all Cygwin processes and started again. Everything now runs nice and fast. I will remove this hack on every Cygwin DLL file update and see how I get on.

This is just a sketch—you will at least want to keep backups!

EDIT

Deprecated. See my more recent answer to this question for a better (IMHO) solution.


As a footnote, I just found that I had to rebuild the passwd and group files after a Cygwin update. As the slow behaviour was happening again, the autorebase part of the install took several days to complete.

I also did not need to modify the default nsswitch.conf on my (Windows 10) system.

By the way, the slow behaviour also showed itself with the Windows command prompt and portable applications. Some portable applications took several hours to produce a window when started.