This is the mail archive of the cygwin mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Question on pseudo console and legacy console


On Sat, 8 Feb 2020 22:50:56 +0800
Koichi Murase wrote:
> I have a question on the pseudo console mode and the legacy console
> mode.
> 
> Question:
> 
>   Does it cause problems to set `disable_pcon' in the default value of
>   the environment variable `CYGWIN'?  When is the pseudo console mode
>   recommended, and when can I use the legacy console mode?  I noticed
>   that the terminal emulators with the pseudo console mode is quite
>   slower than with the legacy console mode, so I am thinking of
>   setting `disable_pcon' by default if it does not cause problem.

Do you mean "without pseudo console support" by "legacy console mode"?
If so, pty should behave as before 3.1.0 if you set disable_pcon,
except that char code conversion, from code page which you set, to char
code which is declared by locale, is still enabled.

> Background:
> 
> * There are large performance differences of terminal emulators
>   between the legacy and pseudo console modes.  I show some test and
>   results in my laptop as follows:
> 
>   For example, one can measure a performance of the terminal emulators
>   by the following commands.  It measures the processing time of the
>   terminal for 1M lines.
> 
>   $ yes | head -1000000 > yes.txt
>   $ time cat yes.txt
> 
>   The results with different terminals and different console modes
>   are summarized below:
> 
>   urxvt     ... legacy: 0.410s,   pcon: 33.517s   (~ 80x slower)
>   (A) win   ... legacy: 1.593s,   pcon: 36.064s   (~ 20x slower)
>   (B) x11   ... legacy: 1.573s,   pcon: 35.611s   (~ 20x slower)
>   (C) tty   ... legacy: 1.614s,   pcon: 35.129s   (~ 20x slower)
>   mintty    ... legacy: 3.811s,   pcon: 39.406s   (~ 10x slower)
>   xterm -j  ... legacy: 39.809s,  pcon: 1m2.237s  (~ 1.5x slower)
> 
>   [ Note: `legacy' and `pcon' are the legacy and pseudo console
>   modes, respectively.  (A)--(C) are three different modes of the
>   terminal that I wrote by myself and also I primarily use daily.
>   When xterm is tested, the option -j is passed to explicitly turn
>   off the smooth scrolling mode. ]
> 
>   This is the results for a specific computer, but the difference
>   between legacy and pseudo console modes is clear.  I think the
>   reason why pseudo console is so slow is that it actually
>   internally processes terminal sequences and constructs its
>   terminal contents in backgrounds, which is completely redundant
>   process when the user uses terminal emulators.  And the background
>   terminal is as slow as xterm, which is at least ten times slower
>   than the other terminal emulators.

This seems to be too much than I expected... 

> * I understand that, with the pseudo console mode, the Cygwin console
>   have more powerful terminal features compared to the legacy console
>   mode.  However, I do not usually use the console but another
>   terminal emulator.  Also the default Cygwin Terminal (which can be
>   launched from the shortcut icon on desktop or in the start menu) is
>   actually Mintty, so I believe most other people also use terminal
>   emulators.
> 
>   Is there any reason to enable the pseudo console mode for all the
>   programs including those which does not use the console window?  For
>   example, does the Cygwin PTY with the legacy console mode have some
>   limitation which is not present with the pseudo console mode?  Or,
>   are there some problems caused by the legacy console mode?  I
>   thought maybe some Windows Command-Line application (based on
>   Windows Console API) could have troubles with the legacy console
>   mode, but with a quick check for `cmd' and `PowerShell' it appears
>   to work in the terminal emulators with the legacy console mode
>   though I haven't tested it thoroughly.

With out pseudo console, for example:
1) cmd.exe echos command twice.
2) dir /p does not work in cmd.exe.
3) Many of windows native console apps such as windows native gnuplot
   does not work at all.

> * For these reasons, if there is no functional differences between the
>   pseudo console mode and the legacy console mode as far as I use
>   terminal emulators, I tend to think about setting `disable_pcon' as
>   the default value of the environment variable `CYGWIN'.  But looking
>   at the discussion at
> 
>   https://cygwin.com/ml/cygwin-patches/2020-q1/threads.html#00060
> 
>   it appears the setting `disable_pcon' is only introduced as a
>   workaround for the programs incompatible with the pseudo console
>   mode (such as `cgdb'), and the pseudo console mode is still
>   considered to be appropriate for normal programs.
> 
> * If the console mode would not cause any differences when there is no
>   visible console window, would it make sense to change Cygwin's
>   behavior so that it switches to the pseudo console mode only when
>   the console window is present (if it is not too difficult
>   technically)?

I am not sure what you mean "the console window is present", but
that is possible if you accept the behaviour that the output of
cygwin native apps disappears everytime when windows native app
is executed.

That is for example:

Start mintty, then shell prompt displayed as:
----
[yano@Express5800-S70 ~]$
----

Execute chcp 65001, the first shell prompt disappears.
----
Active code page: 65001
[yano@Express5800-S70 ~]$
----

Execute ps.
----
Active code page: 65001
[yano@Express5800-S70 ~]$ ps
      PID    PPID    PGID     WINPID   TTY         UID    STIME COMMAND
     1334    1330    1334       1052  pty0      197609 08:36:01 /usr/bin/ps
     1329       1    1329       1524  ?         197609 08:33:25 /usr/bin/mintty
     1330    1329    1330      13544  pty0      197609 08:33:25 /usr/bin/tcsh
[yano@Express5800-S70 ~]$
----

Execute chcp 65001 again, then shell prompt and result of ps
disappears.
----
Active code page: 65001
Active code page: 65001
[yano@Express5800-S70 ~]$
----

-- 
Takashi Yano <takashi.yano@nifty.ne.jp>

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]