ID:115580
 
Resolved
Some lengthy series of icon operations, like the kind used by the DmiFontsPlus library, did not use the read cache properly and therefore took much longer to complete.
BYOND Version:487
Operating System:Windows 7 Pro 64-bit
Web Browser:Firefox 5.0
Applies to:Dream Daemon
Status: Resolved (488)

This issue has been resolved.
Since BYOND has updated some of the icon procs to be more network friendly I've been encountering an issue with significantly increased CPU usage with icon.Blend().

Behavior observed both while hosted in dream daemon with clients connected and in a dream seeker hosted environment.

I have made a simple demo using LummoxJR.DMIFONTSPLUS to show the error. If I downgrade my version to 482.1091 it doesn't cause any server delays. However when I update to the latest version (487.1096) CPU usage increases on the BLEND proc (according to the profiler) and causes the server to freeze each time it needs to draw the text. I also tested it on another windows 7 64-bit based PC and the results were the same.

http://files.byondhome.com/Wanabe/SLOWBLEND_src.zip
So far I've been able to see the same thing in profile results between the two versions that you mentioned, and I've got some data from the internal profiler that I'm working with to correct this. Your demo is very helpful--thanks for boiling this down to such a concrete case.
Hey thanks for looking into this issue and applying a fix. However, after updating to version 488 I am still having degraded performance compared to 482. While running my basic test that I linked above it still causes server delays with most of the CPU going to Blend().

I have tested version 487 and 488 on a windows XP PRO SP2 based machine in addition to my windows 7 box and it shows the performance issue in both versions and operating systems. I have also tried uninstalling BYOND and then deleting any left over files then reinstalling just in case something was left over from a previous version.

I also went ahead and made a verb that creates the same text string (although still with the picked() colours) once a tick 10 times and ran this command 3 times (run test once in dreamseeker record "Total CPU" results of verb then close/reopen) per version for more consistent results to see if 488 had any noticeable positive effects for my main setup.

My results of profiling are as follows:

488 AVG: 5.196
487 AVG: 5.199
482 AVG: 0.377

After updating to the new version of BYOND, does my test file yield better results for you?
That's strange; that's not even close to the results I was getting in your demo. In fact even on my test build something seems wrong because it's not giving me the quick results it was formerly. Crap.
Well, I feel pretty stupid. Apparently while shoring up the safety of the fix, it accidentally got undone, and in the subsequent testing I was only looking at results instead of speed. Oops!

We've put up a fix for this as special release 488.1098. This fix impacts servers only and only in games that are impacted by the bug in the first place.

I should note that performance is not identical to 482 because of the icon changes; this is really impossible to get around fully. It is however very close and is on the same order of magnitude, while the bug you reported represented about a 10x slowdown. So all should be well with your server once you update the minor build.