Programmez! #239 PDF pour nos abonnés papier

Abonnés papier : en raison de la situation due au coronavirus, des retards sont à prévoir en ce qui concerne la distribution de Programmez! #239 par La Poste. C'est pourquoi nous mettons Programmez! #239 PDF à disposition dans votre compte utilisateur sous un onglet dédié en attendant. Pour y accéder, il vous suffit de saisir votre n° d'abonné (ou éventuellement le ressaisir comme pour l'accès aux archives) dans votre compte utilisateur, si ce n'est pas déjà fait. Si vous ne connaissez par votre numéro d'abonné, vous pouvez l'obtenir à cette page. Si vous ne possédez pas encore de compte utilisateur, il vous suffit d'en créer un.

En cas de difficultés, contactez le webmaster à partir du formulaire de contact de ce site.

Ply : un outil d'instrumentalisation du noyau Linux

Par:
fredericmazue

ven, 26/10/2018 - 16:28

Ply est un très bel outil à découvrir pour les administrateurs système Linux, ou pour les esprits curieux qui veulent regarder sous le capot de leur système. Ply est un traceur Linux dynamique, qui permet d'extraire des données arbitraires, comme des valeurs de registre, des arguments de fonction, des données de pile / tas, des traces de pile, etc.

Ecrit en C et conçu avec les systèmes embarqués à l'esprit, Ply est léger et n'a besoin pour fonctionner que d'une libc et d'un noyau moderne supportant Linux BPF. Ply ne nécessite ni LLVM, ni aucun module externe au noyau.

Pour instrumentaliser le noyau, on écrit des scripts dans un langage doté d'une syntaxe "à la C". Le langage supporte l'inférence de type, ce qui rend l'écriture des scripts particulièrement rapide. Ce langage est fortement inspiré de awk et de dtrace, indique le concepteur de Ply.

Comme regarder chaque donnée individuelle à partir d'une trace n'est pas aussi utile qu'une agrégation de données, ply prend en charge l'agrégation des données à la source, réduisant ainsi le temps système de traçage.

A titre d'exemple d'utilisation, voici un sonde qui compte tous les appels de fonctions dont le nom commence par sys_, c'est à dire tous les appel système.

#! /usr/bin/env ply
kprobe: SyS_ *
{
    @syscalls [caller] = count ();
}

Cette sonde produira une sortie comme ceci :

~ $ ply count-syscalls.ply
pli: actif
^ Cply: désactivation

@syscalls:
{sys_sigaltstack + 1}: 1
{sys_set_tid_address + 1}: 2
{sys_sysinfo + 1}: 2
{sys_alarm + 1}: 2
{sys_mincore + 1}: 2
{sys_pread64 + 1}: 2
{sys_newlstat + 1}: 2
{sys_unlink + 1}: 2
[... etc...]
{sys_newfstat + 1}: 586
{sys_mmap_pgoff + 1}: 599
{sys_mmap + 1}: 600
{sys_rt_sigprocmask + 1}: 859
{sys_close + 1}: 863
{sys_ppoll + 1}: 1315
{sys_epoll_wait + 1}: 1731
{sys_poll + 1}: 2644
{sys_write + 1}: 3262
{sys_recvmsg + 1}: 3624
{sys_ioctl + 1}: 4423
{sys_read + 1}: 5059
{sys_futex + 1}: 7918

Ply est documenté sur son site officiel.

Ply est open source, disponible sur GitHub.