挂载远程服务器后的磁盘操作性能问题

我的工作环境是win10通过samba挂载一个远端服务器,编辑服务器上的文件时如果有磁盘操作,则会出现非常长时间的卡顿。横向对比VSCode,Emacs会慢很多,这里是Emacs在保存文件时有什么额外的操作吗?或者有什么优化方案?

先用 profiler 看下

samba枚举文件的效率很低

我抓了,感觉profiler抓不出来,profiler抓到占用大的是minibuf的补全功能,实际上卡顿发生在保存的过程中

samba可能是不太好,但同样环境下vscode确实快了很多,不知道emacs有没有什么可以实现的优化

我觉得你最起码把profiler的信息贴出来,先量化再找瓶颈,大家配置都不一样,缺少上下文谁能定位出来问题。最简单的先用 emacs -q 测一下。

这个是用emacs -Q检测出来的结果,流程为 profiler-start(cpu) → save-bufferprofiler-report

感觉这个 completion-pcm--all-completions 是我用tab补全 profiler-report 时调用的,速度应该是很快的,这个占用25%是不是表示没抓到具体造成卡顿的操作?

emacs -q 操作时卡么?

  1. 不卡,说明是你加载的自己配置造成的问题,正常加载自己的配置后再去profile,直至找到卡顿时的分析报告
  2. 也卡,说明emacs裸配置性能也不行,可能是emacs的bug,也可能是别的

emacs -Q时一样是卡顿的,应该是emacs默认的配置本身有问题,我主要是想问下有没有前辈遇到过这种问题,有现成的解决方案(比如关掉某些配置,或把某些参数配成特殊值)。

在资源管理器复制文件过去,看看速度如何?

如果资源管理器复制也是一样慢的话,那就是vscode做了优化,而Emacs没有。

只看save-buffer的cpu采样,vc-after-save占了save-buffer100%,每次保存时都要触发版本状态更新,这玩意看起来远程性能不好。

(defun my-skip-vc-refresh-test ()
  nil)
(advice-add 'vc-after-save :override #'my-skip-vc-refresh-test)
;; (advice-remove 'vc-after-save #'my-skip-vc-refresh-test)

试下跳过远程文件的版本检查看看

ps:

在stackoverflow上看到另外一个内置profiler M-x elp-instrument-package M-x elp-results
1 个赞

跳过VC检查确实快了很多,之前保存耗时大概在5-15s浮动,现在大概只有3s左右了。大佬果然厉害 :+1: