Skip to content

Настройки rts

Denis Gabidullin edited this page Mar 30, 2021 · 4 revisions

Runtime система, встроенная в любую программу на Haskell, достаточно мощна и хорошо конфигурируема. Однако по историческим причинам опции по умолчанию далеки от идеала, и зачастую простой их настройкой можно улучшить производительность в разы.

Все опции можно найти на лучшем ресурсе по Haskell.

Опции можно задавать следующими образом:

  1. при запуске программы через агрументы командной строки:
$ ./myprogram +RTS опции -RTS
  1. через переменную огружения GHCRTS: GHCRTS=опции ./myprogram
  2. при компиляции, указав опцию --with-rtsopts='опции'

Ниже приведен достаточно простой набор опций, который может существенно улучшить жизнь:

  1. -A64m - размер первого поколения (до мажорной сборки), чем больше - тем реже минорные GC, но тем больше время выполнения каждого минорного GC, так же увеличивается потребление памяти программой. Занимаемая память: Размер A*число потоков.
  2. -qb0 - параллельная сборка c балансировкой, начиная с первого GC (не обязательно на современных GHC)
  3. -AL128m - размер общей памяти для больших объектов, разделяется на все потоки.
  4. -qn[CPU_COUNT/2] количество тредов, занимающихся сборкой, должно быть меньше или равно числу реальных CPU.
  5. -I0 - отключение idle GC.