Performance of a system is about "production" (the amount of output), while efficiency is concerned with cost — how much input is needed to achieve a certain output. Resource utilization is, for example, an efficiency concern — we try to keep it as high as possible.

Bottlenecks: Efficiency/resource bottlenecks will almost result in performance bottlenecks, but the converse is not always true — performance bottlenecks can be caused by blocking IO, lock contention, poor scheduling algorithms, cache misses, context switches, queueing delays, etc. even when resources utilization is high.