diff options
Diffstat (limited to 'results/scraper/fex/1625')
| -rw-r--r-- | results/scraper/fex/1625 | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/results/scraper/fex/1625 b/results/scraper/fex/1625 new file mode 100644 index 00000000..0b78135a --- /dev/null +++ b/results/scraper/fex/1625 @@ -0,0 +1,15 @@ +Support IR and RAData thread pool allocation +Support allocating this out of a reuse pool. +This way threads that aren't actively compiling code aren't causing memory overhead. +Have them relinquish their resources to the pool after using them. If the all resources are consumed then allocate more objects in the pool. +Free pool resources in an LRU manner once they have reached some threshold. +This will reduce the memory usage overhead of FEX substantially. Currently our per thread memory allocations are quite heavy, so something like Steam consumes 1.3GB idling and half of that is due to IR/RAData staging buffers that aren't used since most threads are just sitting in pselect. + +Current known areas to throw in a pool: +* OpcodeDispatcher: 8MB + 8MB +* IRCompaction: 8MB + 8MB +* Frontend: Instruction decode buffer: 6.5MB (sizeof(DecodeInst) * 0x10000) (Set up with mmap so it doesn't use all the physical memory) +* RAData: A few dozen megabytes per thread? Will need to check again. + +For reference. Idling Steam has 39 threads (not including steamwebhelper) so even with the minimum of OpcodeDispatcher+IRCompaction being 32MB. That's still 1248MB burned to idling work. +Which holds true since the process is consuming >1.5GB idling at that point. \ No newline at end of file |