Closed barnabasmolnar closed 2 years ago
If you are able to attend the HaskellExchange event next week, I will be giving a talk about HLS performance:
https://skillsmatter.com/conferences/13256-haskell-exchange-2021
If you are unable to attend, I expect that the recording will be made available after the event
If you are able to attend the HaskellExchange event next week, I will be giving a talk about HLS performance:
For context (and the lazy) the bit that I suppose most people will be interested in:
Issue still persists on IHP v.017.0 for me unfortunately...
Several processes taking well over 4 minutes. For example:
2021-12-14 16:34:08.102729866 [ThreadId 955] INFO hls: finish: codeLens.TypeCheck (took 4m03s) 2021-12-14 16:34:08.102727016 [ThreadId 936] INFO hls: finish: codeLens.TypeCheck (took 4m03s) 2021-12-14 16:34:08.102884641 [ThreadId 975] INFO hls: finish: codeLens.TypeCheck (took 4m03s) 2021-12-14 16:34:08.102934496 [ThreadId 649] INFO hls: finish: codeLens.TypeCheck (took 4m26s) 2021-12-14 16:34:08.10305079 [ThreadId 584] INFO hls: finish: codeLens.TypeCheck (took 4m26s) 2021-12-14 16:34:08.103223504 [ThreadId 613] INFO hls: finish: codeLens.TypeCheck (took 4m26s)
I can't glean much useful information from that log, but I could use an open telemetry log:
-eventlog
+RTS -l -ol/tmp/hls.eventlog
nix-shell
in the HLS repo or:
a. Install tracy.
b. Install opentelemetry-extra
(with cabal install
).eventlog-to-tracy /tmp/hls.eventlog
hls.tracy
file.I've kicked off a build for HLS with -eventlog
enabled at https://github.com/digitallyinduced/ihp/pull/1274.
To get this running in IHP this is needed in the default.nix
:
ihp = builtins.fetchGit {
url = "https://github.com/digitallyinduced/ihp.git";
rev = "3111ba4e8597f627ee7f551a244416adace794a6";
allRefs = true;
};
After that a make -B .envrc
should do it.
@barnabasmolnar could you give the above steps a try with the eventlog
build?
Yeah sure, I'll definitely have a look. It might well be only after the holidays though.
I have a similar issue, I think it has to do with the SemiQuotes
extension.
I'm very unfamiliar with the Haskell ecosystem, I'll just present here the results of my investigation.
Context: use of HLS within IHP (latest at time of writing) OS: ubuntu 21.10 VSCode: 1.63.2
Proper Haskell extensions have been installed, and I've set the debug output level of "Haskell" to "info".
EDIT: "solved" by un-installing system-wide GHC, which is not the appropriate solution EDIT 2: Actually not solved, need to restart HLS very often.
You can see the example project on GitHub.
I have basic intellisense working in the sense that hovering a variable name tells me where it is defined:
And I see in the log info requests being made to the HLS.
But as soon as I edit the file I lose that intellisense and I no longer see any messages in the debug output of the Haskell extension.
I loose intellisense immediately. If I restart the HLS and VSCode, I can see in the status bar that the Haskell extension gets stuck on "Processing 20/27". Messages are sent to the HLS until I start editing something.
When I enable QuasiQuotes on the 2 files containing hsx, then:
When I remove hie.yaml
, I get a new behaviour:
Any cues please?
@pepeiborra I ran HLS with eventlog enabled on a single view file in a small IHP project. Here is the tracy file: hls.zip. 7 minutes in the typecheck phase!
The project this was ran on can be found here, and the command run for HLS was
haskell-language-server --debug Web/View/Dogs/Index.hs +RTS -l -ol/tmp/hls.eventlog
Running on WSL Ubuntu.
Probe tools:
haskell-language-server version: 1.5.1.0 (GHC: 8.10.7) (PATH: /nix/store/s6laz4m40wf1b4d8nc7ixlwkikmf4a7i-haskell-language-server-1.5.1.0/bin/haskell-language-server)
Tool versions found on the $PATH
cabal: 3.6.2.0
stack: Not found
ghc: 8.10.7
Reproduceable environment including HLS can be produced running nix-shell
in the project repo.
Running on a file without the "hsx" quasiquoter loads almost instantly, e.g. Application/Helper/Controller.hs
.
UPDATE: compiling HLS with --enable-executable-dynamic
appears to solve the issue in my repo at least.
Just did a quick check with IHP v0.18.0 and can confirm that HLS now seems to be working almost instantaneously. Great work and a big thank you to everyone involved. 🎉 👍
Just did a quick check with IHP v0.18.0 and can confirm that HLS now seems to be working almost instantaneously. Great work and a big thank you to everyone involved. tada +1
great! thanks for confirming it, i guess it works with building with --enable-executable-dynamic
workaround, right?
great! thanks for confirming it, i guess it works with building with --enable-executable-dynamic workaround, right?
yes exactly 👍 That flag is now enabled for all IHP users that run v0.18
I am gonna close this issue as all compiler crashes seems to have the same root cause:
If any of you think the issue should not be included generically feel free to reopen it (with a brief explanation if possible) Thanks all!
I know it's bad etiquette to comment post issue closure, but since many of us were here because of IHP I thought relevant to confirm that it now works out of the box just following the 3 command install instructions from IHP's official website.
Excellent work everyone! What a pleasure to see a lively community at work!
@mpscholten suggested that I open an issue in this repo.
Processing 31/32
or something similar appears, and the Haskell extension hangs.
The issue occurs multiple times in an hour while editing code in a newly created project with ihp-new.
I use pkill to kill HLS.
Here is the environment.
IHP v0.19.0
Haskell for Visual Studio Code v2.2.0
Visual Studio Code 1.68.1
Ubuntu 20.04
Here is a log.
2022-06-21 09:36:03.158685019 [ThreadId 17134] INFO hls: finish: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps (took 0.00s)
2022-06-21 09:36:03.158789395 [ThreadId 17135] INFO hls: finish: Wingman.judgementForHole.GetHieAst (took 0.00s)
2022-06-21 09:36:03.158872665 [ThreadId 17136] INFO hls: finish: Wingman.judgementForHole.GetBindings (took 0.00s)
2022-06-21 09:36:03.158941029 [ThreadId 17137] INFO hls: finish: Wingman.judgementForHole.TypeCheck (took 0.00s)
2022-06-21 09:36:03.159005734 [ThreadId 17138] INFO hls: finish: Wingman.judgementForHole.GhcSessionDeps (took 0.00s)
2022-06-21 09:36:03.325814303 [ThreadId 17167] INFO hls: finish: Completion (took 0.00s)
2022-06-21 09:36:03.501385144 [ThreadId 17382] INFO hls: finish: Completion (took 0.00s)
[Info - 9:37:15 AM] Connection to server got closed. Server will restart.
The troubleshooting guide didn't help. https://ihp.digitallyinduced.com/Guide/editors.html#vscode-haskell-language-server-troubleshooting
Linked issue on the IHP tracker: https://github.com/digitallyinduced/ihp/issues/1209
When using HLS as part of IHP, either locally inside a WSL2 distro or via a Gitpod instance, the Haskell extension in VSCode hangs for a lot of time before becoming operational. For me, it's usually 4 minutes or so but a friend of mine on a weaker PC reported loading times up to 20-30 minutes.
I've provided some logs below. Some of the actions that seem to have taken a lot of time are:
Wingman.getMetaprogramsAtSpan.TypeCheck (took 2m17s) Wingman.codeLensProvider.GetBindings (took 3m34s) RefineImports (took 3m34s)
When I'm using stack to manage my own Haskell projects, the extension seems to work fine and near instantaneously. Admittedly those projects are far smaller and have fewer files and everything... but ~4 minutes still seems very excessive to me.
Would be curious if anyone had similar issues and whether there might be a fix to speed things up.
Click to expand log
```log Found "/home/roy/Developer/personal/bookmark-app/hie.yaml" for "/home/roy/Developer/personal/bookmark-app/a" Run entered for haskell-language-server-wrapper(haskell-language-server-wrapper) Version 1.4.0.0 x86_64 ghc-8.10.7 Current directory: /home/roy/Developer/personal/bookmark-app Operating system: linux Arguments: ["--lsp"] Cradle directory: /home/roy/Developer/personal/bookmark-app Cradle type: Bios Tool versions found on the $PATH cabal: 3.6.0.0 stack: Not found ghc: 8.10.7 Consulting the cradle to get project GHC version... Project GHC version: 8.10.7 haskell-language-server exe candidates: ["haskell-language-server-8.10.7","haskell-language-server"] Launching haskell-language-server exe at:/nix/store/kq65wynaxf8f0kmrx698npsrdg63g8fy-ghc-8.10.7-with-packages/bin/haskell-language-server-8.10.7 haskell-language-server version: 1.4.0.0 (GHC: 8.10.7) (PATH: /nix/store/xpwc04nd8g9vxjvjs3p4mwbi8vfqh00r-haskell-language-server-1.4.0.0/bin/haskell-language-server) Starting (haskell-language-server)LSP server... with arguments: GhcideArguments {argsCommand = LSP, argsCwd = Nothing, argsShakeProfiling = Nothing, argsTesting = False, argsExamplePlugin = False, argsDebugOn = False, argsLogFile = Nothing, argsThreads = 0, argsProjectGhcVersion = False} with plugins: [PluginId "pragmas",PluginId "floskell",PluginId "fourmolu",PluginId "tactics",PluginId "ormolu",PluginId "stylish-haskell",PluginId "retrie",PluginId "brittany",PluginId "callHierarchy",PluginId "class",PluginId "haddockComments",PluginId "eval",PluginId "importLens",PluginId "refineImports",PluginId "moduleName",PluginId "hlint",PluginId "splice",PluginId "ghcide-hover-and-symbols",PluginId "ghcide-code-actions-imports-exports",PluginId "ghcide-code-actions-type-signatures",PluginId "ghcide-code-actions-bindings",PluginId "ghcide-code-actions-fill-holes",PluginId "ghcide-completions",PluginId "ghcide-type-lenses",PluginId "ghcide-core"] in directory: /home/roy/Developer/personal/bookmark-app Starting LSP server... If you are seeing this in a terminal, you probably should have run WITHOUT the --lsp option! Started LSP server in 0.03s setInitialDynFlags cradle: Cradle {cradleRootDir = "/home/roy/Developer/personal/bookmark-app", cradleOptsProg = CradleAction: Cabal} 2021-11-09 15:21:22.047563019 [ThreadId 5] INFO hls: Registering ide configuration: IdeConfiguration {workspaceFolders = fromList [NormalizedUri (-1027614979192674154) "file:///home/roy/Developer/personal/bookmark-app"], clientSettings = hashed Nothing} 2021-11-09 15:21:22.113315896 [ThreadId 96] INFO hls: Consulting the cradle for "Main.hs" Output from setting up the cradle Cradle {cradleRootDir = "/home/roy/Developer/personal/bookmark-app", cradleOptsProg = CradleAction: Bios} 2021-11-09 15:21:22.275097154 [ThreadId 96] INFO hls: Using interface files cache dir: /home/roy/.cache/ghcide/main-dab85eb4a271bd8d9607ae60f8f36b13c8d958a8 2021-11-09 15:21:22.275301813 [ThreadId 96] INFO hls: Making new HscEnv[main] 2021-11-09 15:21:22.324675893 [ThreadId 328] INFO hls: finish: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps (took 0.00s) 2021-11-09 15:21:22.325520979 [ThreadId 328] INFO hls: finish: ModuleName.ghcSession (took 0.00s) 2021-11-09 15:21:22.325719847 [ThreadId 324] INFO hls: finish: Wingman.getIdeDynflags.GetModSummaryWithoutTimestamps (took 0.00s) 2021-11-09 15:21:22.326199157 [ThreadId 319] INFO hls: finish: ModuleName.ghcSession (took 0.00s) 2021-11-09 15:21:22.326433995 [ThreadId 139] INFO hls: finish: ModuleName.GetParsedModule (took 0.00s) 2021-11-09 15:21:22.326800403 [ThreadId 323] INFO hls: finish: ModuleName.GetParsedModule (took 0.00s) 2021-11-09 15:21:22.330091861 [ThreadId 379] INFO hls: finish: eval.GetParsedModuleWithComments (took 0.01s) 2021-11-09 15:21:22.330184467 [ThreadId 380] INFO hls: finish: eval.GetParsedModuleWithComments (took 0.00s) 2021-11-09 15:21:22.330690486 [ThreadId 387] INFO hls: finish: Wingman.codeLensProvider.GetAnnotatedParsedSource (took 0.00s) 2021-11-09 15:21:22.330752136 [ThreadId 386] INFO hls: finish: Wingman.codeLensProvider.GetAnnotatedParsedSource (took 0.00s) 2021-11-09 15:24:56.248121566 [ThreadId 651] INFO hls: finish: codeLens.TypeCheck (took 3m34s) 2021-11-09 15:24:56.248127775 [ThreadId 652] INFO hls: finish: codeLens.TypeCheck (took 3m34s) 2021-11-09 15:24:56.248561625 [ThreadId 655] INFO hls: finish: Wingman.getMetaprogramsAtSpan.TypeCheck (took 2m17s) 2021-11-09 15:24:56.248581634 [ThreadId 656] INFO hls: finish: Wingman.getMetaprogramsAtSpan.TypeCheck (took 33.42s) 2021-11-09 15:24:56.248629944 [ThreadId 657] INFO hls: finish: Wingman.getMetaprogramsAtSpan.TypeCheck (took 31.67s) 2021-11-09 15:24:56.248838763 [ThreadId 666] INFO hls: finish: (took 3m34s) 2021-11-09 15:24:56.248998323 [ThreadId 667] INFO hls: finish: (took 3m34s) 2021-11-09 15:24:56.250996724 [ThreadId 700] INFO hls: finish: Wingman.codeLensProvider.GetBindings (took 3m34s) 2021-11-09 15:24:56.251188693 [ThreadId 702] INFO hls: finish: codeLens.GetBindings (took 0.00s) 2021-11-09 15:24:56.25184629 [ThreadId 703] INFO hls: finish: codeLens.GetBindings (took 0.00s) 2021-11-09 15:24:56.252512226 [ThreadId 699] INFO hls: finish: Wingman.codeLensProvider.GetBindings (took 3m34s) 2021-11-09 15:24:56.252829056 [ThreadId 704] INFO hls: finish: Wingman.emptyCaseScrutinees.TypeCheck (took 0.00s) 2021-11-09 15:24:56.252948795 [ThreadId 713] INFO hls: finish: Wingman.emptyCaseScrutinees.TypeCheck (took 0.00s) 2021-11-09 15:24:56.252975745 [ThreadId 715] INFO hls: finish: Wingman.emptyCaseScrutinees.GhcSessionDeps (took 0.00s) 2021-11-09 15:24:56.253053554 [ThreadId 720] INFO hls: finish: codeLens.GetGlobalBindingTypeSigs (took 0.00s) 2021-11-09 15:24:56.253112739 [ThreadId 719] INFO hls: finish: codeLens.GetGlobalBindingTypeSigs (took 0.00s) 2021-11-09 15:24:56.253022144 [ThreadId 717] INFO hls: finish: Wingman.emptyCaseScrutinees.GhcSessionDeps (took 0.00s) 2021-11-09 15:24:56.277750874 [ThreadId 778] INFO hls: finish: RefineImports (took 3m34s) 2021-11-09 15:24:56.277771453 [ThreadId 779] INFO hls: finish: RefineImports (took 3m34s) ```