kitty 作者说 tmux waste CPU cycles,具体是指啥? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
haoliang
V2EX    Linux

kitty 作者说 tmux waste CPU cycles,具体是指啥?

  •  
  •   haoliang 2022-08-14 14:04:50 +08:00 5774 次点击
    这是一个创建于 1220 天前的主题,其中的信息可能已经有所发展或是发生改变。

    出处

    照我目前的理解应该是指 tmux client/server 结构下的通信消耗:通过 unix socket 通信、client 转发 stdin 到 server 、server 转发输入命令的 stdout 、stderr 给 client 。不知道对不对?还有没有其他方面?

    15 条回复    2022-08-17 21:55:04 +08:00
    codehz
        1
    codehz  
       2022-08-14 14:19:20 +08:00 via iPhone   3
    不只是转发,tmux 还要自己缓存屏幕内容(基本上也在做另一个终端模拟器要做的事,只是不直接渲染到屏幕上),还会在输出过快的时候截断(并且丢弃输出内容!这个设置还不能调)如果终端模拟器自己做的话,这部分工作就可以少一份,终端模拟器支持的情况下,单纯为了分页和 split 上 tmux 确实是可以说是浪费(
    haoliang
        2
    haoliang  
    OP
       2022-08-14 15:11:51 +08:00
    @codehz 谢谢回复!

    > 自己缓存屏幕内容、丢弃输出内容
    这几点是意料之中的,也是 tmux 的 history-limit 这个选项的意义吧。

    > 如果终端模拟器自己做的话,这部分工作就可以少一份
    作为对比,st 没有这部分设置(刚用没多久,我单纯依靠配置项来判断的);这是不是说 st 跟 tmux 绝配?
    urxvt 、alacritty 有,这部分缓冲确实是多余的
    codehz
        3
    codehz  
       2022-08-14 16:39:02 +08:00 via iPhone
    @haoliang 即使 tmux 它不显示,也需要计算屏幕的显示内容才知道下次连接的时候需要哪些信息才能恢复((考虑 vim 这样复杂的界面,显然没办法简单的记录输出内容来恢复屏幕
    Dart
        4
    Dart  
       2022-08-14 16:43:01 +08:00
    kitty 作者没钱买新电脑 哈哈哈哈哈哈 好傻感觉这个人
    haoliang
        5
    haoliang  
    OP
       2022-08-14 17:09:04 +08:00
    > 没办法简单的记录输出内容来恢复屏幕
    哦,这大概是 terminfo 存在的部分意义了;那应该也意味着 tmux 给运行其中的程序设置了自己的 TERM ,然后在渲染的时候还要转成最终 terminal 能理解的格式
    ensonmj
        6
    ensonmj  
       2022-08-14 20:08:39 +08:00 via iPhone
    tmux 最大的作用就是断线重连
    chenxytw
        7
    chenxytw  
       2022-08-14 20:26:35 +08:00   3
    呃....虽然吧,总感觉从一个周围组建和扩展选择用 Python 开发的人嘴里说出来 waste CPU cycles 是件很滑稽的事情......
    aloxaf
        8
    aloxaf  
       2022-08-14 21:39:00 +08:00
    @codehz #1
    确实,此处要点名批评一下 alacritty ,声称自己渲染很快,但是不支持 tab 、split ,让你去用 tmux 实现这些功能。
    但问题是套了层 tmux 它就没有速度优势了……想通了这点后的我后面又滚回用 konsole 了……
    haoliang
        9
    haoliang  
    OP
       2022-08-14 22:18:38 +08:00   1
    @chenxytw 你这话也太片面了吧,虽然我不主用 kitty ,但据我之前看过的 benchmark ,它与其他 terminal 并没有很大的性能差距。而且在我今天的测试中(同时开启 50 个同类终端),alacritty 纯用 rust 实现的终端在处理键盘输入的时候能感觉到明显的延迟,作为对比我也试了 urxvt 、st 、kitty ,后三者则没有感受到。(当然这纯感受显然没有很强的说服力,只不过在我这里,alacrity 跟后三者不是在响应速度上不是同一梯队的)
    chenxytw
        10
    chenxytw  
       2022-08-14 23:19:34 +08:00
    @haoliang 呃,怪我没说清楚,我没有否定这个软件本身的性能,他的核心组件全是 C 写的,在核心功能上如果和其他终端有性能差异的话,就太离谱了,遑论他本身还是做了 GPU 加速的。
    我的点在于,他自身为了扩展性和功能性,引入了 Python 这一明显有性能问题的语言,说明他是认可为了便利性可以大幅度牺牲性能的(不然他至少会选 Lua 了)。那么他在否决一个功能时,就不能仅从性能角度去阐述。他拒绝这个特性的理由其实仅仅是他不喜欢那种方式而已,和性能其实一点关系没有,虽然他说的关于性能的点是对的。
    chenxytw
        11
    chenxytw  
       2022-08-15 00:07:53 +08:00
    @haoliang 干扰你的帖子讨论十分抱歉,我试着拉回来主题吧,这个问题本身因为我并没有仔细分析过 tmux 的代码,所以并不能给出什么猜测,或许你发个邮件直接问 kitty 作者本人更靠谱。

    但关于 tmux 本身性能很慢这件事,在 tmux 那边的 issue 搜索 performance 是能搜出一些有价值的信息的。

    比如
    https://github.com/tmux/tmux/issues/1720#issuecomment-489415912
    https://github.com/tmux/tmux/issues/1269
    haoliang
        12
    haoliang  
    OP
       2022-08-15 02:28:18 +08:00
    @chenxytw 哦哦,不好意思,没理解到你的意思。看比赛来着,没能及时回复。(这 aster 第三局我是看不下去了)
    ThinkCat
        13
    ThinkCat  
       2022-08-15 10:30:43 +08:00
    @haoliang 大半夜不要看 dota ,最好早上起来看结果,歪了一下楼。不过作为普通用户,是没有感到 tmux 的消耗。
    ruanimal
        14
    ruanimal  
       2022-08-15 11:29:37 +08:00
    既要又要
    gengchun
        15
    gengchun  
       2022-08-17 21:55:04 +08:00
    总觉得虚拟终端要速度本身是件很奇怪的事情。照这么说最浪费 CPU 的是 X 子系统。

    就算真有大量输出要渲染,很早以前不一样有 skip scrolling 吗?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1042 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 23:10 PVG 07:10 LAX 15:10 JFK 18:10
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86