1. A method of analyzing the behaviour of a storage system when running an input/output (I/O) workload, the method comprising: (a) creating an isochronous thread formed by a sequence of operations to be carried out by the storage system when running the thread, the thread being created by: (i) defining a plurality of factors, each factor corresponding to an aspect of the thread when running the I/O workload, the plurality of factors enabling absolute control over iterative access location, transfer size and access type of the operations of said sequence of operations; (ii) defining one or more timing factors corresponding to a frequency characteristic and a timing pattern for each of the operations of said sequence of operations; (b) causing the storage system to run the I/O workload by: (i) interpreting the one or more timing factors of each operation of said sequence of operations to determine a scheduled time for the corresponding operation; (ii) for each operation in said sequence of operations interpreting the factors of each operation to determine respective operation characteristics for the corresponding operation of said sequence of operations; (iii) for each operation in said sequence of operations, converting the operation characteristics to at least one command for the storage system; (iv) for each operation of said sequence of operations, sending the at least one command to the storage system at a sending time, the sending time being either said scheduled time or the earliest subsequent time the storage system is ready to accept the at least one command of the respective operation of the sequence of operations, whichever is later; (v) for each operation of said sequence of operations, detecting the time of completion of each command of the corresponding operation by the storage system; (vi) deriving, from the time of completion of each command of each operation of said sequence of operations, a time of completion of the corresponding operation of said sequence of operations; (vii) storing the time difference between said sending time and said time of completion of each operation of said sequence of operations; (viii) storing any operation start time latency, said operation start time latency being the difference, if any, in time between said scheduled time and said sending time for each operation of said sequence of operations; (c) analyzing said time differences and said operation start latencies of said sequence of operations, thereby to analyze the behaviour of the storage system.