What is a SM_SLOWMACHINE?


Jason Doucette asks how slow a machine has to be to be considered a GetSystemMetrics(SM_SLOWMACHINE).

The answer: Pretty darned slow by today's standards.

When the metric was introduced in Windows 95, the definition of a "slow machine" was as follows (roughly):

  • If the CPU was an 80386, then the machine was considered slow.
  • If the computer had less than 6MB of RAM, then the machine was considered slow.
  • If the display driver† admitted that it was slow, then the machine was considered slow.
  • Otherwise, the machine was considered fast.

That bit about the display driver is a little strange. Windows actually trusted display drivers to report when they were slow. The guidance in the device driver documentation was to mark a driver as slow if it did not perform graphics hardware acceleration, but of course no card manufacturer would admit that their card was slow! I suspect nobody ever set that bit.

The "slow machine" flag was used only in a handful of places in the system. The two you'd be most likely to notice are whether animations should be on by default and whether disabled text should be shown as solid gray text (on slow machines) or with an embossed effect (on fast machines).

The idea was to raise the requirements over time so that a "slow machine" was one that was slow from the point of view of whatever the performance standards for computers were at the time the corresponding operating system was released. Why this was not done I do not know for sure, but I have my guesses.

  • Upgrading your Windows 95 machine to Windows 98 could result in a machine that previously had been considered "fast" to be reclassified as "slow". As a result, when you upgraded your computer, it actually lost functionality and looked uglier because some features which had been on by default shut themselves off.
  • The minimum recommended hardware requirements were high enough that the few things that were based on whether you had a "slow machine" really didn't matter any more. All machines that met the Windows 98 hardware requirements could certainly handle text embossing without any real problems.
  • As noted above, no video card manufacturer would voluntarily mark their driver as "slow" anyway.
  • The Windows 98 team just plain forgot.

Whatever the reason, the standard for a "slow machine" remained unchanged, and soon the level of hardware reached the point where even the cheapest computers on the market easily blew past all the "fast machine" requirements.

In Windows NT, the algorithm for determining whether you had a fast or slow machine was therefore simplified to a single step:

  • All machines are fast.‡

In other words, there's nothing to see here any more. Move along.

Nitpicker's corner

†s/the display driver/the Windows 95 display driver/

‡Some people seem to have lose the ability to read sentences in context. For those people, may I first recommend a reading class. In the meantime, you can pretend that the sentence reads "As far as the SM_SLOWMACHINE system metric is concerned, all machines are fast for the purpose of determining what the return value of GetSystemMetrics should be."

Comments (26)
  1. Gabe says:

    It’s a shame that the “slowness” isn’t determined constantly at runtime. There’s nothing more annoying than trying to get something done on a heavily laden machine (due to either CPU or paging activity), and having to wait for stupid UI animations to finish. A simple operation of trying to kill whatever app is using all of the machine’s resources could take minutes just waiting for all the UI animation. I always thought that the animation should occur in absolute time; that is, if a 10-frame animation should take one second but can only update every 500ms, it should only show frames 5 and 10.

    On a related note, the NT kernel used an internal metric to determine memory tuning parameters. A machine could be either SMALL, MEDIUM, or LARGE. I think SMALL was 32MB of memory and LARGE was 64MB. I don’t think you can even install on a machine that wouldn’t be considered LARGE anymore.

    [Um, animations do happen in absolute time. That’s why we have the term “dropped frames”. -Raymond]
  2. Adrian says:

    AVI playback will drop frames as necessary, but I wonder if Gabe was refering to other types of animation used in the UI, like AnimateWindow and DrawAnimatedRects.  It’s not clear to me if any of those respect absolute time or if those frames can queue up when the machine is overburdened.

    AnimateWindow takes a total time in milliseconds, but it might just queue up a number of frames based on that time, regardless of whether the machine can actually keep up.

    My experience with DrawAnimatedRects is that can be far too fast on modern machines to even be visible.

    And of course, who knows how many home-grown animations have been implemented and how well they behave.

    [AnimateWindow and DrawAnimatedRects respect the time limit. I’m surprised that people assume it doesn’t. -Raymond]
  3. Sebastian Redl says:

    And of course, who knows how many home-grown animations have been implemented and how well they behave.

    Good question. I know one I did some time ago (the code never made it to release) didn’t behave well. It always drew 10 frames, no matter what.

    It seems the Vista team learned something. Now they use a continuous performance rating. One has to wonder why the original team didn’t have this idea.

    Speaking of the performance rating, is there an upper bound to that scale? (Aside from type limits, of course.) If there is, then the thing will eventually have exactly the same problem: future computers will always have the highest possible rating, and reusing the current scale is not possible because otherwise computers wouldn’t do UI gags that they’re perfectly capable of.

  4. mikeb says:

    Raymond:  Thanks for your "Windows Trivia" posts – I love ’em!

  5. Surge says:

    Why not monitor performance dynamically, and disable animations based on cpu usage/memory load?

  6. FelixTheCat says:

    Why not monitor performance dynamically, and disable animations based on cpu usage/memory load?

    See Windows Experience Index and Aero Glass in the new Vista operating system

  7. andy says:

    “In other words, there’s nothing to see here any more. Move along.”

    Wait! Didn’t something like this resurrect with the “Windows Experience Index”[1,2]?

    But now the scale is [1.0, infinity> or something like that…

    [1] http://windowsvistablog.com/blogs/windowsvista/pages/458117.aspx

    [2] http://windowshelp.microsoft.com/windows/en-us/community/wei.mspx

    [You don’t have to teach me about the performance index. I talked about it for an hour at the PDC, remember? But it has no connection to SM_SLOWMACHINE, which today does nothing. -Raymond]
  8. Mike Dimmick says:

    Laz: disks do get faster as more bits are packed into the same space, at least for burst transfer speed, even with the same angular velocity. (Even if the velocity, metres per second, stays constant, if bits/metre is increased, you get more bits/second). However, the track seek time is very slow to improve, because the head still has to move across the disk at the same speed. The disk’s rotational speed also affects the time to find the first sector to be read once the head is located above the first track.

    [Hey, guys, remember when we were talking about SM_SLOWMACHINE? -Raymond]
  9. Michael Moulton says:

    Not surprising that the display driver authors wouldn’t admit to being slow.

    Wouldn’t it have made more sense to make that a "performs hardware acceleration?" flag and trigger SM_SLOWMACHINE off of that?  People would be honest about a flag that had a real meaning, rather than the arbitrary "slowness."

    After all, nobody reads the documentation anyway.

  10. C Gomez says:

    It was an idea.  It didn’t work… probably for some or all of the reasons given or even more.

    What I like about this post is it provides a snapshot into the thinking of a feature that didn’t turn out the way one might think.  After all, if I was producing version 1.0 of something, I might think this is a good idea… without realizing that when I went to work on version 2.0 I might do something like degrade the user experience on the very same computer when the user upgraded.

    It’s a lesson learned that can be instructive so as to prevent the same occurences.  Very interesting…

  11. John says:

    By NT do you mean the entire NT line (i.e. 3.1+) or the commonly accepted 4.0+?  Is it possible to install (or run) Windows NT on a machine that Windows 95 would consider to be “slow”, and if so what would happen?  Is that metric used anywhere in the operating system itself or is it provided merely for the benefit of external applications?

    [The issue of what SM_SLOWMACHINE returns on NT 3.1 is moot since SM_SLOWMACHINE was added after NT 3.1 shipped. -Raymond]
  12. andy says:

    Sorry Raymond! Just found that the basic concepts in these two mechanisms, e.g. "some way to distinguish quick vs slow computers", to be similar. Therefore I was really wondering if the WEI is somehow connected to SM_SLOWMACHINE. Apparently not :)

  13. Brother Laz says:

    I don’t see how the rating system in Vista is better than this old abandoned mechanic. By lumping together scores from different sources, you’re ignoring the fact that some software relies much more on one component than another.

    Should a game company that releases a DX10 game require a score of 5.9, the score of the slowest DX10 cards? No, because few hard disks (*) reach a score of 5.9 and you probably don’t need a Raptor just to play their game. People may end up replacing their HD to run a game they would already have been able to run in the first place, with the only difference being it’ll load in 20 seconds instead of 30.

    Should Photoshop require a 5.0 score? It is almost unusable unless you have oodles of RAM, but there is no need to replace your onboard video rated at 3.0 to run Photoshop (you may want to turn off Aero, of course).

    (*) Hard disks are going to be the downfall of the Vista ratings system, because they don’t really get significantly faster, only bigger. Two years from now, the new processors and graphics cards will trample all over the current ones, but there probably won’t be too many 15,000 RPM HDs yet. Either they will drag down the overall rating, or the grading system should make unrealistically huge leaps between drives that are actually quite comparable to make up the gap.

    [This post was not about the Vista rating system. It was a historical discussion, not a forward-looking one. -Raymond]
  14. Rob Rose says:

    Thanks for validating what I had assumed.  A couple of months ago when I discovered this flag I tried underclocking our CPU down to 800MHz, then 600, and finally 400MHz and never saw SM_SLOWMACHINE turn on. At that point this seemed like a dead flag.

  15. DriverDude says:

    [AnimateWindow and DrawAnimatedRects respect the time limit. I’m surprised that people assume it doesn’t. -Raymond]

    Given how many times I’ve been burned by software bugs – as a user, developer and tech support – I don’t just assume anything works anymore.

    Maybe I’m getting cynical in my old age…

  16. Norman Diamond says:

    > If the CPU was an 80386, then the machine was

    > considered slow.

    > If the computer had less than 6MB of RAM,

    > then the machine was considered slow.

    Yeah, I’ll agree.  Even though they’re more powerful than the computers I learned on, they sure are slow.

    > If the display driver admitted that it was

    > slow, then the machine was considered slow.

    I sure hope the VGA Save driver qualifies.  It’s still pretty easy to get this driver, even on a 2 month old machine running Vista, and on a 3 year old machine running Vista.

    > As a result, when you upgraded your computer,

    > it actually lost functionality and looked

    > uglier

    Yup, on a 2 month old machine running Vista.

    An unrelated note:

    Monday, March 12, 2007 11:22 AM by Gabe

    > A simple operation of trying to kill whatever

    > app is using all of the machine’s resources

    > could take minutes just waiting for all the

    > UI animation.

    When this was happening to me last week and this week, it was because device arrivals and removals were happening faster than explorer.exe could keep up with notifications.  Even if I could kill the explorer.exe process that was using all of the machine’s resources, I wouldn’t get a usable machine.

    [Um, these are Windows 95 drivers I’m talking about. I’ll add a clarification to the nitpicker’s corner. -Raymond]
  17. nksingh says:

    [You don’t have to teach me about the performance index. I talked about it for an hour at the PDC, remember? But it has no connection to SM_SLOWMACHINE, which today does nothing. -Raymond]

    This reminds me of an odd saying I recently learned:  Don’t teach your grandmother how to suck an egg!

    (Take this in jest: I like your blog too much to say you’re a grandma or suck eggs.)

  18. Bob says:

    No, if anything’s a contender for reinstating SM_SLOWMACHINE or inventing Vista ratings below 1.0 (or even 0.0), it would be something like this: http://www.winhistory.de/more/386/xpmini_eng.htm

  19. Drak says:

    Very interesting. It never occurred to me that Windows 95 did such a thing.

  20. Leo Davidson says:

    Presumably what replaced this too-generic flag was the set of checkboxes (and underlying flags) you see in Control Panel > System > Advanced System Settings > Advanced > Performance > Visual Effects.

    This seems a much better way of doing things as the meanings of the flags don’t change over time. The likelihood that all of the existing flags are turned on by default increases over time, but new flags can be added. As a bonus, even on fast hardware you can turn off effects which may annoy you.

    (Even on fast machines I used to turn off the minimize/maximize animations in XP and below since I found them an ugly waste of time, for example. Those are much nicer in Vista for a variety of reasons, but that’s way off topic.)

    Presumably if the Visual Effects tab had existed back in Win95 then there would still to this day be checkboxes (or perhaps just always-on flags like SM_SLOWMACHINE) controlling how disabled text is rendered etc. individually. But since it’s no longer remotely taxing to render a string twice to get the embossed effect there is no need for such a flag to be added now (or when Visual Effects appeared). Eventually translucency will be a trivial effect and maybe those options will go away, but I’m sure (and hope) that some will stay just so people can decide which features to use when some annoy them.

  21. Massif says:

    I like the idea of dynamically determining if the system is slow, just to burn a few extra cycles when they may come in handy.

    Would it even be possible to get a Win95 system to report slow on hardware bought in the last few years, seems to me that even phones wouldn’t qualify. (Although if you can run Win95 on a phone I’ll give you a biscuit.) I guess you could try to create a VM with less than 6MB of RAM, but would virtual PC let you?

  22. Ulric says:

    Don’t you think that this Nitpicker’s corner is a little ridiculous…  I’m not even sure the search-and-replace even helps, the very subject of the article is how this flag is specific to Win95 and pre-NT. (Btw – my nitpick: I don’t a unix text editor and I think your search&replace command is very un-Windows-like ;-) )  

    [Well, at least one person was confused without the nitpick. -Raymond]
  23. Igor says:

    Display driver vendors weren’t behaving then and they still don’t behave. Just mention of DPCs taking longer than 20ms makes my skin crawl. No wonder people complain about audio snap/crackle/pop all over the net.

    SM_SLOWMACHINE didn’t have any sense so it is good that it died away. You could have had fast machine loaded with so many background tasks that it gets unusable and it would still came up as FAST to the querying application.

    Also, everyone should check performance of the subsystem he is most interested in, generic SM_SLOWMACHINE doesn’t help at all. Game should check 3D performance, database application should check the amount of RAM, drive speed and free space, molecular dynamics application should check CPU (FPU) speed, etc.

    Vista performance index is a step in the right direction but it is still far from perfect. We already discussed it so I won’t repeat myself here.

  24. "All machines are fast."

    Hah. That is excellent.

  25. Raymond, thanks for answering my question.

    I wanted to use SM_SLOWMACHINE to take precautions for my CPU intensive graphics application on slow machines.  But, I was surprised when my girlfriend’s 550 MHz Pentium III wasn’t rated slow. (I would have never guessed that a 486 would be considered "fast".)  I began to wonder how useful of a measure it was, and if anyone even used it.  It seemed like a forgotten Win32 feature, like WM_COMPACTING.  (But, at least WM_COMPACTING’s docs tell you it isn’t used anymore.)

  26. fast!=nt says:

    > All machines are fast.

    Because you cannot run NT on a slow machine?

    [Please read the entire article, not just the punch line. -Raymond]

Comments are closed.

Skip to main content