Slow Knife? Speed up with Knife rehash

The Chef DK includes a tool called Knife. This is primarily used for interaction with remote resources in Chef, such as the Chef Server and Chef managed nodes, but can be used for managing other remote systems too. Here’s the description from the Chef Docs.

knife is a command-line tool that provides an interface between a local chef-repo and the Chef server.

It’s a great tool and a vital part of any Chef administration tasks. Unfortunately Ruby on Windows is slower than Linux and so Windows users sometimes experience performance issues. Check out the result of the following running on my top-spec Ultrabook running Windows 10:

C:UsersjgardRepositorieschef-repo> Measure-Command {knife node list}

Days              : 0  
Hours             : 0  
Minutes           : 0  
Seconds           : 6  
Milliseconds      : 312  
Ticks             : 63120307  
TotalDays         : 7.30559108796296E-05  
TotalHours        : 0.00175334186111111  
TotalMinutes      : 0.105200511666667  
TotalSeconds      : 6.3120307  
TotalMilliseconds : 6312.0307  

A wait of 6 seconds every time I want to run the commonly used knife node list is not ideal. Fortunately a knife command that comes with the Chef DK by default is available to address this issue.

Using knife rehash we can create a cache of the local knife sub commands on disk. When knife runs it no longer builds a tree of available sub commands, which reduces execution time.

C:UsersjgardRepositorieschef-repo> knife rehash  
Using knife-rehash will speed up knife's load time by caching the location of subcommands on disk.  
However, you will need to update the cache by running `knife rehash` anytime you install a new knife plugin.  
Knife subcommands are cached in C:/Users/jgard/.chef/plugin_manifest.json. Delete this file to disable the caching.  

After creating the cache the knife node list command performance is greatly improved.

C:UsersjgardRepositorieschef-repo> Measure-Command {knife node list}
Days              : 0  
Hours             : 0  
Minutes           : 0  
Seconds           : 2  
Milliseconds      : 954  
Ticks             : 29545646  
TotalDays         : 3.4196349537037E-05  
TotalHours        : 0.000820712388888889  
TotalMinutes      : 0.0492427433333333  
TotalSeconds      : 2.9545646  
TotalMilliseconds : 2954.5646  

There are some caveats:

  • If you install a new Knife gem or plugin you need to re-run knife rehash.
  • The same applies for a chef DK update- don’t forget knife rehash!
  • If you get strange output with Knife it’s worth trying a knife rehash before debugging further.

Finally, if you want to stop using the cache just delete the JSON file. On Windows it’s here: C:/Users/<username>/.chef/plugin_manifest.json

Joe Gardiner
Joe Gardiner
Technical Architect

An experienced technical architect witha focus on vendor and MSP pre-sales.

comments powered by Disqus