1. A method comprising: generating one or more threads to operate a storage system, the storage system comprising one or more system resources, and each of the one or more threads associated with one of a plurality of tasks of the storage system; updating one or more performance counters of the storage system in response to a change in operating state of one of the one or more threads; and generating a performance snapshot by capturing a state of the tasks associated with the threads and the performance counters wherein generating the performance snapshot comprises: grouping one or more of the threads that are associated with a given task; grouping counter values of the one or more performance counters into containers associated with the given task; and generating a performance snapshot based upon the grouped one or more threads that are associated with the given task, and the containers associated with the given task, wherein generating the performance snapshot further comprises generating a directed-graph associated with the given task, the directed-graph comprising a plurality of nodes and at least one edge joining associated ones of the nodes, wherein each of the nodes is associated with a synchronization object of an operating system of the storage system, wherein each of the nodes is identified by a two-tuple node key based upon a task identifier associated with the node, and a resource identifier associated with the node, and wherein each of the edges is associated with a respective sequence of instructions.