tl; dr: Voglio prevedere il completamento della copia dei file. Quali sono i buoni metodi dati l'ora di inizio e gli attuali progressi?Quali sono alcuni buoni approcci per prevedere il tempo di completamento di un lungo processo?
In primo luogo, sono consapevole che questo non è affatto un problema semplice e che prevedere il futuro è difficile da fare bene. Per il contesto, sto provando a prevedere il completamento di una lunga copia di file.
approccio attuale:
Al momento, sto utilizzando una formula piuttosto ingenua che mi è venuta con me stesso: (ETC sta per Tempo stimato di completamento)
ETC = currTime + elapsedTime * (totalSize - sizeDone)/sizeDone
questo funziona partendo dal presupposto che i file rimanenti da copiare lo faranno alla velocità media della copia fino ad ora, il che può o non può essere una supposizione realistica (occupandosi di archivi di nastri qui).
- PRO: L'ETC cambierà gradualmente, e diventa sempre più preciso in quanto il processo si avvicina al completamento.
- CON: Non reagisce bene a eventi imprevisti, come la copia di file che si blocca o si accelera rapidamente.
Un'altra idea:
L'idea successiva che ho avuto è stato quello di tenere un registro dei progressi negli ultimi n secondi (o minuti, dato che questi archivi sono tenuti a richiedere ore), e basta fare una cosa del genere:
ETC = currTime + currAvg * (totalSize - sizeDone)
Questa è una specie di l'opposto del primo metodo in quanto:
- PRO: Se la velocità cambia rapidamente, l'ETC si aggiornerà rapidamente per riflettere lo stato attuale delle cose.
- CON: L'ETC può saltare molto se la velocità è incoerente.
Infine
Mi viene in mente dei soggetti di ingegneria di controllo che ho fatto presso UNI, in cui l'obiettivo è sostanzialmente quello di cercare di ottenere un sistema che reagisce rapidamente ai cambiamenti improvvisi, ma non è instabile e pazzo.
Detto questo, l'altra opzione che riuscivo a pensare sarebbe quello di calcolare la media di entrambi di quanto sopra, magari con qualche tipo di ponderazione:
- peso il primo metodo di più se la copia ha un velocità media a lungo termine abbastanza consistente, anche se salta un po 'localmente.
- Peso il secondo metodo di più se la velocità di copia è imprevedibile ed è probabile che faccia cose come accelerare/rallentare per lunghi periodi o fermarsi del tutto per lunghi periodi.
Quello che sto veramente chiedendo è:
- Qualsiasi approcci alternativi ai due ho dato.
- Se e come combinare diversi metodi per ottenere una previsione finale.
Ho fatto qualcosa di simile che riguarda l'adattamento della curva. Ma è alto-overhead e funziona solo se non c'è troppo rumore nei dati di avanzamento esistenti. – Mysticial
Alcuni ottimi suggerimenti qui su tutte le risposte. È difficile scegliere un 'migliore', ma penso che andrò con la risposta di @ aix per l'approccio empirico e i link utili. –