Sono in una situazione in cui dopo aver analizzato e analizzato il nostro sistema, giungere alla conclusione che il componente di registrazione del sistema è uno dei molti colli di bottiglia circa il ~ 17% del tempo di esecuzione totale: molte cose vengono registrate.Data e ora di calcolo efficiente per scopi di registrazione su unix/win32
Di questo, circa il 5% delle volte che il logger consuma è correlato alla produzione di un timbro data/ora in ascii nel seguente formato: AAAAMMGG HHMMSS.fff - registriamo approssimativamente circa 700k linee al secondo. (circa 700K x (ora locale e gettimeofday) chiamate al secondo)
Mi chiedevo quali tecniche hanno i colleghi SO per produrre timestamp in modo efficiente.
Le soluzioni multipiattaforma sarebbero benvenute.
Nota1: abbiamo esaminato Boost.datetime: è grandioso, ma un po 'troppo lento per le nostre esigenze, std :: chrono è una soluzione perfetta, tuttavia dobbiamo purtroppo supportare i compilatori di pre C++ 11.
Nota 2: Abbiamo implementato una semplice ottimizzazione che calcola solo la parte data (aaaammgg) uno per 24 ore, quindi, solo con 1 gettimeofday chiamata per linea - non ha aiutato molto però.
La * formattazione * occupa solo il 5% o include le altre chiamate per recuperare il tempo? (Anche se il 5% è stato convertito allo 0%, sarebbe comunque pari al ~ 16,7% totale :-) –
@pst: queste sono solo le chiamate per popolare le varie strutture temporali. la formattazione (conversione in ascii) è un altro problema. –
@pst: ma qualsiasi idea per fare la formattazione sarebbe ottima, già usiamo le lute delle combo ascii per accelerare il processo ad esempio: 01020304050607080910111213141516171819202122232425262728293031 qualcosa come questo in mente? –