What tools can I use to determine the hardware requirements of my application?
Asked Answered
R

5

13

For regular readers: The saga™ continues...

My app runs fine on my development machine - which was purchased (5 years ago) as a fairly good gaming rig. As such, it's 64bit, has a 2.2GHz clock-speed and has 2GB of memory.

The machines at work however, are standard Dell issue office computers and really struggle to even start my app, let alone run it.

(Explanation... I can imagine people screaming at me: "What on earth are you doing to require a spec like that?" Well, I'm doing a lot of real time image analysis and audio generation. So there.)

Our team has the budget to buy a dedicated laptop (needs to be portable) to run it on. So now I've been tasked with generating a minimum required spec.

What tools can I use to determine the lowest spec capable of comfortably running my app?

Update: The answers so far, whilst useful, focus more on alternatives to profiling. So I've put up a bounty to see if there is any software that'll do this sort of thing.

Reckless answered 12/7, 2010 at 10:45 Comment(3)
You could always try optimising your code a little so that it will run on a lower spec machine. Failing that you'll just have to test your app on various candidate machines to get a feel for what you need to get acceptable performance.Backboard
Thanks Paul. I've taken optimisation as far as my limited development skills will allow. (If you're curious, feel free to checkout the source. I'd be very grateful for any help!) The latter option is my backup, but since we're buying a dedicated machine, it'd be nice to get it right first time.Reckless
No surprise there... standard Dell office PCs run Celerons with slow ram. If it runs fine on the specs above, can't you use that as a baseline? Obviously a laptop will have heat issues if you're running heavy computations on it for long periods of time, but hardware is pretty cheap nowadays. Just don't get a power-saver model. ;)Mufinella
C
6

Do you have access to a good profiler? I think it would be worthwhile to understand the performance bottlenecks in your application. If it turns out that your application is CPU bound, then you'll obviously want to consider splurging on a high-end processor. Is the application multi-threaded? If so, is your application taking advantage of multiple processors or is it getting serialized because of synchronization?

If the application is IO bound, perhaps you should instead consider getting an SSD drive.

Perhaps the app is spending too much time paging? etc...

If you have access to Visual Studio 2010 Ultimate, I'd recommend checking out the Concurrency Profiler. It will help you visualize what's happening in your program and identify the performance bottlenecks. It will show you where your app is spending time: waiting on IO, memory management, etc. While this tool certainly won't tell you what the minimum hardware requirements are, it should give you a good idea of what hardware improvements will help your app perform better. If you don't have VS2010, you could probably conduct a similar analysis with any good profiler. The cool thing about the Concurrency Visualizer is that it focuses on exposing concurrent and multi-threaded performance problems.

Comatose answered 18/7, 2010 at 2:58 Comment(2)
I currently only have Professional, but if I can upgrade I'll seriously consider it. The performance profiling tools look really useful. I don't suppose you could recommend any other profilers?Reckless
Hi Tom, I wish the upgrade wasn't so expensive :( It's really a shame. One great free option is "xperf". It comes with the Windows Performance Analysis tools (available here: msdn.microsoft.com/en-us/performance/cc825801.aspx ). xperf is incredibly powerful, but has a steep learning curve. It doesn't hold your hand as much as the VS profilers. It also looks like there's an open source profiler called "Sleepy", available here codersnotes.com/sleepy , but I've never used it.Comatose
L
1

Nothing beats real world testing...

Try running your app on a variety of hardware and come up with a recommended minimum based on YOUR PERCEPTION of acceptable performance.

Note: There is often a big difference between absolute minimum hardware requirements and recommended minimum acceptable requirements (which it sounds like is what you are really after).

Leonardoleoncavallo answered 12/7, 2010 at 17:27 Comment(0)
M
0

One option is to create a series of virtual machines with varying system configurations and try your app out in each (you will want to do this on a high-performance machine). That way, you can adjust the amount of memory the VM has, the CPU type, etc and simulate testing the software on a variety of systems. While testing, you can use the Windows Task Manager to see how much of the host CPU and memory your app is using. For a comfortable experience, you will want your app to fit within physical memory as much as possible (plus about 1-1.5 GB for the OS and other background services).

Also keep in mind whether your app has any features that require hardware support (DirectX 11, CUDA, etc) and make sure that you include that in your hardware requirements.

Mountebank answered 12/7, 2010 at 17:31 Comment(0)
A
0

From the brief info it doesn't sound like your PC is a particularly high spec. What spec are the Dell machines you've seen run it slow?

I'd try another PC in case the 'work' machines are just bad software builds (guessing standard XP disk controller drivers etc).

I wouldn't generally recommend going down the VM route as really that's only any good for constraining RAM usage. If however you need to check alternative OS's / Service Packs then VMs ARE a good way to go.

Lastly you say the app is slow to load, what is it doing on load? It may be an idea to look at the performance monitors to see whether it is disk, RAM or CPU constrained. Use Google to find useful counters for monitoring each.

Affectation answered 12/7, 2010 at 19:26 Comment(2)
With regards to the spec, my dev PC isn't that high spec by modern standards: Dual core AMD64 running at 2.21GHz with 2GB of (what I'm presuming to be) DDR2 memory. Work computers seem to be uniformly half this: i.e. Single 32 bit core running at around 1GHz and usually with 1GB of RAM.Reckless
1Ghz CPU in a desktop machine is going to be very old, I would guess most likely a Pentium 3 which is probably not even up to displaying most modern flash web pages. The only thing I would check is using performance monitor whether the RAM usage is high and thus it's starting to swap on the 1Gb RAM machines. Really 1Gb RAM is a suitable minimum for a non-specialist application so you should try to fit in that. On the CPU just go for your CPU (and Intel equivalents) as a minimum, look at Toms Hardware to work out the equivalents in Intel, mobile etc.Affectation
D
0

Forgive me for stating the b*****g obvious but:

Use YOUR software to check the hardware requirements for YOUR software.

I don't quite understand why the spec of your development machine isn't simply the required spec for the laptop you propose to buy. But if that's not good enough for some reason, run your software on some hardware with other specifications. You could, for example take 1GB RAM out of your development machine to see how things go with less memory available.

There is a huge amount of benchmarking software available for all sorts of tasks. For example LINPACK is much used for benchmarking supercomputers. The flaw in all of these off-the-shelf benchmarks, and in the approach in general, is that they only give you good information about how a computer runs the benchmark. Transforming benchmark results into predictions of performance of hardware with your software is more an art than a science. In the supercomputer world organisations benchmark their own key applications on new platforms before purchasing.

Dowie answered 20/7, 2010 at 8:26 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.