doc/el_GR.ISO8859-7/books/handbook/dtrace/chapter.xml
2013-11-07 15:39:28 +00:00

400 lines
18 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="iso-8859-7"?>
<!--
Το Εγχειρίδιο του FreeBSD: DTrace
The FreeBSD Greek Documentation Project
$FreeBSD$
%SOURCE% en_US.ISO8859-1/books/handbook/dtrace/chapter.xml
%SRCID% 38826
-->
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="dtrace">
<info><title>&dtrace;</title>
<authorgroup>
<author><personname><firstname>Tom</firstname><surname>Rhodes</surname></personname><contrib>Γράφηκε από τον </contrib></author>
</authorgroup>
</info>
<sect1 xml:id="dtrace-synopsis">
<title>Σύνοψη</title>
<indexterm><primary>&dtrace;</primary></indexterm>
<indexterm>
<primary>&dtrace; support</primary>
<see>&dtrace;</see>
</indexterm>
<para>Το &dtrace;, γνωστό επίσης ως Dynamic Tracing, είναι ένα εργαλείο το
οποίο αναπτύχθηκε από την &sun; για τον εντοπισμό προβλημάτων απόδοσης
σε συστήματα που πρόκειται να χρησιμοποιηθούν ή χρησιμοποιούνται ήδη
στην παραγωγή. Δεν πρόκειται για εργαλείο αποσφαλμάτωσης, αλλά για
εργαλείο ανάλυσης πραγματικού χρόνου, με το οποίο μπορούν να
εντοπιστούν προβλήματα απόδοσης και άλλες καταστάσεις.</para>
<para>Το &dtrace; είναι ένα θαυμάσιο εργαλείο profiling και διαθέτει
εντυπωσιακό πλήθος χαρακτηριστικών για την διάγνωση προβλημάτων του
συστήματος. Μπορεί επίσης να χρησιμοποιηθεί για να εκτελέσει από πριν
έτοιμα scripts, με τα οποία μπορείτε να εκμεταλλευθείτε καλύτερα τις
δυνατότητες του. Οι χρήστες μπορούν ακόμα να γράψουν και τα δικά τους
βοηθητικά προγράμματα, χρησιμοποιώντας την Γλώσσα D που παρέχει το
&dtrace;, και να προσαρμόσουν με αυτό τον τρόπο το profiling στις δικές
τους ανάγκες.</para>
<para>Αφού διαβάσετε αυτό το κεφάλαιο, θα γνωρίζετε:</para>
<itemizedlist>
<listitem>
<para>Τι είναι το &dtrace; και τι δυνατότητες παρέχει.</para>
</listitem>
<listitem>
<para>Τις διαφορές υλοποίησης μεταξύ του &dtrace; του &solaris; και
του &os;.</para>
</listitem>
<listitem>
<para>Πως να ενεργοποιήσετε και να χρησιμοποιήσετε το &dtrace;
στο &os;.</para>
</listitem>
</itemizedlist>
<para>Πριν διαβάσετε αυτό το κεφάλαιο, θα πρέπει:</para>
<itemizedlist>
<listitem>
<para>Να κατανοείτε βασικές έννοιες του &unix; και του &os;
(<xref linkend="basics"/>).</para>
</listitem>
<listitem>
<para>Να είστε εξοικειωμένος με τις βασικές διαδικασίες ρύθμισης και
μεταγλώττισης προσαρμοσμένου πυρήνα
(<xref linkend="kernelconfig"/>).</para>
</listitem>
<listitem>
<para>Να είστε εξοικειωμένος με την ασφάλεια και τον τρόπο που αυτή
σχετίζεται με το &os; (<xref linkend="security"/>).</para>
</listitem>
<listitem>
<para>Να κατανοείτε πως μπορείτε να ανακτήσετε τον πηγαίο κώδικα του
&os; και να τον χρησιμοποιήσετε ώστε να επαναμεταγλωττίσετε το
σύστημα σας (<xref linkend="updating-upgrading"/>).</para>
</listitem>
</itemizedlist>
<!--
Temporary warning to avoid listing experimental versions
and production versions of FreeBSD with this technology.
-->
<warning>
<para>Τη δεδομένη στιγμή, το &dtrace; θεωρείται ότι είναι σε πειραματικό
στάδιο. Ορισμένες επιλογές μπορεί να υπολείπονται σε λειτουργικότητα,
και κάποια τμήματα ίσως να μη λειτουργούν καθόλου. Με την πάροδο του
χρόνου, οι παραπάνω δυνατότητες θα θεωρηθούν έτοιμες για χρήση σε
μηχανήματα παραγωγής, και η παρούσα τεκμηρίωση θα ανανεωθεί ώστε να
αντιπροσωπεύει αυτή την κατάσταση.</para>
</warning>
</sect1>
<sect1 xml:id="dtrace-implementation">
<title>Διαφορές στην Υλοποίηση</title>
<para>Αν και το &dtrace; στο &os; είναι αρκετά όμοιο με αυτό του &solaris;,
υπάρχουν κάποιες διαφορές που θα πρέπει να τις εξηγήσουμε πριν
συνεχίσουμε. Η μεγαλύτερη διαφορά που θα παρατηρήσουν οι χρήστες,
είναι ότι στο &os; το &dtrace; πρέπει να ενεργοποιηθεί χειροκίνητα.
Υπάρχουν διάφορες επιλογές και αρθρώματα για τον πυρήνα που πρέπει να
ενεργοποιηθούν ώστε το &dtrace; να λειτουργεί σωστά. Θα εξηγήσουμε
αργότερα αυτές τις ρυθμίσεις.</para>
<para>Η επιλογή <literal>DDB_CTF</literal> του πυρήνα χρησιμοποιείται για
να ενεργοποιήσει την υποστήριξη φορτώματος των δεδομένων
<acronym>CTF</acronym> από τον πυρήνα και τα αρθρώματα του. Το
<acronym>CTF</acronym> είναι το Compact C Type format του &solaris;,
το οποίο ενθυλακώνει μια ελαττωμένη μορφή πληροφοριών αποσφαλμάτωσης
(debugging), όμοια με το <acronym>DWARF</acronym> και τα
stabs. Αυτά τα δεδομένα <acronym>CTF</acronym> προστίθενται στα
εκτελέσιμα μέσω των εργαλείων <command>ctfconvert</command> και
<command>ctfmerge</command>. Το βοηθητικό πρόγραμμα
<command>ctfconvert</command> ερμηνεύει τα τμήματα των
<acronym>DWARF</acronym> <acronym>ELF</acronym> που περιέχουν
πληροφορίες debug (δημιουργούνται από το μεταγλωττιστή), και
το <command>ctfmerge</command> συγχωνεύει τα
τμήματα <acronym>CTF</acronym> και <acronym>ELF</acronym> από τα
αντικείμενα σε άλλα εκτελέσιμα ή κοινόχρηστες βιβλιοθήκες.
Περισσότερες πληροφορίες για την ενεργοποίηση των παραπάνω στη
μεταγλώττιση του πυρήνα και του συστήματος του &os;, θα δούμε
παρακάτω.</para>
<para>Στο &os; κάποιοι παροχείς είναι διαφορετικοί σε σχέση με το
&solaris;. Ο πιο αξιοσημείωτος είναι ο παροχέας
<literal>dtmalloc</literal> ο οποίος επιτρέπει το tracing του
<function>malloc()</function> ανάλογα με τον τύπο του, στον πυρήνα του
&os;.</para>
<para>Μόνο ο <systemitem class="username">root</systemitem> μπορεί να χρησιμοποιήσει το
&dtrace; στο &os;. Αυτό σχετίζεται με διαφορές στην ασφάλεια, καθώς το
&solaris; διαθέτει κάποιους ελέγχους ασφάλειας χαμηλού επιπέδου, οι
οποίοι δεν υπάρχουν ακόμα στο &os;. Για το λόγο αυτό, η χρήση της
συσκευής <filename>/dev/dtrace/dtrace</filename> απαγορεύεται
αυστηρά για όλους τους χρήστες εκτός από τον
<systemitem class="username">root</systemitem>.</para>
<para>Τέλος, το λογισμικό &dtrace; βρίσκεται υπό την άδεια
<acronym>CDDL</acronym> της &sun;. Μπορείτε να διαβάσετε το κείμενο
της άδειας <literal>Common Development and Distribution
License</literal> στο &os;, στο αρχείο
<filename>/usr/src/cddl/contrib/opensolaris/OPENSOLARIS.LICENSE</filename>
ή να το διαβάσετε online στη διεύθυνση
<link xlink:href="http://www.opensolaris.org/os/licensing">http://www.opensolaris.org/os/licensing</link>.</para>
<para>Η άδεια ουσιαστικά σημαίνει ότι ένας πυρήνας &os; με τις επιλογές
του &dtrace;, εξακολουθεί να βρίσκεται υπό την άδεια
<acronym>BSD</acronym>. Ωστόσο το <acronym>CDDL</acronym> εμπλέκεται
τη στιγμή που γίνεται διανομή των αρθρωμάτων σε δυαδική μορφή, ή τη
στιγμή που φορτώνονται.</para>
</sect1>
<sect1 xml:id="dtrace-enable">
<title>Ενεργοποίηση της Υποστήριξης &dtrace;</title>
<para>Για να ενεργοποιήσετε την υποστήριξη για το &dtrace;, προσθέστε τις
ακόλουθες γραμμές στο αρχείο ρυθμίσεων του πυρήνα:</para>
<programlisting>options KDTRACE_HOOKS
options DDB_CTF</programlisting>
<note>
<para>Οι χρήστες της αρχιτεκτονικής AMD64 θα θέλουν να προσθέσουν την
ακόλουθη γραμμή στο αρχείο ρυθμίσεων του πυρήνα τους:</para>
<programlisting>options KDTRACE_FRAME</programlisting>
<para>Η επιλογή αυτή παρέχει υποστήριξη για τη λειτουργία
<acronym>FBT</acronym>. Το &dtrace; μπορεί να λειτουργήσει και χωρίς
αυτήν. Ωστόσο, θα παρέχει περιορισμένη υποστήριξη για
function boundary tracing.</para>
</note>
<para>Όλος ο πηγαίος κώδικας θα πρέπει να μεταγλωττιστεί ξανά με τις
επιλογές <acronym>CTF</acronym>. Για να γίνει αυτό, μεταγλωττίστε
ξανά το &os; χρησιμοποιώντας:</para>
<!-- XXXTR: WITH_CTF has been reported to leave a user with a
broken system when used with buildworld. Until this is
fixed, comment out those parts. When uncommenting, kill
the extra screen.
-->
<screen>&prompt.root; <userinput>cd /usr/src</userinput>
<!-- &prompt.root; <userinput>make WITH_CTF=1 buildworld</userinput>-->
&prompt.root; <userinput>make WITH_CTF=1 kernel</userinput></screen>
<!-- &prompt.root; <userinput>make WITH_CTF=1 installworld</userinput>
&prompt.root; <userinput>mergemaster -Ui</userinput></screen> -->
<para>Θα χρειαστεί να επανεκκινήσετε το σύστημα.</para>
<para>Μετά την επανεκκίνηση, και με τον νέο πυρήνα φορτωμένο πλέον στη
μνήμη, θα πρέπει να προσθέσετε υποστήριξη για το κέλυφος Korn. Αυτό
απαιτείται, καθώς τα εργαλεία &dtrace; περιλαμβάνουν διάφορα βοηθητικά
προγράμματα τα οποία είναι γραμμένα σε
<command>ksh</command>. Εγκαταστήστε το port
<package>shells/ksh93</package>. Μπορείτε επίσης να
εκτελέσετε αυτά τα εργαλεία και μέσω του
<package>shells/pdksh</package> ή του
<package>shells/mksh</package>.</para>
<para>Τέλος, ανακτήστε την τρέχουσα σειρά εργαλείων &dtrace;. Η τελευταία
έκδοση διατίθεται στην τοποθεσία
<uri xlink:href="http://www.opensolaris.org/os/community/dtrace/dtracetoolkit/">http://www.opensolaris.org/os/community/dtrace/dtracetoolkit/</uri>.
Διατίθεται και πρόγραμμα εγκατάστασης, το οποίο δεν είναι ωστόσο
απαραίτητο να εκτελέσετε προκειμένου να χρησιμοποιήσετε τα
εργαλεία.</para>
</sect1>
<sect1 xml:id="dtrace-using">
<title>Χρησιμοποιώντας το &dtrace;</title>
<para>Πριν χρησιμοποιήσετε τις λειτουργίες του &dtrace;, θα πρέπει να
υπάρχει η αντίστοιχη συσκευή. Για να φορτώσετε τη συσκευή, θα πρέπει
να δώσετε την παρακάτω εντολή:</para>
<screen>&prompt.root; <userinput>kldload dtraceall</userinput></screen>
<para>Θα πρέπει να έχετε πλέον υποστήριξη &dtrace;. Για να δείτε όλα τα
probes, θα πρέπει να εκτελέσετε ως διαχειριστής την παρακάτω
εντολή:</para>
<screen>&prompt.root; <userinput>dtrace -l | more</userinput></screen>
<para>Όλη η έξοδος περνάει μέσω του βοηθητικού προγράμματος
<command>more</command>, διαφορετικά γρήγορα θα υπερχείλιζε την
προσωρινή μνήμη της οθόνης. Στο σημείο αυτό, θα πρέπει να θεωρηθεί ότι
το &dtrace; λειτουργεί. Είναι πλέον ώρα να εξετάσουμε αυτή τη σειρά
εργαλείων.</para>
<para>Η σειρά των εργαλείων είναι μια συλλογή από έτοιμα scripts που
εκτελούνται με το &dtrace; ώστε να συλλέξουν πληροφορίες σχετικά με το
σύστημα. Υπάρχουν scripts που ελέγχουν για ανοικτά αρχεία, τη μνήμη,
τη χρήση της <acronym>CPU</acronym> και πολλά ακόμα. Κάντε εξαγωγή των
scripts με την ακόλουθη εντολή:</para>
<screen>&prompt.root; <userinput>gunzip -c DTraceToolkit* | tar xvf -</userinput></screen>
<para>Μετακινηθείτε στον κατάλογο που τα αποσυμπιέσατε με την εντολή
<command>cd</command> και αλλάξτε τα δικαιώματα εκτέλεσης σε όλα τα
αρχεία, όπως στα αρχεία με τα μικρά γράμματα, σε
<literal>755</literal>.</para>
<para>Θα χρειαστεί να γίνουν αλλαγές στο περιεχόμενο σε όλα τα scripts.
Όσα περιέχουν το
<filename>/usr/bin/ksh</filename> θα πρέπει να αλλαχθούν σε
<filename>/usr/local/bin/ksh</filename>, τα άλλα που περιέχουν το
<filename>/usr/bin/sh</filename> θα πρέπει να αλλαχθούν σε
<filename>/bin/sh</filename>, και τέλος αυτά που περιέχουν το
<filename>/usr/bin/perl</filename> θα πρέπει να αλλαχθούν σε
<filename>/usr/local/bin/perl</filename>.</para>
<important>
<para>Στο σημείο αυτό είναι σημαντικό να υπενθυμίσουμε στον αναγνώστη
ότι η υποστήριξη &dtrace; στο &os; είναι <emphasis>ατελής</emphasis>
και πειραματική. Πολλά από αυτά τα scripts δεν θα λειτουργήσουν,
καθώς είναι είτε πολύ προσανατολισμένα στο &solaris;, ή χρησιμοποιούν
probes τα οποία δεν υποστηρίζονται τη δεδομένη στιγμή.</para>
</important>
<para>Τη στιγμή που γράφονται αυτές οι γραμμές, μόνο δύο scripts από τη
σειρά εργαλείων του &dtrace; υποστηρίζονται πλήρως στο &os;: το
<filename>hotkernel</filename> και το <filename>procsystime</filename>.
Αυτά τα δύο θα εξερευνήσουμε στα επόμενα τμήματα αυτής της
ενότητας.</para>
<para>Το <filename>hotkernel</filename> έχει σχεδιαστεί να αναγνωρίζει
ποια συνάρτηση καταναλώνει το μεγαλύτερο χρόνο στον πυρήνα. Εκτελώντας
το υπό κανονικές συνθήκες, θα δείτε έξοδο παρόμοια με την
παρακάτω:</para>
<screen>&prompt.root; <userinput>./hotkernel</userinput>
Sampling... Hit Ctrl-C to end.</screen>
<para>Ο διαχειριστής του συστήματος θα πρέπει να χρησιμοποιήσει το
συνδυασμό πλήκτρων <keycombo action="simul"><keycap>Ctrl</keycap><keycap>C</keycap></keycombo> για
να σταματήσει τη διεργασία. Με τον τερματισμό του, το script θα
απεικονίσει μια σειρά από συναρτήσεις του πυρήνα και πληροφορίες σχετικά
με το χρόνο τους, ταξινομώντας τις σε αύξουσα σειρά ανάλογα με το
χρόνο:</para>
<screen>kernel`_thread_lock_flags 2 0.0%
0xc1097063 2 0.0%
kernel`sched_userret 2 0.0%
kernel`kern_select 2 0.0%
kernel`generic_copyin 3 0.0%
kernel`_mtx_assert 3 0.0%
kernel`vm_fault 3 0.0%
kernel`sopoll_generic 3 0.0%
kernel`fixup_filename 4 0.0%
kernel`_isitmyx 4 0.0%
kernel`find_instance 4 0.0%
kernel`_mtx_unlock_flags 5 0.0%
kernel`syscall 5 0.0%
kernel`DELAY 5 0.0%
0xc108a253 6 0.0%
kernel`witness_lock 7 0.0%
kernel`read_aux_data_no_wait 7 0.0%
kernel`Xint0x80_syscall 7 0.0%
kernel`witness_checkorder 7 0.0%
kernel`sse2_pagezero 8 0.0%
kernel`strncmp 9 0.0%
kernel`spinlock_exit 10 0.0%
kernel`_mtx_lock_flags 11 0.0%
kernel`witness_unlock 15 0.0%
kernel`sched_idletd 137 0.3%
0xc10981a5 42139 99.3%</screen>
<!-- XXXTR: I attempted to use objdump and nm on /boot/kernel/kernel
to find 0xc10981a5, but to no avail. It would be nice to know
how we should look that up. -->
<para>Το script αυτό λειτουργεί επίσης με αρθρώματα του πυρήνα. Για να
χρησιμοποιήσετε αυτό το χαρακτηριστικό, εκτελέστε το με την επιλογή
<option>-m</option>:</para>
<screen>&prompt.root; <userinput>./hotkernel -m</userinput>
Sampling... Hit Ctrl-C to end.
^C
MODULE COUNT PCNT
0xc107882e 1 0.0%
0xc10e6aa4 1 0.0%
0xc1076983 1 0.0%
0xc109708a 1 0.0%
0xc1075a5d 1 0.0%
0xc1077325 1 0.0%
0xc108a245 1 0.0%
0xc107730d 1 0.0%
0xc1097063 2 0.0%
0xc108a253 73 0.0%
kernel 874 0.4%
0xc10981a5 213781 99.6%</screen>
<!-- XXXTR: I was unable to match these up with output from
kldstat and kldstat -v and grep. Maybe I'm missing something
seriously obvious. It is 5AM btw. -->
<para>Το <filename>procsystime</filename> script συλλαμβάνει και τυπώνει
τον χρόνο των κλήσεων συστήματος για μια συγκεκριμένη διεργασία μέσω
του <acronym>PID</acronym> ή του ονόματος της. Στο παρακάτω παράδειγμα
έχουμε ξεκινήσει μια νέα διεργασία του <filename>/bin/csh</filename>.
Εκτελέσαμε το <filename>procsystime</filename> και το αφήσαμε στην
αναμονή καθώς γράφαμε μερικές εντολές στο <command>csh</command> που
είχαμε ανοίξει. Αυτά είναι τα αποτελέσματα της δοκιμής μας:</para>
<screen>&prompt.root; <userinput>./procsystime -n csh</userinput>
Tracing... Hit Ctrl-C to end...
^C
Elapsed Times for processes csh,
SYSCALL TIME (ns)
getpid 6131
sigreturn 8121
close 19127
fcntl 19959
dup 26955
setpgid 28070
stat 31899
setitimer 40938
wait4 62717
sigaction 67372
sigprocmask 119091
gettimeofday 183710
write 263242
execve 492547
ioctl 770073
vfork 3258923
sigsuspend 6985124
read 3988049784</screen>
<para>Όπως φαίνεται, η κλήση του συστήματος για ανάγνωση
(<function>read()</function>) είναι αυτή που καταναλώνει τον
περισσότερο χρόνο σε νανοδευτερόλεπτα, ενώ το λιγότερο τον καταναλώνει
η κλήση συστήματος <function>getpid()</function>.</para>
</sect1>
<sect1 xml:id="dtrace-language">
<title>Η Γλώσσα D</title>
<para>Η σειρά εργαλείων &dtrace;, περιλαμβάνει αρκετά scripts γραμμένα στην
ειδική γλώσσα του &dtrace;. Η γλώσσα αυτή ονομάζεται
<quote>η γλώσσα D</quote> στην τεκμηρίωση της &sun;, και είναι αρκετά
όμοια με τη C++. Αναλυτική περιγραφή αυτής της γλώσσας είναι πέρα από
τους σκοπούς αυτού του κειμένου. Υπάρχει ενεργή συζήτηση σχετικά με
αυτή, στη διεύθυνση <uri xlink:href="http://wikis.sun.com/display/DTrace/Documentation">http://wikis.sun.com/display/DTrace/Documentation</uri>.</para>
</sect1>
</chapter>