What is the best way to get a grip on intended and unintended performance changes in such a setup?
Non so nulla della tua suite di benchmark, ma per quanto ne so io, questo può essere implementato come test automatico (presumo tu abbia già una suite di test con test di integrazione o di accettazione in atto). Quello di cui hai bisogno è
-
una possibilità di registrare i valori delle prestazioni in un formato leggibile dalla macchina
-
una possibilità di memorizzare i valori registrati come valori di riferimento
-
una possibilità di confrontare i valori registrati da "l'ultima esecuzione" con i valori di riferimento, e se tali valori differiscono "troppo", questo è un "test fallito".
Forse devi implementare queste tre cose usando alcuni script da soli, ma quando la tua suite di test consente l'esecuzione non eseguita, non dovrebbe essere troppo difficile.
Quindi, ogni volta che viene eseguita la tua normale suite di test (integrazione) (ad esempio, come parte di una "build notturna"), esegui anche la suite di test delle prestazioni e sarai informato sulle modifiche indesiderate nello stesso modo in cui verrai essere informato su qualsiasi altro test fallito.
Hai in mente che devi definire cosa significa "troppo". Tenete anche presente che l'esito dei risultati delle prestazioni può essere estremamente depurato dall'hardware, quindi quando dovete eseguire la suite di test su macchine diverse, o se il server di build sta lavorando su troppe altre cose in parallelo durante i test, aspettatevi i risultati saranno diversi.
Quindi prima di lanciare dei dati arbitrari sui dati per produrre dei grafici ben colorati, devi controllare manualmente dopo ogni analisi, verificare se è davvero appropriato per il tuo caso e se un sistema completamente automatico senza grafica non soddisfa le tue esigenze meglio.
Naturalmente, i grafici possono essere utili per analizzare la causa principale ogni volta che la performance diminuisce, ma solo per rilevare una deviazione eviterei tutto ciò che necessita di intercettazione manuale.
EDIT: rileggendo nuovamente la tua domanda, mi chiedo se stai utilizzando un server di build automatico o se al momento esegui tutte le build a livello locale. Se non si dispone di un server di build, questa potrebbe essere la prima cosa da cui iniziare (indipendentemente dai test delle prestazioni). Successivamente è possibile integrare alcuni test automatici su quella piattaforma e successivamente i test delle prestazioni. Se non si desidera configurare un tale sistema, la cosa minima di cui si ha bisogno è un singolo script che verificherà il codice sorgente completo in una directory pulita e compili tutto in un unico passaggio. Successivamente puoi provare ad integrare la corsa automatica dei test delle prestazioni. Ma immagino che un sistema server sia più appropriato, perché altrimenti bloccherete la vostra workstation per un certo periodo di tempo con ogni prova di funzionamento.