I'm trying to decide between using Puppet or CFEngine for my configuration management system.
Performance is going to be a key factor, and research on the internet suggests CFEngine uses less memory and CPU cycles compared to puppet. However, puppet seems easier to use.

I need to manage several web servers, as well as handheld tablets and machines that will only connect to some central control servers periodically. All are Linux machines.

Would I be able to use either Puppet or CFEngine for this? And if so, does Puppet still make poor use of resources?

Also part of the reason I'd like to use Puppet is because it seems simpler, but a lot of the articles I've found refer to CFEngine 2 - is CFEngine 3 easier to configure?

5 Answers 5


You can use both tools for your use case. I don't know how powerful are your handhelds tablets, but you might be interested to know that:

  • CFEngine agent uses about 15 MB of RAM (never seen it going over 30 MB on any of my servers) (and it's been reported working on a Nokia N900 phone)
  • Puppet needs the Ruby stack to work, and according to documentation, Puppet will eat at least 80 MB of RAM

CFEngine 3 syntax is easier than CFEngine 2's. I wouldn't compare to use Puppet because I'm not a Ruby fan, so I would be biased :)


If you're looking for performance, Cfengine is the choice. In your case, you don't want to maintain a fully fledged Ruby+Puppet installation on handheld devices.

That Puppet is "easier to use" is just a myth created by the Puppet people, go ahead and try Cfengine (also have a look at the open promise body library).


Note that I have only used cfengine (v2) and not puppet/chef etc. All of these have pretty hefty learning curves to get your head fully wrapped around how to do things. Though these days there are many more examples on the net to look at.

That said, there has been at least one paper that claims that cfengine is more lightweight. This facebook page from cfengine refers to the paper that is actually in the usenix ;Login: magazine: http://www.facebook.com/note.php?note_id=319929967052 (I am not sure if non-usenix members can read that specific article in ;Login: yet)

Assuming your tablets and such have a reasonable amount of resources, I would think the resource impact would mainly come down to how often it gets run on the client/tablet. Once a day is quite a bit different than every 10 minutes!


Although this is an old question, I thought it'd be relevant to link to this recently-posted performance comparison between Puppet and CFEngine: http://www.blogcompiler.com/2012/09/30/scalability-of-cfengine-and-puppet-2/

Although it was done by a CFEngine employee, it is IMO fairly impartial, and all the details needed to reproduce the results are included.

(disclaimer: I am also a CFEngine employee)


How many machines? Puppet resource usage on the client is pretty irrelevant if you are only going to run it every now and then. The amount of clients and frequency of contacting the server are much more important, because the server can use quite a few resources. I have tens of machines contacting the puppet server every hour, and I've gotten around fine using just the trivial and poorly performing built-in server without any special setup.

  • it might end up around 100-200 machines. i don't mind server load as long as the clients perform OK
    – Andy
    Sep 1, 2010 at 13:15

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy