Index: faq-using.xml
===================================================================
RCS file: /cvs/src/src/winsup/doc/faq-using.xml,v
retrieving revision 1.59
diff -u -r1.59 faq-using.xml
--- faq-using.xml 11 Feb 2015 08:52:04 -0000 1.59
+++ faq-using.xml 17 Feb 2015 18:54:10 -0000
@@ -33,63 +33,121 @@
Starting a new terminal window is slow. What's going on?
-There are many possible causes for this. This answer is more a
-list of things to look into than a set of solutions.
+There are many possible causes for this.
+
+If your terminal windows suddenly began starting slowly after a
+Cygwin upgrade, it may indicate issues in the authentication
+setup.
+
+For almost all its lifetime, Cygwin has used Unix-like
+/etc/passwd and /etc/group
+files to mirror the contents of the Windows SAM and AD databases.
+Although these files can still be used, since Cygwin 1.7.34, new
+installations now use the SAM/AD databases directly.
+
+To switch to the new method, move these two files out of the way
+and restart the Cygwin terminal. That runs Cygwin in its new default
+mode.
+
+If you are on a system that isn't using AD domain logins, this
+makes Cygwin use the native Windows SAM database directly, which may be
+faster than the old method involving /etc/passwd
+and such. At worst, it will only be a bit slower. (The speed difference
+you see depends on which benchmark you run.) For the AD case, it can be
+slower than the old method, since it is trading a local file read for a
+network request. Version 1.7.35 will reduce the number of AD server
+requests the DLL makes relative to 1.7.34, with the consequence that you
+will now have to alter /etc/nsswitch.conf in order
+to change your Cygwin home directory, instead of being able to change it
+from the AD configuration.
+
+If you are still experiencing very slow shell startups, there are
+a number of other things you can look into:
- If your terminal windows suddenly began starting slowly after a
- Cygwin upgrade, the most likely cause is that you have an outdated
- authentication setup.
-
- For almost all its lifetime, Cygwin has used Unix-like
- /etc/passwd and /etc/group files
- to mirror the contents of the Windows SAM and AD databases. Although these
- files can still be used, since Cygwin 1.7.34, new installations now use the
- SAM/AD databases directly.
-
- To switch to the new method, move these two files out of the way and
- restart the Cygwin terminal. That runs Cygwin in its new default mode. If
- you are on a system that isn't using AD domain logins, this makes Cygwin
- use the native Windows SAM database directly, which may be faster than the
- old method involving /etc/passwd and such. At worst,
- it will only be a bit slower. (Which situation applies depends on the
- benchmark you run.)
-
- If you are on an AD system, a hybrid approach you might consider is
- to re-run mkpasswd and mkgroup, then
- put the following into /etc/nsswitch.conf to make
- Cygwin treat these files as read-only local caches of your AD database:
-
-
-
- passwd: files
- group: files
-
-
- By leaving out the "db" option, we are telling the Cygwin DLL not to
- even try to do AD lookups. If your AD servers are
- slow, this local cache will speed things up. The downside is the old stale
- cache problem: any time the AD databases change, your local cache will go
- out of date until you update the files manually.
+ One common cause of slow Cygwin Terminal starts is a bad DNS
+ setup. This particularly affects AD clients, but there may be other
+ things in your Cygwin startup that depend on getting fast answers
+ back from a network server.
+
+ Keep in mind that this may affect Cygwin even when the domain
+ controller is on the same machine as Cygwin, or is on a nearby
+ server. A bad DNS server IP can cause long delays while the local
+ TCP/IP stack times out on a connection to a server that simply isn't
+ there, for example.
+
+
+
+ Another cause for AD client system is slow DC replies,
+ commonly observed in configurations with remote DC access. The
+ Cygwin DLL queries information about every group you're in to
+ populate the local cache on startup. You may speed up this process a
+ little by caching your own information in local files. Run these
+ commands in a Cygwin terminal with write access to
+ /etc:
+
+ getent passwd $(id -u) > /etc/passwd
+getent group $(id -G) > /etc/group
+
+ Also, set /etc/nsswitch.conf as
+ follows:
+
+ passwd: files db
+group: files db
+
+ This will limit the need for Cygwin to contact the AD domain
+ controller (DC) while still allowing for additional information to
+ be retrieved from DC, such as when listing remote
+ directories.
- Another common cause of slow Cygwin Terminal starts is a bad DNS
- setup. Many things that occur during a Cygwin Terminal startup require
- fast DNS lookups.
+ Either in addition to the previous item or instead of it, you
+ can run cygserver
+ as a local caching service to speed up DC requests.
+
+ Cygwin programs will check with cygserver
+ before trying to query the DC directly.
+
+
+
+ A less preferable option is to create a static read-only cache
+ of the authentication data. This is the old-fashioned method of
+ making Cygwin integrate with AD, the only method available in
+ releases before 1.7.34. To do this, run mkpasswd
+ and mkgroup, then put the following into
+ /etc/nsswitch.conf to make Cygwin treat these
+ files as the only sources of user and group information:
+
+ passwd: files
+group: files
+
+ By leaving out the db option,
+ we are telling the Cygwin DLL not to even try to do AD lookups. If
+ your AD servers are slow, this local cache will speed things up. The
+ downside is that you open yourself up to the stale cache
+ problem: any time the AD databases change, your local cache
+ will go out of date until you update the files manually.
-If none of the above helps, the best troubleshooting method is to run
-your startup scripts in debug mode. Right-click your Cygwin Terminal icon, go
-to Properties, and edit the command. It should be something like
-C:\cygwin\bin\mintty.exe -i /Cygwin-Terminal.ico -.
-Assuming you are using Bash for your login shell, change it to
-C:\cygwin64\bin\mintty /bin/bash -lx. That will cause it to
-write out a line for every command it runs. A slow Cygwin Terminal launch
-usually means one or more of the many commands Cygwin runs when starting up
-will take a long time. That will be your clue as to what's going on.
+If none of the above helps, the best troubleshooting method is to
+run your startup scripts in debug mode. Right-click your Cygwin Terminal
+icon, go to Properties, and edit the command. It should be something
+like C:\cygwin\bin\mintty.exe -i /Cygwin-Terminal.ico
+-. Assuming you are using Bash for your login shell, change
+it to C:\cygwin\bin\mintty /bin/bash -lx then try
+running Cygwin Terminal again. The option tells Bash
+to write every command it runs to the terminal before launching it. If
+the terminal immediately starts filling with lines of text but then
+pauses, the line where the output paused is your clue as to what's going
+on. The Cygwin DLL proper probably isn't the cause of the slowdown in
+this case, since those delays happen before the first line of text
+appears in the terminal.
+