12.4. Strumenti per le prestazioni
Red Hat Enterprise Linux 7.0 include aggiornamenti alle versioni più recenti di alcuni strumenti per la prestazione, come ad esempio oprofile, papi e elfutils, apportando miglioramenti alla funzionalità, prestazione e portabilità.
Red Hat Enterprise Linux 7.0 introduce:
- Supporto per il Performance Co-Pilot.
- Supporto SystemTap per una strumentazione (basata su DynInst) in esecuzione in un'area utente non privilegiato, insieme ad una verifica precisa ed efficiente (basata su Byteman) delle applicazioni Java.
- Supporto di Valgrind per l'hardware transactional memory e miglioramenti per la modifica delle istruzioni vettoriali.
12.4.1. Performance Co-Pilot Copia collegamentoCollegamento copiato negli appunti!
Copia collegamentoCollegamento copiato negli appunti!
Red Hat Enterprise Linux 7.0 introduce il supporto per il Performance Co-Pilot (PCP), una suite di strumenti, servizi e librerie per l'acquisizione, archiviazione e analisi della misurazione delle prestazioni del sistema. La sua architettura semplice e distribuita lo rende idoneo per le analisi centralizzate di sistemi complessi.
È possibile aggiungere le metriche sulle prestazioni usando le interfacce C, C++, Perl e Python. Gli strumenti di analisi possono utilizzare le API del client (Python, C++, C). Le applicazioni web avanzate sono in grado di consultare tutti i dati sulle prestazioni disponibili usando una interfaccia JSON.
Per maggiori informazioni consultare le pagine man nei pacchetti pcp e pcp-libs-devel. Il pacchetto pcp-doc include le due guide del progetto upstream:
12.4.2. SystemTap Copia collegamentoCollegamento copiato negli appunti!
Copia collegamentoCollegamento copiato negli appunti!
Red Hat Enterprise Linux 7.0 include systemtap versione 2.4, il quale introduce nuove funzioni. Esse includono l'esecuzione dello script pure-userspace opzionale, un Java probing più dettagliato ed efficiente, il probing della macchina virtuale, messaggi d'errore migliorati e un certo numero di correzioni e di nuove funzioni. In particolare:
- Con l'utilizzo di
dyninstbinary-editing library, SystemTap può ora eseguire alcuni script di livello area utente; non viene usato alcun privilegio kernel o root. Questa modalità, selezionata usandostap --dyninst, abilita solo quei probe o quelle operazioni che interessano il processo dell'utente in questione. Da notare che questa modalità non è compatibile con i programmi con eccezioni C++. - È supportato un nuovo modo per l'inserimento dei probe in applicazioni Java insieme con byteman. Nuovi tipi di probe SystemTap,
java("com.app").class("class_name").method("name(signature)").*, abilitano il probing di eventi del metodo di ingresso e uscita in una applicazione, senza alcun tracciamento del sistema. - È stata aggiunta una nuova utilità agli strumenti del driver SystemTap, per l'esecuzione remota su una istanza KVM gestita da libvirt in esecuzione su un server. Ciò abilita un trasferimento sicuro e automatizato di uno script SystemTap compilato per un guest della macchina virtuale attraverso un link virtio-serial sicuro dedicato. Un nuovo demone del guest carica gli script e trasferisce il loro output all'host. Questo metodo è quello più veloce e sicuro rispetto a SSH, e non necessita di alcuna connessione di rete di livello-IP tra host e guest. Per il test di questa funzione eseguire il seguente comando:
stap --remote=libvirt://MyVirtualMachine
stap --remote=libvirt://MyVirtualMachineCopy to Clipboard Copied! Toggle word wrap Toggle overflow - In aggiunta sono stati eseguiti un certo numero di miglioramenti ai messaggi diagnostici di SystemTap:
- Molti messaggi d'errore contengono ora riferimenti incrociati alle pagine man relative. Le suddette pagine spiegano l'errore e suggeriscono le correzioni.
- Se si presume la presenza di errori in un input di uno script, verrà fornito all'utente un elenco di suggerimenti per la loro correzione. Tale suggerimento può essere usato in svariati contesti quando i nomi specificati dagli utenti non soddisfano i criteri di nomi accettabili, come ad esempio i nomi per le funzioni del probe, variabili, file, alias, indicatori ecc.
- Milgiorata l'eliminazione del duplicato diagnostico.
- È stata aggiunta la colorazione ANSI per facilitare la comprensione dei messaggi.
12.4.3. Valgrind Copia collegamentoCollegamento copiato negli appunti!
Copia collegamentoCollegamento copiato negli appunti!
Red Hat Enterprise Linux 7.0 introduce Valgrind, un framework di strumentazione contenente un certo numero di strumenti per il profiling delle applicazioni. Questa versione si basa sulla release 3.9.0 di Valgrind 3.9.0 e include numerosi miglioramenti relativi al Red Hat Enterprise Linux 6 e Red Hat Developer Toolset 2.0, basati sulla versione 3.8.1 di Valgrind.
Le caratteristiche più importanti di Valgrind incluse in Red Hat Enterprise Linux 7.0 sono:
- Supporto per le istruzioni IBM System z Decimal Floating Point su host con il supporto dell'utilità DFP.
- Supporto per le istruzioni IBM POWER8 (Power ISA 2.07).
- Supporto per le istruzioni Intel AVX2, disponibile solo su architetture 64-bit.
- Supporto iniziale per Intel Transactional Synchronization Extensions, sia Restricted Transactional Memory (RTM) che Hardware Lock Elision (HLE).
- Supporto iniziale per l'Hardware Transactional Memory su IBM PowerPC.
- La dimensione predefinita della cache di traduzione è stata aumentata a 16 settori, a causa della strumentazione e archiviazione di quantità molto grandi di codici delle applicazioni. Per motivi simili il numero di segmenti della memoria mappata tracciabili è stato aumentato di 6 volte. Il numero massimo di settori nella cache di traduzione può essere controllato tramite
--num-transtab-sectors. - Valgrind non crea più temporaneamente una mappatura dell'intero oggetto per operazioni di lettura. Al contrario, questa operazione viene eseguita attraverso un piccolo buffer di dimensioni fisse. Questo processo impedisce la presenza di picchi di memoria virtuale, quando Valgrind consulta le informazioni di debugging da oggetti condivisi molto grandi.
- L'elenco di soppressioni usate (visualizzate se si specifica l'opzione
-v), mostra ora per ogni soppressione il nome del file, e il numero della riga nella quale è stata definita la soppressione stessa. - È possibile usare ora un nuovo flag
--sigill-diagnosticsper controllare la presenza di un messaggio diagnostico, quando il compiler just-in-time (JIT) incontra una istruzione che non è in grado di tradurre. Il comportamento attuale — consegna del segnale SIGILL all'applicazione — non è stato modificato. - Miglioramento di Memcheck con le seguenti caratteristiche:
- Miglioramento nella gestione del codice vettoriale il quale comporta un numero minore di notifiche di errori falsi. Utilizzare il flag
--partial-loads-ok=yesper usufruire dei miglioramenti apportati. - Migliore controllo sul verificatore perdite. È ora possibile specificare il tipo di perdite (definite/indirect/possible/reachable) da visualizzare, da considerare come errori, e quelli da sopprimere. Per fare questo usare rispettivamente le opzioni
--show-leak-kinds=kind1,kind2,..,--errors-for-leak-kinds=kind1,kind2,..e la rigamatch-leak-kinds:facoltativa nelle voci di soppressione.Da notare che le soppressioni delle perdite generate presentano questa nuova riga, e sono quindi più dettagliate rispetto alle release precedenti. Per avere un comportamento simile a quello delle versioni precedenti, rimuovere la rigamatch-leak-kinds:dalla soppressione generata prima di un suo utilizzo. - Utilizzare valori euristici migliorati per avere notifiche
possible leakpiù brevi del verificatore di perdite. I valori euristici disponibili forniscono un rilevamento dei puntatori interni validi per std::stdstring, per array assegnati new[] con elementi in possesso di distruttori e per puntatori interni che indicano una parte interne di un oggetto C++ con ereditarietà multipla. Essi possono essere selezionati individualmente usando--leak-check-heuristics=heur1,heur2,.... - Controllo migliorato per l'acquisizione del backtrace per blocchi assegnati-heap. Utilizzando l'opzione
--keep-stacktraces, è possibile controllare indipendentemente l'acquisizione di uno stacktrace per ogni allocazione e deallocazione. Può essere usato per creare errori "use after free" più dettagliati o per ridurre il consumo delle risorse di Valgrind, attraverso la registrazione di un numero minore di informazioni. - Notifiche migliorate sull'uso della soppressione delle perdite. L'elenco di soppressioni (visualizzate se si specifica l'opzione
-v) mostra ora per ogni soppressione di perdite, il numero di blocchi e byte soppressi durante l'ultima ricerca.
- L'integrazione del server GDB di Valgrind è stata migliorata con i seguenti comandi di monitoraggio:
- Un nuovo comando,
v.info open_fds, mostra l'elenco dei descrittori di file aperti e le informazioni aggiuntive v.info execontextmostra le informazioni sull'analisi dello stack registrate da Valgrind.v.do expensive_sanity_check_generalesegue alcuni controlli sulla consistenza interna.