Monthly Archives: March 2010

Fundamentals of vSphere Performance Management

Performance monitoring is a critical aspect of vSphere administration. This article introduces you the basic concepts and terminologies in vSphere performance management, for example, performance counters, performance metrics, real time vs historical statistics, etc. Much of the content is based on my book VMware VI and vSphere SDK by Prentice Hall.

Once you understand these basics, the related tools and APIs should be relatively easy. If you are already familiar with vSphere Client performance monitoring or esxtop, they help as well.

Performance Counter

A performance counter is a unit of information that can be collected about a managed entity. PerfCounterInfo data object, shown in Figure 1, represents a performance counter. The property key is an integer that uniquely identifies a performance counter, like a primary key of a table in SQL database, and nothing more. There is no guarantee for a performance counter to have a fixed number. In fact, the same performance counter can have different values in ESX and VirtualCenter. Even for the same type of server, the number could change from version to version. Do not use it outside the context of the server you connect to.

Figure 1 PerfCounterInfo data object

The performance counter can be represented by the following dotted string notation:

Posted in vSphere API | Tagged , , | 9 Responses

3 Ways to Get Hold of Managed Objects in vSphere

If you have ever used vSphere Web Service API, you must have known that there is no managed object but ManagedObjectReference object. Understanding it helps deepen your understanding of the vSphere API.

Honestly, the ManagedObjectReference is a little confusing by itself. It is in fact a data object but represents a managed object. You can think of a MOR as a pointer in some sense because it’s used to uniquely identify a managed object. Even better, you can think of the “type” and “value” defined in the MOR in the SQL way. The type is like a table name, and the value like the primary key which can uniquely identify a managed object in its type.

MOR is really intended to be used by program and should be carefully limited to the scope of where it comes from. That is why it’s hidden from application developers in vSphere Java API.

Anyway, let’s see how to get hold of MOR objects:

Posted in vSphere API | Tagged , | Leave a comment

vSphere Inventory Structure Deep Dive

This blog digs into the vSphere inventory structure, and changes in vSphere 4 from VI. It explains the difference between ESX and vCenter inventory tree, why the inventory path you see from vSphere Client doesn’t work with API. Much of the content is adapted from my book VMware VI and vSphere SDK by Prentice Hall.

Inventory vs. Inheritance hierarchy

My previous blog introduced the object model of the vSphere API. The UML diagram there shows how different managed object types are structured in the inheritance hierarchy.

The inventory hierarchy is quite different. It shows how different managed object instances are associated. With this understood, you can easily navigate among different managed objects in inventory tree of both ESX and vCenter. It’s critical for programming vSphere API because navigating the inventory is the primary way to get hold of managed objects.

Posted in vSphere API | Tagged , | 7 Responses

My Posts at VMware vCloud Blog

I posted my first blog at VMware vCloud blog site, the company’s official blog on cloud computing, last month. It’s about the high level comparison between vCloud API and Amazon EC2 API: what is common and what is different?

Yesterday I posted my second blog there about moving virtual machines back from the service providers’ cloud to the enterprise. It’s not as easy as we expect today. We need one click sending VMs to and from the public cloud.

Posted in Cloud Computing | Tagged , | Leave a comment

VMWorld 2010: Call for Papers and Pre-registration

The world’s largest conference in virtualization industry VMWorld  is coming. It will take place in San Francisco August 30 to September 2, and in Copenhagen October 12 -14. There will be about 170 unique sessions in the US and 130 unique sessions in EMEA; this includes sessions from VMware employees, customers, sponsors, virtualization vendors and industry specialists.

Posted in News & Events | Tagged | Leave a comment

Two Opposite Trends in Java Programming: Which Should You Go With?

Java is a static typing language, meaning you have to define a type before you can use it and the compiler checks the types for you. Some people like the static typing and others don’t. People like it would like even more into the language. Some others would prefer less typing. The rest don’t have strong opinions and are OK with both.

In the last several years, we actually see two opposite trends in Java programming: stronger typing and weaker typing. This blog analyzes in depth why these two trends happened and what do they mean for you. 

Posted in Software Development | Tagged , , | 2 Responses

Demystifying 3 “View”s from VMware

After I blogged the top 5 myths of vSphere API, William Lam suggested me to write a bit more on the views in his comments. If you haven’t followed him (@lamw) at Twitter yet, you may want to. His vGhetto Perl repository is one of the best resources for people who use VI Perl.

For sure, VMware loves the term “view”. As far as I know, there are 3 different ”views.” Two of them are for APIs; the last one is for the desktop product family. We are not going to talk about the product View in this blog. You can find more information at VMware web site.

Let’s instead focus on the two “Views” for developers: one is in VI Perl and .NET/PowerCLI; the other is part of the core vSphere API.

Posted in vSphere API | Tagged , , , , | 6 Responses

Top 10 Best Practices Architecting Applications for VMware Cloud (part 4)

This 4th and last part contains best practice No.7 ~ 10. To be notified for future posts, feel free to subscribe to this feed, and follow me at Twitter.

#7 Levarage vApp

vApp is a new addition to vSphere. It’s essentially a group of VMs that work together as a solution. You can manage them as a basic unit like a VM. It provides you higher level granularity for resource allocation and management.

This is an ideal container for your application if you have multiple virtual machines involved. They may or may not form a cluster, but are bundled together for a same goal.

The vApps are not only easily managed by the vSphere, but also imported and export as a bundle. Therefore you can easily move it without worrying what should be included while copying it.

VMware provides tools like VMware Studio using which you can create and configure vApps easily. The VMware Studio has Web based console, customization and build engine, build process automation with CLI (command line interface).

Other alternatives include:

Posted in Cloud Computing, Software Development | Tagged , , | Leave a comment

Hardware Designers vs. Software Designers

Just read part of the book Founders At Work over the weekend. Although I haven’t decided to be a founder of a startup company, I found the stories there are trully inspirational. You can read part of the book at Google book.

One interview with Hotmail cofounder Sabeer Bahatia is very interesting with his thoughts on the differences of software and hardware designers:

Posted in Software Development | Tagged , | 2 Responses

Top 10 Best Practices Architecting Applications for VMware Cloud (part 3)

This 3rd part contains best practice No.4 ~ 6. To be notified for the rest, feel free to subscribe to this feed, and follow me at Twitter.

#4 Scale Applications as Needed

Most time, people think scalability is to handle more workload when needed. This is true, but not enough. A truly scalable system should scale back. This is how you will save money. This is equally important as the first case where you get more revenue by serving more traffic.

There are different ways to scale:

  • Up and down. This is unique in virtualized environment in which you adjust the memory or CPU allocation and use more or less of them instantly.
  • Out & in. This means you include more machines either physical or virtual into your application.

You have to think over several architecture decision points:

Posted in Cloud Computing, Software Development | Tagged , , | Leave a comment

Top 10 Best Practices Architecting Applications for VMware Cloud (part 2)

This second part contains best practice No.1 ~ 3.

#1 Move Up to Higher Level Software Stack 

“If I have seen a little further it is by standing on the shoulders of Giants.”

 Isaac Newton

Modern software development is all about leverage. You don’t want to build everything from bottom up. Whatever “giant shoulders” you can leverage, you should do so. Remember the keyword here is “giant shoulders.” You got to be selective on what is “a giant” and what is not, for the best quality of your system. Your application’s quality is a function of that of the systems underneath it.

The typical “giant shoulders” includes middleware, high level programming languages, tools. By leveraging these, you should expect your applications portable, and with much less code and higher developer productivity. The portability is very important when you want to deploy your applications in federated cloud environment.

I posted a short article after the cloud demo in VMworld 2009 keynotes. It’s reposted at SpringSource blog. The article introduced “DIY PaaS” concept which you could have a higher level of development platform inside your enterprise in a similar way as would you get from vendors like Google, but without vendor lock-in.

The “DIY PaaS” does not require you to use any specific platforms, middleware or framework. You could use any existing combination of systems on top of Java, .Net, Python, PHP. For example, you could use Java with Spring framework for building your web applications or enterprise integration frameworks. The choice is really yours, not of any vendors. When making a decision, you want to consider various factors like your team’s expertise and preference, total cost of software licenses, design constraints posted by for example existing investments on particular software.

Having decided the combination of software stack, you want to pack them into virtual machine templates that can be re-used by various teams. If you have multiple combinations, you can have multiple virtual machine templates in your catalog.

In general, you want as few templates as possible. Why?

Having less VM templates means less effort to build them, to manage, to upgrade, and to test. This might not seem like a big deal but could become a big deal in a longer term when you have to maintain multiple versions of these templates at the same time.

It also means less storage. vSphere has a special technology called linked clone. The new virtual machine doesn’t fully clone the disks, but links back to the template. If you have least templates, you can have a huge saving on the disk space. High quality storage can be very expensive.

Last but not least benefit is less memory. vSphere has memory page sharing technology which keeps one copy of same page contents, and converts others as pointers to the single copy. It’s only possible when you have identical memory pages. When you have virtual machines cloned from a same templates, the chance of identical memory pages increases dramatically.

There are several techniques to keep the least number of virtual machine templates:

Posted in Cloud Computing, Software Development | Tagged , , | Leave a comment

Top 10 Best Practices Architecting Applications for VMware Cloud (part 1)


With more data centers running on purely virtualized systems, more applications are therefore running on top of virtualized environment than ever before. These virtualized systems are interconnected with each other and become a cloud platform. Virtualization is the pre-requisite and starting point of the cloud computing at the IaaS level.

Posted in Cloud Computing, Software Development | Tagged , , | 5 Responses

Why Is VMware Intersted in Redis?

A high profile open source developer Salvatore Sanfilippo (@antirez) joined VMware engineering team today. He is the project owner of Redis. Welcome Salvatore!

As Derek Collision (@derekcollison) described it at a VMware Console Blog,

Redis is a high performance and scalable advanced key-value store where values can be data structures such as lists, sets, and hashmaps, as well as strings and blobs. Redis supports atomic operations on these data structures, allowing extremely high performance with consistent state to many client applications.

Posted in Cloud Computing | Tagged | 2 Responses

Why Some vSphere Java API Methods don’t Work with Old Servers? A Story of Compatibility

Many of you already know there are some changes in the vSphere API from 2.5 to 4.0. The changes include 20+ new managed object types, additional properties (including sub-properties that embedded inside the first level properties), and several inheritance structure changes.

Several managed objects like Datastore became the subtype of ManagedEntity in vSphere 4, which is different from the hierarchy in 2.5 where it’s a subtype of ExtensibleManagedObject. The changes came for good reasons – we want permission control over these managed objects.

Posted in vSphere API | Tagged , , | 1 Response

3 Phases and Challenges in Cloud Journey for Enterprises

As I quoted VMware CMO Rick Jackson in my previous blog, cloud computing is a journey. You may wonder, “If so, what are the phases for that journey?”

A great question! Understanding the phases helps us to better plan our journey and have a smooth transition from phase to phase.

In this blog, I will introduce 3 phases one by one: 100% virtualization, private cloud, and federated cloud. I will go over each of them and discuss the challenges in each.

Posted in Cloud Computing | Tagged , , | 3 Responses

What’s Hot in the Virtualization Job Market?

While asked how each Spring products are used in the market at the end of today’s training, the instructor showed us a nice website as a reference. Here is the diagram showing the numbers of jobs requiring skills of Spring and EJB. A great answer even though not a direct answer.


Strictly speaking, the jobs are not products, but well reflect what products are in use. So this is a good index on market shares of different products. If you have your products too easy to use, this index works against you. :-)

Posted in Cloud Computing | Tagged , | 3 Responses

Learning Enterprise Integration with Spring

With SpringSource being part of VMware family, getting a Spring training is certainly a lot easier than before. For one thing, my boss doesn’t need to pay for it.:-)

I just finished my 4-day training starting from this Tuesday. It’s been pretty exhausting given that I had to get up before 7AM to match the central time. But what’s learnt worth the effort.

The coverage of the training includes:

Posted in Software Development | Tagged , | Leave a comment

Clojure, Ruby, Scala, and Go: When to Use Which?

Just came back from a SDForum meeting organized by its emerging technology SIG. The topic was about the 4 languages in the title. It’s not much about any emerging technology per se, but pretty controversial among the developers.

The organizers invited four panelists and one moderator:

  • Clojure advocate – Amit Rathore, author of the forthcoming “Clojure In Action”
  • Go advocate – Robert Griesemer, Google, co-author of Go
  • Scala advocate – David Pollak, lead author of Lift
  • Ruby advocate – Evan Phoenix, lead developer of Rubinius, a high performance Ruby VM
  • Moderator – Steve Mezak, co-chair of the SDForum Software Architecture and Modeling SIG, author of Software without Borders

Each of the panelists had 10 minutes of introduction of the language in the first part. Then, they all answered questions ranging from language strength/weakness, library/tool/IDE support, application framework, advice on migrating existing codebase, to how these languages compare to each other.

Here are introductions from the languages’ homepages. See if you can map them to the languages.

Posted in News & Events, Software Development | Tagged | Leave a comment

Attention Java Developers: Spring on VMware Promotion

VMware announced today “Spring on VMware” promotion in which you may get free licenses of the tc Server in a news release.

To help you get started, VMware is pleased to announce the “Spring on VMware Promotion”. Under this promotion, all customer orders fulfilled  between March 8th 2010 and May 8th 2010 that include products (license only) from the vSphere, vCenter, View or ThinApp product family will receive 2 perpetual, production-use CPU licenses of tc Server Spring Edition 2.0 and 60 days of Evaluation Support for SpringSource (collectively referred to as the “Spring on VMware Bundle”).

Posted in News & Events | Tagged , | Leave a comment

SimDK – A VMware vSphere Simulator

Just got the following email from Andrew Kutz (@sakutz) who wrote the famous VMware Infrastructure (VI) plug-ins whitepaper and created several other great projects like VMM.

David Marshall, Dave McCrory and I, as well as everyone else at Hyper9, are extraordinarily proud to announce SimDK – a VMware vSphere4 simulator which provides vSphere4 API-compatibility for official vSphere4 clients and other applications built using the vSphere4 SDK.. SimDK is an open source project available at You can read more about this exciting announcement at

Posted in vSphere API | Tagged , | 5 Responses

    My company has created products like vSearch ("Super vCenter"), vijavaNG APIs, EAM APIs, ICE tool. We also help clients with virtualization and cloud computing on customized development, training. Should you, or someone you know, need these products and services, please feel free to contact me: steve __AT__

    Me: Steve Jin, VMware vExpert who authored the VMware VI and vSphere SDK by Prentice Hall, and created the de factor open source vSphere Java API while working at VMware engineering. Companies like Cisco, EMC, NetApp, HP, Dell, VMware, are among the users of the API and other tools I developed for their products, internal IT orchestration, and test automation.