#nix #clash #nix-shell
#nix #столкновение #nix-оболочка
Вопрос:
Я работаю с clash (haskell -> verilog), собираю демонстрационный проект по адресуhttps://github.com/mheinzel/clash-yosys-demo предоставляет как nix
ветвление, так и одно использование stack
.
Выполняется
time clash -v --verilog src/Top.hs -outputdir build
занимает
- ~ 1 м, если я запущу ее внутри nix-оболочки, по сравнению с
- ~ 2 секунды, если я использую версию, которую я установил с
stack install --resolver lts-12.12 clash-ghc
Я в значительной степени новичок в Nix и использую Nixpkgs, так что кто-нибудь может дать мне указания, где посмотреть, почему моя версия среды Nix намного медленнее? Кажется, что связывание используемых библиотек занимает целую вечность (это то, что я получил от использования -v
, флага verbose).
Комментарии:
1. Я бы обратился к
sysdig
для этого анализа, чтобы получить представление о том, что происходит в процессе. Это не общая проблема nix — это может быть специфично для clash или какого-либо другого конкретного инструментария, но действительно нужно немного доработать его, чтобы задать более сфокусированный вопрос.2. Я голосую за закрытие этого вопроса, потому что ссылка мертва (репозиторий, на который она указывает, также был удален с тех пор), поэтому в нем нет минимального воспроизводимого примера. Однако это вполне обоснованный и актуальный вопрос, и его можно было бы превратить в более общий, поскольку эта проблема специфична не для Haskell, Clash или любого конкретного программного обеспечения или пакета, а для языка деривации Nix и / или того, как работает Nix. (См., например,, discourse.nixos.org/t/why-does-nix-shell-take-so-long/8530 )
3. @toraritte, когда ты редактировал это, оно переместилось на главную страницу.
4. @toraritte, … тем не менее, повторите: «разве механизм не тот же?» — я не уверен, что понимаю. Создание чего-то вроде
pkgs.mkShell
деривации требует компиляции всего, что входит в эту деривацию, но как только деривация построена и вы активировали оболочку, то по большей части она действует как любой другой процесс; у вас есть динамическое связывание на основе rpath, длиннаяPATH
переменная и некоторые другие изменения, которые действительно влияют на производительность среды выполнения, но это сильно отличается от производительности процесса построения деривации и ее зависимостей, и это последнее описано в ссылке5. (и обычно время, затрачиваемое на
PATH
поисковые запросы и т.п., тривиально, поэтому снижение производительности во время выполнения из-за выполнения действий способом Nix в конечном итоге становится незаметным, за исключением микропереметок, предназначенных для его подчеркивания; таким образом, обычно заканчивается значительным снижением времени сборки, но незаметным во время выполнения).