Ceci est une ancienne révision du document !


Dernière mise-à-jour : 2020/02/21 06:27

LDF301 - Gestion des Paramètres du matériel et les Ressources

Fichiers Spéciaux

Dans l'ordinateur les périphériques sont reliés à un contrôleur qui communique avec le processeur à l'aide d'un bus. Le contrôleur ainsi que les périphériques nécessitent des pilotes. Sous Linux, les pilotes sont généralement fournis sous la forme d'un module. Chaque périphérique est représenté par un fichier spécial dans le répertoire /dev et c'est dans ce fichier que le système trouve les informations nécessaires pour s'adresser au pilote.

Important : Les périphériques qui nécessitent à ce que l'ordinateur soit éteint afin des les brancher/débrancher sont appelés communément Cold Plug Devices. Les périphériques qui peuvent être brancher/débrancher à chaud sont appelés des Hot Plug Devices.

Consultez le contenu du répertoire /dev :

root@debian8:~# ls -l /dev | more
total 0
crw-------  1 root    root     10, 235 Nov  1 08:39 autofs
drwxr-xr-x  2 root    root         140 Nov  1 08:39 block
drwxr-xr-x  2 root    root          80 Nov  1 08:39 bsg
crw-------  1 root    root     10, 234 Nov  1 08:39 btrfs-control
drwxr-xr-x  3 root    root          60 Nov  1 08:39 bus
lrwxrwxrwx  1 root    root           3 Nov  1 08:39 cdrom -> sr0
drwxr-xr-x  2 root    root        2780 Nov  1 13:35 char
crw-------  1 root    root      5,   1 Nov  1 08:39 console
lrwxrwxrwx  1 root    root          11 Nov  1 08:39 core -> /proc/kcore
drwxr-xr-x  2 root    root          60 Nov  1 08:39 cpu
crw-------  1 root    root     10,  62 Nov  1 08:39 cpu_dma_latency
crw-rw-rw-  1 root    root     10, 203 Nov  1 08:39 cuse
drwxr-xr-x  4 root    root          80 Nov  1 08:39 disk
drwxr-xr-x  2 root    root          60 Nov  1 08:39 dri
lrwxrwxrwx  1 root    root           3 Nov  1 08:39 dvd -> sr0
lrwxrwxrwx  1 root    root          13 Nov  1 08:39 fd -> /proc/self/fd
crw-rw-rw-  1 root    root      1,   7 Nov  1 08:39 full
crw-rw-rw-  1 root    root     10, 229 Nov  1 08:39 fuse
crw-------  1 root    root    251,   0 Nov  1 13:35 hidraw0
crw-------  1 root    root     10, 228 Nov  1 08:39 hpet
drwxr-xr-x  2 root    root           0 Nov  1 08:39 hugepages
lrwxrwxrwx  1 root    root          25 Nov  1 08:39 initctl -> /run/systemd/initctl/fifo
drwxr-xr-x  4 root    root         340 Nov  1 13:35 input
crw-r--r--  1 root    root      1,  11 Nov  1 08:39 kmsg
lrwxrwxrwx  1 root    root          28 Nov  1 08:39 log -> /run/systemd/journal/dev-log
crw-rw----  1 root    disk     10, 237 Nov  1 08:39 loop-control
drwxr-xr-x  2 root    root          60 Nov  1 08:39 mapper
crw-------  1 root    root     10, 227 Nov  1 08:39 mcelog
crw-r-----  1 root    kmem      1,   1 Nov  1 08:39 mem
drwxrwxrwt  2 root    root          40 Nov  1 08:39 mqueue
--More--

On peut noter dans la sortie de la commande que certains fichiers sont de type bloc (b), tandis que d'autre sont de type caractère (c).

...
brw-rw----  1 root    disk      8,   1 Nov  1 08:39 sda1
...
crw-rw-rw-  1 root    tty       5,   0 Nov  1 08:39 tty
...

La différence entre les deux repose sur le type de communication entre le système et le module. Dans le premier cas le système accède au périphérique par des coordonnées du bloc de données sur le support tandis que dans le deuxième cas la communication d'échange de données se fait octet par octet sans utiliser des tampons.

Les deux informations clefs du fichier spécial sont situées à la place de la taille d'un fichier normal et se nomment le majeur et le mineur :

  • le majeur identifie le pilote du périphérique et donc son contrôleur,
  • le mineur identifie le périphérique ou une particularité du périphérique telle une partition d'un disque.

Commandes

La Commande lspci

Cette commande vous renseigne sur les adaptateurs reliés aux bus PCI, AGP et PCI express :

root@debian8:~# lspci
00:00.0 Host bridge: Intel Corporation 440FX - 82441FX PMC [Natoma] (rev 02)
00:01.0 ISA bridge: Intel Corporation 82371SB PIIX3 ISA [Natoma/Triton II]
00:01.1 IDE interface: Intel Corporation 82371AB/EB/MB PIIX4 IDE (rev 01)
00:02.0 VGA compatible controller: InnoTek Systemberatung GmbH VirtualBox Graphics Adapter
00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 02)
00:04.0 System peripheral: InnoTek Systemberatung GmbH VirtualBox Guest Service
00:05.0 Multimedia audio controller: Intel Corporation 82801AA AC'97 Audio Controller (rev 01)
00:06.0 USB controller: Apple Inc. KeyLargo/Intrepid USB
00:07.0 Bridge: Intel Corporation 82371AB/EB/MB PIIX4 ACPI (rev 08)
00:0d.0 SATA controller: Intel Corporation 82801HM/HEM (ICH8M/ICH8M-E) SATA Controller [AHCI mode] (rev 02)

Pour obtenir de l'information sur un adaptateur spécifique, il convient d'utiliser la même commande avec l'option -v en spécifiant l'identifiant concerné :

root@debian8:~# lspci -v -s 00:03.0
00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 02)
	Subsystem: Intel Corporation PRO/1000 MT Desktop Adapter
	Flags: bus master, 66MHz, medium devsel, latency 64, IRQ 10
	Memory at f0000000 (32-bit, non-prefetchable) [size=128K]
	I/O ports at d010 [size=8]
	Capabilities: [dc] Power Management version 2
	Capabilities: [e4] PCI-X non-bridge device
	Kernel driver in use: e1000

ou :

root@debian8:~# lspci -vv -s 00:03.0
00:03.0 Ethernet controller: Intel Corporation 82540EM Gigabit Ethernet Controller (rev 02)
	Subsystem: Intel Corporation PRO/1000 MT Desktop Adapter
	Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx-
	Status: Cap+ 66MHz+ UDF- FastB2B- ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
	Latency: 64 (63750ns min)
	Interrupt: pin A routed to IRQ 10
	Region 0: Memory at f0000000 (32-bit, non-prefetchable) [size=128K]
	Region 2: I/O ports at d010 [size=8]
	Capabilities: [dc] Power Management version 2
		Flags: PMEClk- DSI+ D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
		Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
	Capabilities: [e4] PCI-X non-bridge device
		Command: DPERE- ERO+ RBC=512 OST=1
		Status: Dev=ff:1f.0 64bit- 133MHz- SCD- USC- DC=simple DMMRBC=2048 DMOST=1 DMCRS=8 RSCEM- 266MHz- 533MHz-
	Kernel driver in use: e1000

Options de la commande

Les options de cette commande sont :

root@debian8:~# lspci --help
lspci: invalid option -- '-'
Usage: lspci [<switches>]

Basic display modes:
-mm		Produce machine-readable output (single -m for an obsolete format)
-t		Show bus tree

Display options:
-v		Be verbose (-vv for very verbose)
-k		Show kernel drivers handling each device
-x		Show hex-dump of the standard part of the config space
-xxx		Show hex-dump of the whole config space (dangerous; root only)
-xxxx		Show hex-dump of the 4096-byte extended config space (root only)
-b		Bus-centric view (addresses and IRQ's as seen by the bus)
-D		Always show domain numbers

Resolving of device ID's to names:
-n		Show numeric ID's
-nn		Show both textual and numeric ID's (names & numbers)
-q		Query the PCI ID database for unknown ID's via DNS
-qq		As above, but re-query locally cached entries
-Q		Query the PCI ID database for all ID's via DNS

Selection of devices:
-s [[[[<domain>]:]<bus>]:][<slot>][.[<func>]]	Show only devices in selected slots
-d [<vendor>]:[<device>]			Show only devices with specified ID's

Other options:
-i <file>	Use specified ID database instead of /usr/share/misc/pci.ids.gz
-p <file>	Look up kernel modules in a given file instead of default modules.pcimap
-M		Enable `bus mapping' mode (dangerous; root only)

PCI access options:
-A <method>	Use the specified PCI access method (see `-A help' for a list)
-O <par>=<val>	Set PCI access parameter (see `-O help' for a list)
-G		Enable PCI access debugging
-H <mode>	Use direct hardware access (<mode> = 1 or 2)
-F <file>	Read PCI configuration dump from a given file

La Commande lsusb

Cette commande vous renseigne sur les adaptateurs reliés au bus usb :

root@debian8:~# lsusb
Bus 001 Device 004: ID 80ee:0021 VirtualBox USB Tablet
Bus 001 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub

root@debian8:~# lsusb -vt
/:  Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ohci-pci/8p, 12M
    |__ Port 1: Dev 4, If 0, Class=Human Interface Device, Driver=usbhid, 12M

Options de la commande

Les options de cette commande sont :

root@debian8:~# lsusb --help
Usage: lsusb [options]...
List USB devices
  -v, --verbose
      Increase verbosity (show descriptors)
  -s [[bus]:][devnum]
      Show only devices with specified device and/or
      bus numbers (in decimal)
  -d vendor:[product]
      Show only devices with the specified vendor and
      product ID numbers (in hexadecimal)
  -D device
      Selects which device lsusb will examine
  -t, --tree
      Dump the physical USB device hierarchy as a tree
  -V, --version
      Show version of program
  -h, --help
      Show usage and help

La Commande dmidecode

La commande dmidecode lit la table DMI (Desktop Management Interface) aussi appelée SMBIOS (System Management BIOS) et fourni les informations sur :

  • l'état du matériel actuel,
  • les extensions possibles.
root@debian8:~# dmidecode
# dmidecode 2.12
SMBIOS 2.5 present.
10 structures occupying 450 bytes.
Table at 0x000E1000.

Handle 0x0000, DMI type 0, 20 bytes
BIOS Information
	Vendor: innotek GmbH
	Version: VirtualBox
	Release Date: 12/01/2006
	Address: 0xE0000
	Runtime Size: 128 kB
	ROM Size: 128 kB
	Characteristics:
		ISA is supported
		PCI is supported
		Boot from CD is supported
		Selectable boot is supported
		8042 keyboard services are supported (int 9h)
		CGA/mono video services are supported (int 10h)
		ACPI is supported

Handle 0x0001, DMI type 1, 27 bytes
System Information
	Manufacturer: innotek GmbH
	Product Name: VirtualBox
	Version: 1.2
	Serial Number: 0
	UUID: 3AEF2B0F-3420-4DF3-A98F-211C945D7CCA
	Wake-up Type: Power Switch
	SKU Number: Not Specified
	Family: Virtual Machine

Handle 0x0008, DMI type 2, 15 bytes
Base Board Information
	Manufacturer: Oracle Corporation
	Product Name: VirtualBox
	Version: 1.2
	Serial Number: 0
	Asset Tag: Not Specified
	Features:
		Board is a hosting board
	Location In Chassis: Not Specified
	Chassis Handle: 0x0003
	Type: Motherboard
	Contained Object Handles: 0

Handle 0x0003, DMI type 3, 13 bytes
Chassis Information
	Manufacturer: Oracle Corporation
	Type: Other
	Lock: Not Present
	Version: Not Specified
	Serial Number: Not Specified
	Asset Tag: Not Specified
	Boot-up State: Safe
	Power Supply State: Safe
	Thermal State: Safe
	Security Status: None

Handle 0x0007, DMI type 126, 42 bytes
Inactive

Handle 0x0005, DMI type 126, 15 bytes
Inactive

Handle 0x0006, DMI type 126, 28 bytes
Inactive

Handle 0x0002, DMI type 11, 7 bytes
OEM Strings
	String 1: vboxVer_4.3.28
	String 2: vboxRev_100309

Handle 0x0008, DMI type 128, 8 bytes
OEM-specific Type
	Header and Data:
		80 08 08 00 F2 13 21 00

Handle 0xFEFF, DMI type 127, 4 bytes
End Of Table

Options de la commande

Les options de cette commande sont :

root@debian8:~# dmidecode --help
Usage: dmidecode [OPTIONS]
Options are:
 -d, --dev-mem FILE     Read memory from device FILE (default: /dev/mem)
 -h, --help             Display this help text and exit
 -q, --quiet            Less verbose output
 -s, --string KEYWORD   Only display the value of the given DMI string
 -t, --type TYPE        Only display the entries of given type
 -u, --dump             Do not decode the entries
     --dump-bin FILE    Dump the DMI data to a binary file
     --from-dump FILE   Read the DMI data from a binary file
 -V, --version          Display the version and exit

Répertoire /proc

Le répertoire /proc contient des fichiers et des répertoires virtuels. Le contenu de ces fichiers est créé dynamiquement lors de la consultation. Seul root peut consulter la totalité des informations dans le répertoire /proc.

root@debian8:~# ls /proc
1     1103  1238  170	30   68   957	     execdomains  net
10    1104  124   18	31   69   959	     fb		  pagetypeinfo
1013  1106  1240  19	32   7	  963	     filesystems  partitions
1014  1108  125   2	33   71   966	     fs		  sched_debug
1023  1117  1251  20	424  72   975	     interrupts   self
1024  1120  1277  21	434  73   979	     iomem	  slabinfo
1028  1127  1288  2180	439  74   980	     ioports	  softirqs
1029  1131  1294  2284	441  772  984	     irq	  stat
1032  1135  13	  23	448  778  986	     kallsyms	  swaps
1033  1139  14	  2305	450  781  acpi	     kcore	  sys
1040  1140  1409  2306	452  793  asound     keys	  sysrq-trigger
1043  1142  15	  232	457  798  buddyinfo  key-users	  sysvipc
1045  1156  1572  236	460  8	  bus	     kmsg	  timer_list
1049  1163  158   24	461  80   cgroups    kpagecount   timer_stats
1053  1165  16	  2599	464  807  cmdline    kpageflags   tty
1056  1166  163   263	471  821  consoles   loadavg	  uptime
1065  1171  1682  2635	472  838  cpuinfo    locks	  version
1080  1177  1685  2737	497  843  crypto     meminfo	  vmallocinfo
1081  12    1687  2772	498  9	  devices    misc	  vmstat
1084  1216  1693  2811	5    948  diskstats  modules	  zoneinfo
1092  1228  1694  2834	66   949  dma	     mounts
11    1230  17	  3	67   956  driver     mtrr

Répertoires

ide/scsi

Ce répertoire contient des répertoires dans lesquels se trouvent des informations sur la capacité, le type et la géométrie des disques.

acpi

Ce répertoire contient des informations sur la gestion de l'énérgie, les températures, les vitesses de ventilateurs, la charge des batteries.

bus

Ce répertoire contient un sous-répertoire par bus.

net

Ce répertoire contient des informations sur le réseau.

sys

Ce répertoire contient des paramètres du noyau. Certains des fichiers dans ce répertoire sont accessibles en écriture par root en temps réel. Par exemple pour éviter des attaques réseau DoS utilisant la commande ping, saisissez la commande suivante :

# echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all [Entrée]

Cette commande a pour résultat d'ignorer les reqûetes ping.

La commande sysctl

Les fichiers dans le répertoire /proc/sys peuvent être administrés par la commande sysctl en temps réel.

La commande sysctl applique les règles consignés dans le fichier /etc/sysctl.conf au démarrage de la machine.

Saisissez la commande :

root@debian8:~# cat /etc/sysctl.conf 
#
# /etc/sysctl.conf - Configuration file for setting system variables
# See /etc/sysctl.d/ for additional system variables.
# See sysctl.conf (5) for information.
#

#kernel.domainname = example.com

# Uncomment the following to stop low-level messages on console
#kernel.printk = 3 4 1 3

##############################################################3
# Functions previously found in netbase
#

# Uncomment the next two lines to enable Spoof protection (reverse-path filter)
# Turn on Source Address Verification in all interfaces to
# prevent some spoofing attacks
#net.ipv4.conf.default.rp_filter=1
#net.ipv4.conf.all.rp_filter=1

# Uncomment the next line to enable TCP/IP SYN cookies
# See http://lwn.net/Articles/277146/
# Note: This may impact IPv6 TCP sessions too
#net.ipv4.tcp_syncookies=1

# Uncomment the next line to enable packet forwarding for IPv4
#net.ipv4.ip_forward=1

# Uncomment the next line to enable packet forwarding for IPv6
#  Enabling this option disables Stateless Address Autoconfiguration
#  based on Router Advertisements for this host
#net.ipv6.conf.all.forwarding=1


###################################################################
# Additional settings - these settings can improve the network
# security of the host and prevent against some network attacks
# including spoofing attacks and man in the middle attacks through
# redirection. Some network environments, however, require that these
# settings are disabled so review and enable them as needed.
#
# Do not accept ICMP redirects (prevent MITM attacks)
#net.ipv4.conf.all.accept_redirects = 0
#net.ipv6.conf.all.accept_redirects = 0
# _or_
# Accept ICMP redirects only for gateways listed in our default
# gateway list (enabled by default)
# net.ipv4.conf.all.secure_redirects = 1
#
# Do not send ICMP redirects (we are not a router)
#net.ipv4.conf.all.send_redirects = 0
#
# Do not accept IP source route packets (we are not a router)
#net.ipv4.conf.all.accept_source_route = 0
#net.ipv6.conf.all.accept_source_route = 0
#
# Log Martian Packets
#net.ipv4.conf.all.log_martians = 1
#
Options de la commande

Les options de la commande sysctl sont :

root@debian8:~# sysctl --help

Usage:
 sysctl [options] [variable[=value] ...]

Options:
  -a, --all            display all variables
  -A                   alias of -a
  -X                   alias of -a
      --deprecated     include deprecated parameters to listing
  -b, --binary         print value without new line
  -e, --ignore         ignore unknown variables errors
  -N, --names          print variable names without values
  -n, --values         print only values of a variables
  -p, --load[=<file>]  read values from file
  -f                   alias of -p
      --system         read values from all system directories
  -r, --pattern <expression>
                       select setting that match expression
  -q, --quiet          do not echo variable set
  -w, --write          enable writing a value to variable
  -o                   does nothing
  -x                   does nothing
  -d                   alias of -h

 -h, --help     display this help and exit
 -V, --version  output version information and exit

For more details see sysctl(8).

Important : Consultez la page de la traduction du manuel de sysctl ici pour comprendre la commande.

Fichiers

Processeur

root@debian8:~# cat /proc/cpuinfo
processor	: 0
vendor_id	: GenuineIntel
cpu family	: 6
model		: 55
model name	: Intel(R) Celeron(R) CPU  N2840  @ 2.16GHz
stepping	: 8
microcode	: 0x19
cpu MHz		: 2167.709
cache size	: 6144 KB
physical id	: 0
siblings	: 1
core id		: 0
cpu cores	: 1
apicid		: 0
initial apicid	: 0
fdiv_bug	: no
f00f_bug	: no
coma_bug	: no
fpu		: yes
fpu_exception	: yes
cpuid level	: 5
wp		: yes
flags		: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 nx rdtscp constant_tsc pni monitor ssse3
bogomips	: 4335.41
clflush size	: 64
cache_alignment	: 64
address sizes	: 36 bits physical, 48 bits virtual
power management:

Interruptions système

root@debian8:~# cat /proc/interrupts 
           CPU0       
  0:         43    XT-PIC-XT-PIC    timer
  1:      15159    XT-PIC-XT-PIC    i8042
  2:          0    XT-PIC-XT-PIC    cascade
  8:          0    XT-PIC-XT-PIC    rtc0
  9:      83729    XT-PIC-XT-PIC    acpi, vboxguest
 10:      20664    XT-PIC-XT-PIC    eth0
 11:      27534    XT-PIC-XT-PIC    ohci_hcd:usb1, ahci, snd_intel8x0
 12:      16216    XT-PIC-XT-PIC    i8042
 14:          0    XT-PIC-XT-PIC    ata_piix
 15:       7427    XT-PIC-XT-PIC    ata_piix
NMI:          0   Non-maskable interrupts
LOC:     969554   Local timer interrupts
SPU:          0   Spurious interrupts
PMI:          0   Performance monitoring interrupts
IWI:          0   IRQ work interrupts
RTR:          0   APIC ICR read retries
RES:          0   Rescheduling interrupts
CAL:          0   Function call interrupts
TLB:          0   TLB shootdowns
TRM:          0   Thermal event interrupts
THR:          0   Threshold APIC interrupts
MCE:          0   Machine check exceptions
MCP:         25   Machine check polls
HYP:          0   Hypervisor callback interrupts
ERR:          0
MIS:          0

Important : Un pilote de périphérique demande au processeur de fournir un service en utilisant un IRQ. Quand la demande est faite, le processeur interrompe ses activités et passe le contrôle au pilote identifié par l'IRQ. Techniquement l'attribution d'un IRQ à un périphérique doit être exclusive. Dans le cas où deux périphériques demandent un service en même temps, c'est le périphérique ayant l'IRQ le plus bas qui est prioritaire.

Canaux DMA

root@debian8:~# cat /proc/dma
 4: cascade

Plages d'entrée/sortie

root@debian8:~# cat /proc/ioports | more
0000-001f : dma1
0020-0021 : pic1
0040-0043 : timer0
0050-0053 : timer1
0060-0060 : keyboard
0064-0064 : keyboard
0070-0071 : rtc_cmos
  0070-0071 : rtc0
0080-008f : dma page reg
00a0-00a1 : pic2
00c0-00df : dma2
00f0-00ff : fpu
0170-0177 : 0000:00:01.1
  0170-0177 : ata_piix
01f0-01f7 : 0000:00:01.1
  01f0-01f7 : ata_piix
0376-0376 : 0000:00:01.1
  0376-0376 : ata_piix
03c0-03df : vga+
03f6-03f6 : 0000:00:01.1
  03f6-03f6 : ata_piix
0cf8-0cff : PCI conf1
4000-4003 : ACPI PM1a_EVT_BLK
--More--

Si deux périphériques ont le même port, les deux périphériques seront inutilisables.

Périphériques

root@debian8:~# cat /proc/devices 
Character devices:
  1 mem
  4 /dev/vc/0
  4 tty
  4 ttyS
  5 /dev/tty
  5 /dev/console
  5 /dev/ptmx
  6 lp
  7 vcs
 10 misc
 13 input
 21 sg
 29 fb
 99 ppdev
116 alsa
128 ptm
136 pts
180 usb
189 usb_device
226 drm
251 hidraw
252 bsg
253 watchdog
254 rtc

Block devices:
259 blkext
  8 sd
 11 sr
 65 sd
 66 sd
 67 sd
 68 sd
 69 sd
 70 sd
 71 sd
128 sd
129 sd
130 sd
131 sd
132 sd
133 sd
134 sd
135 sd

Modules

root@debian8:~# cat /proc/modules | more
cfg80211 350041 0 - Live 0xf9426000
rfkill 18387 1 cfg80211, Live 0xf92ae000
vboxsf 36590 0 - Live 0xf81f1000 (O)
nfsd 236959 2 - Live 0xf9360000
auth_rpcgss 45765 1 nfsd, Live 0xf81e4000
oid_registry 12387 1 auth_rpcgss, Live 0xf8064000
nfs_acl 12463 1 nfsd, Live 0xf7ff7000
nfs 168022 0 - Live 0xf9335000
lockd 73443 2 nfsd,nfs, Live 0xf8137000
fscache 44782 1 nfs, Live 0xf8096000
sunrpc 211341 6 nfsd,auth_rpcgss,nfs_acl,nfs,lockd, Live 0xf9300000
joydev 16847 0 - Live 0xf8193000
snd_intel8x0 30521 2 - Live 0xf812e000
snd_ac97_codec 96151 1 snd_intel8x0, Live 0xf8150000
snd_pcm 78128 2 snd_intel8x0,snd_ac97_codec, Live 0xf816e000
snd_timer 22010 1 snd_pcm, Live 0xf808f000
snd 55101 8 snd_intel8x0,snd_ac97_codec,snd_pcm,snd_timer, Live 0xf80a5000
soundcore 12890 1 snd, Live 0xf8069000
ac97_bus 12462 1 snd_ac97_codec, Live 0xf805f000
vboxvideo 12405 1 - Live 0xf8055000 (O)
pcspkr 12531 0 - Live 0xf7e1b000
drm 203555 3 vboxvideo, Live 0xf9202000
psmouse 93505 0 - Live 0xf8077000
--More--

Statistiques de l'utilisation des disques

root@debian8:~# cat /proc/diskstats 
   8       0 sda 18987 11031 1082886 269752 13611 11447 380664 169532 0 123708 438044
   8       1 sda1 18763 10780 1079098 268224 13480 11316 379544 168960 0 123396 435948
   8       2 sda2 2 0 4 120 0 0 0 0 0 120 120
   8       5 sda5 99 141 1920 1212 9 131 1120 136 0 1316 1348
  11       0 sr0 0 0 0 0 0 0 0 0 0 0 0

Partitions

root@debian8:~# cat /proc/partitions
major minor  #blocks  name

   8        0   20971520 sda
   8        1    9764864 sda1
   8        2          1 sda2
   8        5    1951744 sda5
  11        0    1048575 sr0

Espaces de pagination

root@debian8:~# cat /proc/swaps
Filename				Type		Size	Used	Priority
/dev/sda5                               partition	1951740	500	-1

Statistiques d'utilisation du processeur

root@debian8:~# cat /proc/loadavg
0.77 0.80 0.76 2/290 2984

Statistiques d'utilisation de la mémoire

root@debian8:~# cat /proc/meminfo 
MemTotal:        1031864 kB
MemFree:           79924 kB
MemAvailable:     404848 kB
Buffers:           74112 kB
Cached:           362824 kB
SwapCached:          208 kB
Active:           613740 kB
Inactive:         284400 kB
Active(anon):     397624 kB
Inactive(anon):    74292 kB
Active(file):     216116 kB
Inactive(file):   210108 kB
Unevictable:          32 kB
Mlocked:              32 kB
HighTotal:        141256 kB
HighFree:          10240 kB
LowTotal:         890608 kB
LowFree:           69684 kB
SwapTotal:       1951740 kB
SwapFree:        1951240 kB
Dirty:                 0 kB
Writeback:             0 kB
AnonPages:        461060 kB
Mapped:           182132 kB
Shmem:             10716 kB
Slab:              36092 kB
SReclaimable:      26548 kB
SUnreclaim:         9544 kB
KernelStack:        2312 kB
PageTables:         5880 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     2467672 kB
Committed_AS:    2087760 kB
VmallocTotal:     122880 kB
VmallocUsed:       21900 kB
VmallocChunk:      99844 kB
HardwareCorrupted:     0 kB
AnonHugePages:         0 kB
HugePages_Total:       0
HugePages_Free:        0
HugePages_Rsvd:        0
HugePages_Surp:        0
Hugepagesize:       2048 kB
DirectMap4k:       34808 kB
DirectMap2M:      872448 kB

Version du noyau

root@debian8:~# cat /proc/version
Linux version 3.16.0-4-686-pae (debian-kernel@lists.debian.org) (gcc version 4.8.4 (Debian 4.8.4-1) ) #1 SMP Debian 3.16.7-ckt11-1+deb8u5 (2015-10-09)

Interprétation des informations dans /proc

Les informations brutes stockées dans /proc peuvent être interprétées grâce à l'utilisation des commandes dites de gestion des performances :

  • free,
  • uptime et w,
  • iostat,
  • vmstat,
  • mpstat,
  • sar.

Commandes

free

La commande free permet de donner l’état de la mémoire totale, libre, partagée, swap et bufferisée. Saisissez donc la commande suivante :

root@debian8:~# free -m
             total       used       free     shared    buffers     cached
Mem:          1007        930         76         10         72        354
-/+ buffers/cache:        503        503
Swap:         1905          0       1905

Dans le cas de ce dernier exemple, nous pouvons constater que l’affichage montre :

  • 1007 Mo de mémoire physique totale,
  • 930 Mo de mémoire physique utilisée et 76 Mo de mémoire physique libre,
  • 1999 Mo de mémoire swap totale et 0 Mo de swap utilisé

La ligne -/+ buffers/cache: indique que les applications utilisent 503 Mo et qu’elles disposent de 503 (502) Mo de mémoire libre (72+354+76).

Les options de cette commande sont :

root@debian8:~# free --help

Usage:
 free [options]

Options:
 -b, --bytes         show output in bytes
 -k, --kilo          show output in kilobytes
 -m, --mega          show output in megabytes
 -g, --giga          show output in gigabytes
     --tera          show output in terabytes
 -h, --human         show human-readable output
     --si            use powers of 1000 not 1024
 -l, --lohi          show detailed low and high memory statistics
 -o, --old           use old format (without -/+buffers/cache line)
 -t, --total         show total for RAM + swap
 -s N, --seconds N   repeat printing every N seconds
 -c N, --count N     repeat printing N times, then exit

     --help     display this help and exit
 -V, --version  output version information and exit

For more details see free(1).
uptime ou w

Chacune des ces commandes indique la charge moyenne du ou des processeurs depuis 1 minute, 5 minutes et 15 minutes :

root@debian8:~# uptime
 09:37:06 up  2:31,  3 users,  load average: 0.67, 0.34, 0.45

root@debian8:~# w
 09:37:08 up  2:31,  3 users,  load average: 0.67, 0.34, 0.45
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
trainee  :0       :0               Sun08   ?xdm?  44:35   1.13s x-session-manager
trainee  pts/0    :0               Sun08    3.00s  0.56s 44.83s /usr/lib/gnome-terminal/gnome-terminal-server
trainee  pts/1    :0               Sun09   24.00s  0.40s 44.83s /usr/lib/gnome-terminal/gnome-terminal-server

Les valeurs load average ou charge moyenne indiquent le nombre moyen de processus en cours de traitement ou en attente pour la période concernée.

Par exemple si les valeurs sur un système muni d'un seul processeur étaient 3,48 4,00 3,85 ceci indiquerait que le processeur a du mal à traiter les processus mettant en moyenne :

  • 2,48 processus en attente dans la dernière minute,
  • 3,00 processus en attente dans les dernières 5 minutes,
  • 2,85 processus en attente dans les dernières 15 minutes.

Les options de ces commandes sont :

root@debian8:~# uptime --help

Usage:
 uptime [options]

Options:
 -p, --pretty   show uptime in pretty format
 -h, --help     display this help and exit
 -s, --since    system up since
 -V, --version  output version information and exit

For more details see uptime(1).

root@debian8:~# w --help

Usage:
 w [options]

Options:
 -h, --no-header     do not print header
 -u, --no-current    ignore current process username
 -s, --short         short format
 -f, --from          show remote hostname field
 -o, --old-style     old style output
 -i, --ip-addr       display IP address instead of hostname (if possible)

     --help     display this help and exit
 -V, --version  output version information and exit

For more details see w(1).
iostat

Sous Debian 8 les commandes iostat, mpstat et sar ne sont pas disponibles par défaut. Installez donc le paquet sysstat :

root@debian8:~# apt-get install sysstat
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Suggested packages:
  isag
The following NEW packages will be installed:
  sysstat
0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.
Need to get 290 kB of archives.
After this operation, 1,390 kB of additional disk space will be used.
Get:1 http://ftp.fr.debian.org/debian/ jessie/main sysstat i386 11.0.1-1 [290 kB]
Fetched 290 kB in 5s (53.4 kB/s)    
Preconfiguring packages ...
Selecting previously unselected package sysstat.
(Reading database ... 167520 files and directories currently installed.)
Preparing to unpack .../sysstat_11.0.1-1_i386.deb ...
Unpacking sysstat (11.0.1-1) ...
Processing triggers for man-db (2.7.0.2-5) ...
Processing triggers for systemd (215-17+deb8u2) ...
Setting up sysstat (11.0.1-1) ...

Creating config file /etc/default/sysstat with new version
update-alternatives: using /usr/bin/sar.sysstat to provide /usr/bin/sar (sar) in auto mode
Processing triggers for systemd (215-17+deb8u2) ...

La commande iostat affiche des statistiques sur l'utilisation des disques, des terminaux et des lecteurs de cartouche :

root@debian8:~# iostat
Linux 3.16.0-4-686-pae (debian8) 	11/02/2015 	_i686_	(1 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          27.19    0.00    5.79    0.80    0.00   66.22

Device:            tps    kB_read/s    kB_wrtn/s    kB_read    kB_wrtn
sda               4.58        69.17        29.19     613071     258736

Au-dessous de la première ligne indiquant la version du noyau du système et son nom d'hôte ainsi que la date actuelle, iostat affiche une vue d'ensemble de l'utilisation CPU moyenne du système depuis le dernier démarrage. Le rapport d'utilisation du CPU inclut les pourcentages suivants :

  • Pourcentage de temps passé en mode utilisateur (exécutant des applications, etc.)
  • Pourcentage de temps passé en mode utilisateur (pour les processus qui ont modifié leur priorité de programmation à l'aide de la commande nice)
  • Pourcentage de temps passé en mode noyau
  • Pourcentage de temps passé en inactivité

Notez la valeur de %iowait. Dans le cas où ce pourcentage est trop élévé, ceci indique que le processeur passe son temps à attendre les entrées et les sorties de disque.

Pour surveiller la vitesse des entrées et des sorties du disque, vous pouvez utiliser la commande hdparm.

Sous Debian 8, la commande hdparm n'est pas disponible par défaut. Installez donc le paquet hdparm :

root@debian8:~# apt-get install hdparm
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  powermgmt-base
Suggested packages:
  apmd
The following NEW packages will be installed:
  hdparm powermgmt-base
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 118 kB of archives.
After this operation, 263 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://ftp.fr.debian.org/debian/ jessie/main hdparm i386 9.43-2 [109 kB]
Get:2 http://ftp.fr.debian.org/debian/ jessie/main powermgmt-base all 1.31+nmu1 [9,240 B]
Fetched 118 kB in 0s (264 kB/s)           
Selecting previously unselected package hdparm.
(Reading database ... 167600 files and directories currently installed.)
Preparing to unpack .../hdparm_9.43-2_i386.deb ...
Unpacking hdparm (9.43-2) ...
Selecting previously unselected package powermgmt-base.
Preparing to unpack .../powermgmt-base_1.31+nmu1_all.deb ...
Unpacking powermgmt-base (1.31+nmu1) ...
Processing triggers for systemd (215-17+deb8u2) ...
Processing triggers for man-db (2.7.0.2-5) ...
Setting up hdparm (9.43-2) ...
update-rc.d: warning: start and stop actions are no longer supported; falling back to defaults
Setting up powermgmt-base (1.31+nmu1) ...
Processing triggers for systemd (215-17+deb8u2) ...

Exécutez maintenant la commandehdparm :

root@debian8:~# hdparm -t /dev/sda

/dev/sda:
 Timing buffered disk reads: 228 MB in  3.13 seconds =  72.76 MB/sec

Au-dessous du rapport d'utilisation du CPU de la sortie de la commande iostat figure le rapport d'utilisation des périphériques. Ce dernier contient une ligne pour chaque périphérique disque du système et inclut les informations suivantes :

  • La spécification du périphérique, apparaissant sous la forme dev<major-number>-sequence-number où <major-number> correspond au nombre majeur du périphérique et <sequence-number> correspond à un numéro de séquence commençant par zéro.
  • Le nombre de transferts (ou opérations d'E/S) par seconde.
  • Le nombre de blocs de 512 octets lus par seconde.
  • Le nombre de blocs de 512 octets écrits par seconde.
  • Le nombre total de blocs de 512 octets lus par seconde.
  • Le nombre total de blocs de 512 octets écrits par seconde.

Les options de cette commande sont :

root@debian8:~# iostat --help
Usage: iostat [ options ] [ <interval> [ <count> ] ]
Options are:
[ -c ] [ -d ] [ -h ] [ -k | -m ] [ -N ] [ -t ] [ -V ] [ -x ] [ -y ] [ -z ]
[ -j { ID | LABEL | PATH | UUID | ... } ]
[ [ -T ] -g <group_name> ] [ -p [ <device> [,...] | ALL ] ]
[ <device> [...] | ALL ]
vmstat

La commande vmstat affiche des statistiques sur la mémoire, la pagination et la charge ponctuelle du processeur :

root@debian8:~# vmstat 1 10
procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu-----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa st
 2  0   4004 255664  19164 229560    0    0    92    33  159  722 27  6 66  1  0
 0  0   4004 261608  19164 229584    0    0     0     0  156  861 51  8 41  0  0
 0  0   4004 261608  19164 229584    0    0     0     0  146 1009 34  7 60  0  0
 1  0   4004 258104  19164 229584    0    0     0     0  141 1021 32  8 59  0  0
 0  0   4004 261608  19164 229584    0    0     0     0  133  724 31  7 62  0  0
 0  0   4004 261616  19164 229584    0    0     0     0  141 1009 29 10 61  0  0
 2  0   4004 258076  19164 229584    0    0     0     0  142 1033 33  7 60  0  0
 0  0   4004 261560  19164 229584    0    0     0    20  139  746 31  6 62  0  0
 0  0   4004 261332  19164 229584    0    0     0     0  140  988 32  9 60  0  0
 1  0   4004 257984  19164 229584    0    0     0     0  136  980 34  5 61  0  0

La première ligne subdivise le champ en six catégories à savoir : processus, mémoire, swap, E/S, système et CPU sur lesquelles elle donne des statistiques. La seconde ligne identifie de manière encore plus détaillée chacun des champs, permettant ainsi de parcourir simplement et rapidement l'ensemble des données lors de la recherche de statistiques spécifiques.

Les champs relatifs aux processus sont les suivants :

  • r — Le nombre de processus exécutables attendant d'avoir accès au CPU
  • b — Le nombre de processus exécutables dans un état de veille qui ne peut être interrompu

Les champs relatifs à la mémoire sont les suivants :

  • swpd — La quantité de mémoire virtuelle utilisée
  • free — La quantité de mémoire libre
  • buff — La quantité de mémoire utilisée par les tampons (ou buffers)
  • cache — La quantité de mémoire utilisée comme cache de pages

Les champs relatifs au swap sont les suivants :

  • si — La quantité de mémoire chargée depuis le disque
  • so — La quantité de mémoire déchargée sur le disque

Les champs relatifs aux Entrées/Sorties (E/S) sont les suivants :

  • bi — Blocs envoyés vers un périphérique blocs
  • bo— Blocs reçus d'un périphérique blocs

Les champs relatifs au système sont les suivants :

  • in — Nombre d'interruptions par seconde
  • cs — Nombre de changements de contexte par seconde

Les champs relatifs au CPU sont les suivants :

  • us — Le pourcentage de temps pendant lequel le CPU exécute un code de niveau utilisateur
  • sy — Le pourcentage de temps pendant lequel le CPU exécute un code de niveau système
  • id — Le pourcentage de temps pendant lequel le CPU était inoccupé
  • wa — Attente d'E/S

Les options de cette commande sont :

root@debian8:~# vmstat --help

Usage:
 vmstat [options] [delay [count]]

Options:
 -a, --active           active/inactive memory
 -f, --forks            number of forks since boot
 -m, --slabs            slabinfo
 -n, --one-header       do not redisplay header
 -s, --stats            event counter statistics
 -d, --disk             disk statistics
 -D, --disk-sum         summarize disk statistics
 -p, --partition <dev>  partition specific statistics
 -S, --unit <char>      define display unit
 -w, --wide             wide output

 -h, --help     display this help and exit
 -V, --version  output version information and exit

For more details see vmstat(8).

Important : Par défaut la commande vmstat affiche des informations depuis le démarrage du système.

mpstat

La commande mpstat affiche des statistiques détaillées sur le CPU :

root@debian8:~# mpstat
Linux 3.16.0-4-686-pae (debian8) 	11/02/2015 	_i686_	(1 CPU)

09:54:31 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
09:54:31 AM  all   27.49    0.00    5.59    0.77    0.00    0.22    0.00    0.00    0.00   65.92

Dans le cas où vous avez plusieurs processeurs ou coeurs, vous pouvez visualiser ces mêmes informations par unité de traitement :

root@debian8:~# mpstat -P ALL
Linux 3.16.0-4-686-pae (debian8) 	11/02/2015 	_i686_	(1 CPU)

09:54:59 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
09:54:59 AM  all   27.50    0.00    5.59    0.77    0.00    0.22    0.00    0.00    0.00   65.92
09:54:59 AM    0   27.50    0.00    5.59    0.77    0.00    0.22    0.00    0.00    0.00   65.92

Pour afficher 5 jeux de statistiques à des intervales de 2 secondes pour tous les unités de traitement, il convient d'utiliser la commande suivante :

root@debian8:~# mpstat -P ALL 2 5
Linux 3.16.0-4-686-pae (debian8) 	11/02/2015 	_i686_	(1 CPU)

09:59:58 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
10:00:00 AM  all   24.10    0.00    6.15    0.00    0.00    0.51    0.00    0.00    0.00   69.23
10:00:00 AM    0   24.10    0.00    6.15    0.00    0.00    0.51    0.00    0.00    0.00   69.23

10:00:00 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
10:00:02 AM  all   87.06    0.00   11.76    0.00    0.00    0.00    0.00    0.00    0.00    1.18
10:00:02 AM    0   87.06    0.00   11.76    0.00    0.00    0.00    0.00    0.00    0.00    1.18

10:00:02 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
10:00:04 AM  all   44.94    0.00    7.30    0.00    0.00    0.00    0.00    0.00    0.00   47.75
10:00:04 AM    0   44.94    0.00    7.30    0.00    0.00    0.00    0.00    0.00    0.00   47.75

10:00:04 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
10:00:06 AM  all   36.32    0.00    6.32    0.00    0.00    0.00    0.00    0.00    0.00   57.37
10:00:06 AM    0   36.32    0.00    6.32    0.00    0.00    0.00    0.00    0.00    0.00   57.37

10:00:06 AM  CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
10:00:08 AM  all   53.41    0.00   10.80    0.00    0.00    0.00    0.00    0.00    0.00   35.80
10:00:08 AM    0   53.41    0.00   10.80    0.00    0.00    0.00    0.00    0.00    0.00   35.80

Average:     CPU    %usr   %nice    %sys %iowait    %irq   %soft  %steal  %guest  %gnice   %idle
Average:     all   48.18    0.00    8.36    0.00    0.00    0.11    0.00    0.00    0.00   43.34
Average:       0   48.18    0.00    8.36    0.00    0.00    0.11    0.00    0.00    0.00   43.34

Les options de cette commande sont :

root@debian8:~# mpstat --help
Usage: mpstat [ options ] [ <interval> [ <count> ] ]
Options are:
[ -A ] [ -u ] [ -V ] [ -I { SUM | CPU | SCPU | ALL } ]
[ -P { <cpu> [,...] | ON | ALL } ]
sar

La commande sar permet de surveiller toutes les ressources du système selon l'option qui est passée en argument à la commande. Quelques options importantes sont :

Option Description
-u Pourcentage d'utilisation du CPU
-q Nombre de processus en attente
-r Utilisation de la mémoire centrale
-w Surveillance du swapping
-p Surveillance de la pagination
-b Utilisation des tampons
-d Utilisation des disques

Sous Debian 8 la commande /usr/lib/sysstat/sadc permet de collecter les informations :

root@debian8:~# ls /usr/lib/sysstat/
debian-sa1  sa1  sa2  sadc

Les scripts /usr/lib/sa/sa1 et /usr/lib/sysstat/sa1 exécutent la commande sadc. Sous Debian 8, c'est le script debian-sa1 qui est appelé à la place de sa1 afin de rectifier une bogue dans ce dernier ( Bug#499461 ). Ce script, tout comme le script sa1, prend deux options :

Option Description
-t L'interval entre les collectes
-n Nombre de collectes

Les scripts /usr/lib/sa/sa2 et /usr/lib/sysstat/sa2 exécutent la commande sar et consignent les informations dans un fichier au format /var/log/sa/sar<jj> ou /var/log/sysstat/sar<jj> selon la distribution.

Pour pouvoir fonctionner correctement, ces scripts doivent être appelés par cron.

Pour activer la collecte des données sous Debian 8, éditez le fichier /etc/default/sysstat ainsi :

root@debian8:~# cat /etc/default/sysstat
#
# Default settings for /etc/init.d/sysstat, /etc/cron.d/sysstat
# and /etc/cron.daily/sysstat files
#

# Should sadc collect system activity informations? Valid values
# are "true" and "false". Please do not put other values, they
# will be overwritten by debconf!
ENABLED="true"

Modifiez le fichier /etc/cron.d/sysstat ainsi :

root@debian8:~# cat /etc/cron.d/sysstat 
# The first element of the path is a directory where the debian-sa1
# script is located
PATH=/usr/lib/sysstat:/usr/sbin:/usr/sbin:/usr/bin:/sbin:/bin

# Activity reports every 10 minutes everyday
#5-55/10 * * * * root command -v debian-sa1 > /dev/null && debian-sa1 1 1
*/2 * * * * root command -v debian-sa1 > /dev/null && debian-sa1 1 1

# Additional run at 23:59 to rotate the statistics file
59 23 * * * root command -v debian-sa1 > /dev/null && debian-sa1 60 2

Attendez deux minutes puis saisissez les commandes suivantes :

root@debian8:~# sar
Linux 3.16.0-4-686-pae (debian8) 	11/02/2015 	_i686_	(1 CPU)

01:35:01 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
01:40:01 PM     all     23.84      0.00      4.69      0.11      0.00     71.36
Average:        all     23.84      0.00      4.69      0.11      0.00     71.36
root@debian8:~# sar -u 5 3
Linux 3.16.0-4-686-pae (debian8) 	11/02/2015 	_i686_	(1 CPU)

01:41:52 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
01:41:57 PM     all     11.29      0.00      4.31      0.00      0.00     84.39
01:42:02 PM     all     11.02      0.00      4.78      0.00      0.00     84.20
01:42:07 PM     all      6.79      0.00      1.85      2.47      0.00     88.89
Average:        all      9.70      0.00      3.65      0.83      0.00     85.83
root@debian8:~# sar -r 5 3
Linux 3.16.0-4-686-pae (debian8) 	11/02/2015 	_i686_	(1 CPU)

01:42:53 PM kbmemfree kbmemused  %memused kbbuffers  kbcached  kbcommit   %commit  kbactive   kbinact   kbdirty
01:42:58 PM    221948    809916     78.49     38732    244904   2126568     71.28    485024    267320        20
01:43:03 PM    221892    809972     78.50     38740    244904   2126568     71.28    485044    267316       176
01:43:08 PM    221912    809952     78.49     38748    244904   2126568     71.28    485052    267316       224
Average:       221917    809947     78.49     38740    244904   2126568     71.28    485040    267317       140
root@debian8:~# sar -w 5 3
Linux 3.16.0-4-686-pae (debian8) 	11/02/2015 	_i686_	(1 CPU)

01:43:54 PM    proc/s   cswch/s
01:43:59 PM      0.00    539.92
01:44:04 PM      1.24    599.18
01:44:09 PM      0.00    317.45
Average:         0.41    485.32
root@debian8:~# sar -b 5 3
Linux 3.16.0-4-686-pae (debian8) 	11/02/2015 	_i686_	(1 CPU)

01:44:36 PM       tps      rtps      wtps   bread/s   bwrtn/s
01:44:41 PM      2.44      0.00      2.44      0.00     30.16
01:44:46 PM      0.00      0.00      0.00      0.00      0.00
01:44:51 PM      0.00      0.00      0.00      0.00      0.00
Average:         0.78      0.00      0.78      0.00      9.64
root@debian8:~# sar -d 5 3
Linux 3.16.0-4-686-pae (debian8) 	11/02/2015 	_i686_	(1 CPU)

01:44:48 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
01:44:53 PM    dev8-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

01:44:53 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
01:44:58 PM    dev8-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00

01:44:58 PM       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
01:45:03 PM    dev8-0      1.28      0.00     23.98     18.67      0.00      2.00      2.00      0.26

Average:          DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
Average:       dev8-0      0.43      0.00      7.97     18.67      0.00      2.00      2.00      0.09
root@debian8:~# sar -p 5 3
Linux 3.16.0-4-686-pae (debian8) 	11/02/2015 	_i686_	(1 CPU)

01:45:23 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
01:45:28 PM     all     59.87      0.00     11.28      0.00      0.00     28.85
01:45:33 PM     all     48.01      0.00      9.43      1.26      0.00     41.30
01:45:38 PM     all     45.91      0.00      9.70      0.00      0.00     44.40
Average:        all     51.21      0.00     10.13      0.43      0.00     38.23
root@debian8:~# sar -v 5 3
Linux 3.16.0-4-686-pae (debian8) 	11/02/2015 	_i686_	(1 CPU)

01:45:58 PM dentunusd   file-nr  inode-nr    pty-nr
01:46:03 PM     26140      4576     26525         2
01:46:08 PM     26140      4576     26525         2
01:46:13 PM     26140      4576     26525         2
Average:        26140      4576     26525         2

Les options de cette commande sont :

root@debian8:~# sar --help
Usage: sar [ options ] [ <interval> [ <count> ] ]
Options are:
[ -A ] [ -B ] [ -b ] [ -C ] [ -D ] [ -d ] [ -F ] [ -H ] [ -h ] [ -p ] [ -q ]
[ -R ] [ -r ] [ -S ] [ -t ] [ -u [ ALL ] ] [ -V ] [ -v ] [ -W ] [ -w ] [ -y ]
[ -I { <int> [,...] | SUM | ALL | XALL } ] [ -P { <cpu> [,...] | ALL } ]
[ -m { <keyword> [,...] | ALL } ] [ -n { <keyword> [,...] | ALL } ]
[ -j { ID | LABEL | PATH | UUID | ... } ]
[ -f [ <filename> ] | -o [ <filename> ] | -[0-9]+ ]
[ -i <interval> ] [ -s [ <hh:mm:ss> ] ] [ -e [ <hh:mm:ss> ] ]

Utilisation des commandes en production

Identifier un système limité par le processeur

Dans ce cas utilisez les commandes suivantes :

  • uptime ou w
  • vmstat
  • mpstat -P ALL
  • sar -u
  • iostat -c
Identifier un système ayant un problème de mémoire

Dans ce cas utilisez les commandes suivantes :

  • free
  • sar -B
Identifier un système ayant un problème d'E/S

Utilisez la commande :

  • iostat -d -x

Modules usb

L'USB (Universal Serial Bus) est un bus de données qui peut offrir des taux de transfert jusqu'à 480Mb/s sous la version 2.0 et jusqu'à 4.8 Gb/s sous la version 3.0. Les modules nécessaires pour les contrôleurs USB sont :

Version USB Module Nom Complet
1.0\1.1 UHCI Universal Controller Host Interface
OHCI Open Controller Host Interface
2.0 EHCI Enhanced Host Controller Interface
3.0 XHCI Extensible Host Controller Interface

Le tableau suivant liste les modules courrament chargés en fonction du périphérique utilisé :

Module Type de Périphérique
usb_storage Supports de masse
usbhid Periphériques HID (Human Interface Device)
snd-usb-audio Cartes son usb
usbvidéo Cartes vidéo et d'acquisition
irda-usb Périphériques infrarouges
usbnet Cartes réseaux usb

Les modules peuvent être chargés par un des moyens suivants :

  • INITrd,
  • Le processus init,
  • kmod, d'une manière dynamique et transparente lors du branchement du périphérique, en utilisant le fichier /lib/modules/2.6.18-194.3.1.el5/modules.usbmap,
  • udev,
  • manuellement.

A faire : Branchez une clef USB avant de continuer. Si vous utilisez VirtualBox, activez la clef dans votre machine virtuelle grâce aux menus Périphériques > Périphériques USB > le_nom_de_votre_clef.

udev

Depuis le noyau Linux 2.6 Linux est capable de détecter des périphériques branchés à chaud. Cette technologie s'appelle le hotplugging. Le hotplugging est obtenu grâce à l'utilisation de trois composants :

  • Udev,
  • HAL,
  • Dbus.

Les rôles de chaque composant sont les suivants :

  • Udev se charge de créer et supprimer d'une manière dynamique les nœuds dans le répertoire /dev,
  • HAL obtient des informations à partir d'Udev et créé un fichier au format XML représentant le périphérique branché. Il informe ensuite Nautilus en utilisant le Dbus,
  • Dbus joue le rôle d'un bus système qui est utilisé pour la communication inter-processus.

Lors de démarrage de Linux, Udev joue un rôle important :

  • Au démarrage tmpfs est monté sur /dev,
  • Udev copie les éventuels nœuds statiques de /lib/udev/devices vers /dev,
  • le démon udevd collecte des données appelées uevents du noyau et cherche une règle correspondante dans le répertoire /lib/udev/rules.d/,
  • Udev crée les nœuds et liens symboliques spécifiés dans la règle identifiée,
  • Udev stocke les règles contenues dans /lib/udev/rules.d/*.rules en mémoire,
  • En cas de modification des ces règles, Udev met à jour la mémoire.

Udev repose sur le filesystem sysfs monté sur /sys qui permet de rendre les périphériques visibles à Udev dans l'User Space. Par exemple, lors du branchement d'une clé USB, Udev crée /dev/sdb1 automatiquement et utilise les informations contenues dans le fichier /lib/modules/`uname -r`/modules.alias pour trouver le pilote nécessaire :

Le fichier de configuration principal d'Udev est /etc/udev/udev.conf :

root@debian8:~# cat /etc/udev/udev.conf
# see udev(7) for details
#
# udevd is started in the initramfs, so when this file is modified the
# initramfs should be rebuilt.

#udev_log="info"

Les fichiers de règles se trouvent dans /lib/udev/rules.d/ :

root@debian8:~# ls /lib/udev/rules.d/
39-usbmuxd.rules		     60-persistent-serial.rules		    75-net-description.rules		      78-sound-card.rules
40-usb-media-players.rules	     60-persistent-storage-dm.rules	    75-persistent-net-generator.rules	      80-drivers.rules
40-usb_modeswitch.rules		     60-persistent-storage.rules	    75-probe_mtd.rules			      80-mm-candidate.rules
42-usb-hid-pm.rules		     60-persistent-storage-tape.rules	    75-tty-description.rules		      80-net-setup-link.rules
50-bluetooth-hci-auto-poweron.rules  60-persistent-v4l.rules		    77-mm-cinterion-port-types.rules	      80-networking.rules
50-firmware.rules		     61-accelerometer.rules		    77-mm-ericsson-mbm.rules		      80-udisks2.rules
50-udev-default.rules		     61-gnome-bluetooth-rfkill.rules	    77-mm-huawei-net-port-types.rules	      85-hdparm.rules
55-dm.rules			     61-gnome-settings-daemon-rfkill.rules  77-mm-longcheer-port-types.rules	      85-hplj10xx.rules
56-hpmud.rules			     64-btrfs.rules			    77-mm-mtk-port-types.rules		      85-hwclock.rules
60-cdrom_id.rules		     64-xorg-xkb.rules			    77-mm-nokia-port-types.rules	      85-regulatory.rules
60-crda.rules			     69-cd-sensors.rules		    77-mm-pcmcia-device-blacklist.rules       90-alsa-restore.rules
60-drm.rules			     69-libmtp.rules			    77-mm-platform-serial-whitelist.rules     90-libgpod.rules
60-fuse.rules			     69-wacom.rules			    77-mm-qdl-device-blacklist.rules	      90-pulseaudio.rules
60-gnupg.rules			     69-xorg-vmmouse.rules		    77-mm-simtech-port-types.rules	      95-cd-devices.rules
60-keyboard.rules		     70-power-switch.rules		    77-mm-telit-port-types.rules	      95-udev-late.rules
60-libgphoto2-6.rules		     70-printers.rules			    77-mm-usb-device-blacklist.rules	      95-upower-csr.rules
60-libsane.rules		     70-uaccess.rules			    77-mm-usb-serial-adapters-greylist.rules  95-upower-hid.rules
60-open-vm-tools.rules		     71-seat.rules			    77-mm-x22x-port-types.rules		      95-upower-wup.rules
60-persistent-alsa.rules	     73-idrac.rules			    77-mm-zte-port-types.rules		      97-hid2hci.rules
60-persistent-input.rules	     73-seat-late.rules			    77-nm-olpc-mesh.rules		      99-systemd.rules

Important : Il vous est possible d'ajouter des règles si besoin est. Dans ce cas, créez un fichier 99-local.rules est éditez-le au lieu d'éditer les fichiers existants.

Comme indique le nom de chaque fichier, le contenu est composé de règles à l'attention d'udev. Le fichier des règles par défaut est le 50-udev-default.rules :

root@debian8:~# cat /lib/udev/rules.d/50-udev-default.rules | more
# do not edit this file, it will be overwritten on update

SUBSYSTEM=="virtio-ports", KERNEL=="vport*", ATTR{name}=="?*", SYMLINK+="virtio-ports/$attr{name}"

# select "system RTC" or just use the first one
SUBSYSTEM=="rtc", ATTR{hctosys}=="1", SYMLINK+="rtc"
SUBSYSTEM=="rtc", KERNEL=="rtc0", SYMLINK+="rtc", OPTIONS+="link_priority=-100"

SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", IMPORT{builtin}="usb_id", IMPORT{builtin}="hwdb --subsystem=usb"
SUBSYSTEM=="input", ENV{ID_INPUT}=="", IMPORT{builtin}="input_id"
ENV{MODALIAS}!="", IMPORT{builtin}="hwdb --subsystem=$env{SUBSYSTEM}"

ACTION!="add", GOTO="default_permissions_end"

SUBSYSTEM=="tty", KERNEL=="ptmx", GROUP="tty", MODE="0666"
SUBSYSTEM=="tty", KERNEL=="tty", GROUP="tty", MODE="0666"
SUBSYSTEM=="tty", KERNEL=="tty[0-9]*", GROUP="tty", MODE="0620"
SUBSYSTEM=="tty", KERNEL=="sclp_line[0-9]*", GROUP="tty", MODE="0620"
SUBSYSTEM=="tty", KERNEL=="ttysclp[0-9]*", GROUP="tty", MODE="0620"
SUBSYSTEM=="tty", KERNEL=="3270/tty[0-9]*", GROUP="tty", MODE="0620"
SUBSYSTEM=="vc", KERNEL=="vcs*|vcsa*", GROUP="tty"
KERNEL=="tty[A-Z]*[0-9]|pppox[0-9]*|ircomm[0-9]*|noz[0-9]*|rfcomm[0-9]*", GROUP="dialout"
KERNEL=="mISDNtimer", GROUP="dialout"
KERNEL=="mwave", GROUP="dialout"

SUBSYSTEM=="mem", KERNEL=="mem|kmem|port", GROUP="kmem", MODE="0640"
KERNEL=="nvram", GROUP="kmem", MODE="0640"

SUBSYSTEM=="input", GROUP="input"
SUBSYSTEM=="input", KERNEL=="js[0-9]*", MODE="0664"

--More--

Chaque règle prend la forme suivante :

KEY, [KEY, …] NAME [, SYMLINK]

Chaque KEY est un champ au format type=valeur qui doit correspondre à un périphérique unique. La valeur de type peut prendre plusieurs formes :

Type Description Exemples
BUS Type de bus usb, scsi, ide
KERNEL Le nom par défault du périphérique donné par le noyau hda, ttyUSB0, lp0
SUBSYSTEM Le nom noyau du sous-système, généralement identique à la valeur du BUS usb, scsi
DRIVER Le nom du pilote qui contrôle le périphérique usb-storage
ID Le numéro du périphérique sur son bus PCI bus id, USB id
PLACE Ne concerne que les périphériques USB et donne la position topologique du périphérique sur son bus S/O
SYSFS{filename} Le nom du fichier dans /sys pour le périphérique. Ce fichier contient le fabricant, le label, le numéro de série et UUID du périphérique. La vérification de jusqu'à 5 fichiers est possible par règle S/O
PROGRAM Ceci permet à Udev d'appeler un programme externe pour nommer un périphérique S/O
RESULT Valeur à comparer au résultat de PROGRAM S/O

NAME et SYMLINK sont utilisées pour stipuler ce que Udev doit faire avec le périphérique :

Type Description Exemples
NAME Le nome du nœud dans /dev S/O
SYMLINK Le ou les lien(s) symbolique(s) qui pointe(nt) vers le NAME S/O

La commande udevadm

Pour obtenir de l'information sur un périphérique il convient d'utiliser la commande udevadm :

root@debian8:~# udevadm info --query=all -n /dev/sda
P: /devices/pci0000:00/0000:00:0d.0/ata1/host0/target0:0:0/0:0:0:0/block/sda
N: sda
S: disk/by-id/ata-VBOX_HARDDISK_VB823e2981-6120fc97
E: DEVLINKS=/dev/disk/by-id/ata-VBOX_HARDDISK_VB823e2981-6120fc97
E: DEVNAME=/dev/sda
E: DEVPATH=/devices/pci0000:00/0000:00:0d.0/ata1/host0/target0:0:0/0:0:0:0/block/sda
E: DEVTYPE=disk
E: ID_ATA=1
E: ID_ATA_FEATURE_SET_PM=1
E: ID_ATA_FEATURE_SET_PM_ENABLED=1
E: ID_ATA_SATA=1
E: ID_ATA_SATA_SIGNAL_RATE_GEN2=1
E: ID_ATA_WRITE_CACHE=1
E: ID_ATA_WRITE_CACHE_ENABLED=1
E: ID_BUS=ata
E: ID_MODEL=VBOX_HARDDISK
E: ID_MODEL_ENC=VBOX\x20HARDDISK\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20\x20
E: ID_PART_TABLE_TYPE=dos
E: ID_PART_TABLE_UUID=2d923156
E: ID_REVISION=1.0
E: ID_SERIAL=VBOX_HARDDISK_VB823e2981-6120fc97
E: ID_SERIAL_SHORT=VB823e2981-6120fc97
E: ID_TYPE=disk
E: MAJOR=8
E: MINOR=0
E: SUBSYSTEM=block
E: TAGS=:systemd:
E: USEC_INITIALIZED=9411

Les options de la commande

Les options de la commande udevadm sont :

root@debian8:~# udevadm --help
Usage: udevadm [--help] [--version] [--debug] COMMAND [COMMAND OPTIONS]
  info         query sysfs or the udev database
  trigger      request events from the kernel
  settle       wait for pending udev events
  control      control the udev daemon
  monitor      listen to kernel and udev events
  hwdb         maintain the hardware database index
  test         test an event run
  test-builtin test a built-in command

root@debian8:~# udevadm info --help
Usage: udevadm info [OPTIONS] [DEVPATH|FILE]
 -q,--query=TYPE             query device information:
      name                     name of device node
      symlink                  pointing to node
      path                     sys device path
      property                 the device properties
      all                      all values
 -p,--path=SYSPATH           sys device path used for query or attribute walk
 -n,--name=NAME              node or symlink name used for query or attribute walk
 -r,--root                   prepend dev directory to path names
 -a,--attribute-walk         print all key matches walking along the chain
                             of parent devices
 -d,--device-id-of-file=FILE print major:minor of device containing this file
 -x,--export                 export key/value pairs
 -P,--export-prefix          export the key name with a prefix
 -e,--export-db              export the content of the udev database
 -c,--cleanup-db             cleanup the udev database
    --version                print version of the program
 -h,--help                   print this message

Système de fichiers /sys

Le système de fichiers virtuel /sys a été introduit avec le noyau Linux 2.6. Son rôle est de décrire le matériel pour udev.

Saisissez la commande suivante :

root@debian8:~# ls -l /sys
total 0
drwxr-xr-x   2 root root 0 Nov  2 14:01 block
drwxr-xr-x  24 root root 0 Nov  2 14:01 bus
drwxr-xr-x  42 root root 0 Nov  2 14:01 class
drwxr-xr-x   4 root root 0 Nov  2 14:01 dev
drwxr-xr-x  13 root root 0 Nov  2 14:01 devices
drwxr-xr-x   5 root root 0 Nov  2 14:03 firmware
drwxr-xr-x   6 root root 0 Nov  2 14:01 fs
drwxr-xr-x   2 root root 0 Nov  2 14:01 hypervisor
drwxr-xr-x   7 root root 0 Nov  2 14:01 kernel
drwxr-xr-x 105 root root 0 Nov  2 14:01 module
drwxr-xr-x   2 root root 0 Nov  2 14:01 power

Chaque répertoire contient des informations :

  • block
    • contient des informations sur les périphériques bloc
  • bus
    • contient des informations sur les bus de données
  • class
    • contient des informations sur des classes de matériel
  • devices
    • contient des informations sur la position des périphériques sur les bus
  • firmware
    • contient, entre autre, des informations sur l'ACPI
  • module
    • contient des informations sur les modules du noyau
  • power
    • contient des informations sur la gestion de l'énergie
  • fs
    • contient des informations sur les systèmes de fichiers

Pour illustrer ceci, saisissez la commande suivante :

root@debian8:~# cat /sys/block/sda/sda1/size
19529728

Ce chiffre correspond aux nombre de secteurs.

Limitation des ressources

Ulimit

Les ressources disponibles aux utilisateurs peuvent être limitées par l'utilisation de la commande ulimit.

La commande ulimit gère deux types de limite, la limite hard en utilisant l'option -H et la limite soft en utilisant l'option -S. Seul root peut positionner une limite hard et ceci à condition que la limite ne dépasse pas les ressources réelles.

La limite soft est la limite imposée à l'utilisateur par défaut tandis que la limite hard est la limite que l'utilisateur peut atteindre en utilisant la commande ulimit lui-même.

L'utilisateur root peut paramétrer les limites accordées en éditant la fichier /etc/security/limits.conf :

root@debian8:~# cat /etc/security/limits.conf
# /etc/security/limits.conf
#
#Each line describes a limit for a user in the form:
#
#<domain>        <type>  <item>  <value>
#
#Where:
#<domain> can be:
#        - a user name
#        - a group name, with @group syntax
#        - the wildcard *, for default entry
#        - the wildcard %, can be also used with %group syntax,
#                 for maxlogin limit
#        - NOTE: group and wildcard limits are not applied to root.
#          To apply a limit to the root user, <domain> must be
#          the literal username root.
#
#<type> can have the two values:
#        - "soft" for enforcing the soft limits
#        - "hard" for enforcing hard limits
#
#<item> can be one of the following:
#        - core - limits the core file size (KB)
#        - data - max data size (KB)
#        - fsize - maximum filesize (KB)
#        - memlock - max locked-in-memory address space (KB)
#        - nofile - max number of open files
#        - rss - max resident set size (KB)
#        - stack - max stack size (KB)
#        - cpu - max CPU time (MIN)
#        - nproc - max number of processes
#        - as - address space limit (KB)
#        - maxlogins - max number of logins for this user
#        - maxsyslogins - max number of logins on the system
#        - priority - the priority to run user process with
#        - locks - max number of file locks the user can hold
#        - sigpending - max number of pending signals
#        - msgqueue - max memory used by POSIX message queues (bytes)
#        - nice - max nice priority allowed to raise to values: [-20, 19]
#        - rtprio - max realtime priority
#        - chroot - change root to directory (Debian-specific)
#
#<domain>      <type>  <item>         <value>
#

#*               soft    core            0
#root            hard    core            100000
#*               hard    rss             10000
#@student        hard    nproc           20
#@faculty        soft    nproc           20
#@faculty        hard    nproc           50
#ftp             hard    nproc           0
#ftp             -       chroot          /ftp
#@student        -       maxlogins       4

# End of file

Important : La valeur de la limite peut être un nombre ou le mot unlimited.

Par exemple, si root inscrit les deux ligne suivantes dans le fichier /etc/security/limits.conf :

...
trainee                soft        nofile          1024
trainee                hard        nofile          4096
...

la limite du nombre de fichiers ouverts simultanément par trainee est de 1 024. Par contre, trainee a la possibilité d'augmenter cette limite jusqu'à 4 096 en utilisant la commande suivante :

$ ulimit -n 4096

Pour consulter la liste des limites actuelles, il convient d'utiliser la commande ulimit avec l'option -a :

root@debian8:~# ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 7892
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65536
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 8192
cpu time               (seconds, -t) unlimited
max user processes              (-u) 7892
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

Options de la commande

Les options de ulimit sont :

root@debian8:~# ulimit --help
-su: ulimit: --: invalid option
ulimit: usage: ulimit [-SHabcdefilmnpqrstuvxT] [limit]
root@debian8:~# help ulimit
ulimit: ulimit [-SHabcdefilmnpqrstuvxT] [limit]
    Modify shell resource limits.
    
    Provides control over the resources available to the shell and processes
    it creates, on systems that allow such control.
    
    Options:
      -S	use the `soft' resource limit
      -H	use the `hard' resource limit
      -a	all current limits are reported
      -b	the socket buffer size
      -c	the maximum size of core files created
      -d	the maximum size of a process's data segment
      -e	the maximum scheduling priority (`nice')
      -f	the maximum size of files written by the shell and its children
      -i	the maximum number of pending signals
      -l	the maximum size a process may lock into memory
      -m	the maximum resident set size
      -n	the maximum number of open file descriptors
      -p	the pipe buffer size
      -q	the maximum number of bytes in POSIX message queues
      -r	the maximum real-time scheduling priority
      -s	the maximum stack size
      -t	the maximum amount of cpu time in seconds
      -u	the maximum number of user processes
      -v	the size of virtual memory
      -x	the maximum number of file locks
      -T    the maximum number of threads
    
    Not all options are available on all platforms.
    
    If LIMIT is given, it is the new value of the specified resource; the
    special LIMIT values `soft', `hard', and `unlimited' stand for the
    current soft limit, the current hard limit, and no limit, respectively.
    Otherwise, the current value of the specified resource is printed.  If
    no option is given, then -f is assumed.
    
    Values are in 1024-byte increments, except for -t, which is in seconds,
    -p, which is in increments of 512 bytes, and -u, which is an unscaled
    number of processes.
    
    Exit Status:
    Returns success unless an invalid option is supplied or an error occurs.

Groupes de Contrôle

Les Groupes de Contrôles (Control Groups) aussi appelés CGroups, sont une nouvelle façon sous Debian 8 de contrôler et de limiter des ressources. Les groupes de contrôle permettent l'allocation de ressources, même d'une manière dynamique pendant que le système fonctionne, telles le temps processeur, la mémoire système, la bande réseau, ou une combinaison de ces ressources parmi des groupes de tâches (processus) définis par l'utilisateur et exécutés sur un système.

Les groupes de contrôle sont organisés de manière hiérarchique, comme des processus. Par contre, la comparaison entre les deux démontre que tandis que les processus se trouvent dans une arborescence unique descandant tous du processus init et héritant de l'environnement de leurs parents, les contrôles groupes peuvent être multiples donnant lieu à des arborescences ou hiérarchies multiples qui héritent de certains attributs de leurs groupes de contrôle parents.

Ces hiérarchies multiples et séparés sont necéssaires parce que chaque hiérarchie est attaché à un ou plusieurs sous-système(s) aussi appelés des Contrôleurs de Ressources ou simplement des Contrôleurs. Les contrôleurs disponibles sous Debian 8 sont :

  • blkio - utilisé pour établir des limites sur l'accès des entrées/sorties à partir et depuis des périphériques blocs,
  • cpu - utilisé pour fournir aux tâches des groupes de contrôle accès au CPU grâce au planificateur,
  • cpuacct - utilisé pour produire des rapports automatiques sur les ressources CPU utilisées par les tâches dans un groupe de contrôle,
  • cpuset - utilisé pour assigner des CPU individuels sur un système multicoeur et des noeuds de mémoire à des tâches dans un groupe de contrôle,
  • devices - utilisé pour autoriser ou pour refuser l'accès des tâches aux périphériques dans un groupe de contrôle,
  • freezer - utilisé pour suspendre ou pour réactiver les tâches dans un groupe de contrôle,
  • memory - utilisé pour établir les limites d'utilisation de la mémoire par les tâches d'un groupe de contrôle et pour génèrer des rapports automatiques sur les ressources rmémoire utilisées par ces tâches,
  • net_cls - utilisé pour repèrer les paquets réseau avec un identifiant de classe (classid) afin de permettre au contrôleur de trafic Linux, tc, d'identifier les paquets provenant d'une tâche particulière d'un groupe de contrôle.
  • perf_event - utilisé pour permettre le monitoring des CGroups avec l'outil perf,
  • hugetlb - utilisé pour limiter des ressources sur des pages de mémoire virtuelle de grande taille.

Sous Debian 8, les Cgroups ne sont pas installés par défaut :

root@debian8:~# apt-get install cgroup-bin cgroup-tools
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  libcgroup1
The following NEW packages will be installed:
  cgroup-bin cgroup-tools libcgroup1
0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded.
Need to get 119 kB of archives.
After this operation, 359 kB of additional disk space will be used.
Do you want to continue? [Y/n] y
Get:1 http://ftp.fr.debian.org/debian/ jessie/main libcgroup1 amd64 0.41-6 [44.7 kB]
Get:2 http://ftp.fr.debian.org/debian/ jessie/main cgroup-tools amd64 0.41-6 [68.1 kB]
Get:3 http://ftp.fr.debian.org/debian/ jessie/main cgroup-bin all 0.41-6 [6,318 B]
Fetched 119 kB in 0s (130 kB/s)  
Selecting previously unselected package libcgroup1:amd64.
(Reading database ... 86206 files and directories currently installed.)
Preparing to unpack .../libcgroup1_0.41-6_amd64.deb ...
Unpacking libcgroup1:amd64 (0.41-6) ...
Selecting previously unselected package cgroup-tools.
Preparing to unpack .../cgroup-tools_0.41-6_amd64.deb ...
Unpacking cgroup-tools (0.41-6) ...
Selecting previously unselected package cgroup-bin.
Preparing to unpack .../cgroup-bin_0.41-6_all.deb ...
Unpacking cgroup-bin (0.41-6) ...
Processing triggers for man-db (2.7.0.2-5) ...
Setting up libcgroup1:amd64 (0.41-6) ...
Setting up cgroup-tools (0.41-6) ...
Setting up cgroup-bin (0.41-6) ...
Processing triggers for libc-bin (2.19-18+deb8u4) ...

Pour visualiser les hiérarchies, il convient d'utiliser la commande suivante :

root@debian8:~# lssubsys -am
memory
cpuset /sys/fs/cgroup/cpuset
cpu,cpuacct /sys/fs/cgroup/cpu,cpuacct
devices /sys/fs/cgroup/devices
freezer /sys/fs/cgroup/freezer
net_cls,net_prio /sys/fs/cgroup/net_cls,net_prio
blkio /sys/fs/cgroup/blkio
perf_event /sys/fs/cgroup/perf_event

Sous Debian 8, Systemd organise les processus dans chaque CGroup. Par exemple tous les processus démarrés par le serveur Apache se trouveront dans le même CGroup, y compris les scripts CGI. Ceci implique que la gestion des ressources en utilisant des hiérarchies est couplé avec l'arborescence des unités de Systemd.

En haut de l'arborescence des unités de Systemd se trouve la tranche root - -.slice, dont dépend :

  • le system.slice - l'emplacement des services système,
  • le user.slice - l'emplacement des sessions des utilisateurs,
  • le machine.slice - l'emplacement des machines virtuelles et conteneurs.

En dessous des tranches peuvent se trouver :

  • des scopes - des processus crées par fork,
  • des services - des processus créés par une Unité.

Les slices peuvent être visualisés avec la commande suivante :

root@debian8:~# systemctl list-units --type=slice
UNIT               LOAD   ACTIVE SUB    DESCRIPTION
-.slice            loaded active active Root Slice
system-getty.slice loaded active active system-getty.slice
system-ifup.slice  loaded active active system-ifup.slice
system.slice       loaded active active System Slice
user-1000.slice    loaded active active user-1000.slice
user.slice         loaded active active User and Session Slice

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

6 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

L'arborescence des unités de Systemd est la suivante :

root@debian8:~# systemd-cgls
├─1 /sbin/init
├─system.slice
│ ├─avahi-daemon.service
│ │ ├─504 avahi-daemon: running [debian8.local
│ │ └─514 avahi-daemon: chroot helpe
│ ├─dbus.service
│ │ └─505 /usr/bin/dbus-daemon --system --address=systemd: --nofork --nopidfile --systemd-activation
│ ├─ModemManager.service
│ │ └─483 /usr/sbin/ModemManager
│ ├─cron.service
│ │ └─494 /usr/sbin/cron -f
│ ├─nfs-common.service
│ │ ├─466 /sbin/rpc.statd
│ │ └─480 /usr/sbin/rpc.idmapd
│ ├─exim4.service
│ │ └─817 /usr/sbin/exim4 -bd -q30m
│ ├─networking.service
│ │ └─410 dhclient -v -pf /run/dhclient.eth0.pid -lf /var/lib/dhcp/dhclient.eth0.leases eth0
│ ├─atd.service
│ │ └─497 /usr/sbin/atd -f
│ ├─systemd-journald.service
│ │ └─141 /lib/systemd/systemd-journald
│ ├─upower.service
│ │ └─1907 /usr/lib/upower/upowerd
│ ├─packagekit.service
│ │ └─8243 /usr/lib/packagekit/packagekitd
│ ├─ssh.service
│ │ └─493 /usr/sbin/sshd -D
│ ├─systemd-logind.service
│ │ └─500 /lib/systemd/systemd-logind
│ ├─system-getty.slice
│ │ └─getty@tty1.service
│ │   └─567 /sbin/agetty --noclear tty1 linux
│ ├─systemd-udevd.service
│ │ └─153 /lib/systemd/systemd-udevd
│ ├─polkitd.service
│ │ └─767 /usr/lib/policykit-1/polkitd --no-debug
│ ├─rpcbind.service
│ │ └─457 /sbin/rpcbind -w
│ ├─NetworkManager.service
│ │ └─495 /usr/sbin/NetworkManager --no-daemon
│ ├─simplegateway.service
│ │ ├─  484 /bin/sh /opt/JWrapper-Remote Access/JWAppsSharedConfig/SimpleGatewayService/service_launch.sh
│ │ ├─ 1728 /opt/JWrapper-Remote Access/JWrapper-Linux64JRE-00028603412-complete/bin/Remote Access -cp /opt/JWrapper-Remote Access/JWrapper-JWrapper-00041369502-complet
│ │ ├─ 1826 /opt/JWrapper-Remote Access/JWrapper-Linux64JRE-00028603412-complete/bin/Remote Access Monitoring -cp /opt/JWrapper-Remote Access/JWrapper-JWrapper-00041369
│ │ ├─21051 /bin/sh /opt/JWrapper-Remote Access/JWAppsSharedConfig/SimpleGatewayService/service_launch.sh
│ │ └─21098 sleep 1
│ ├─rsyslog.service
│ │ └─559 /usr/sbin/rsyslogd -n
│ └─acpid.service
│   └─561 /usr/sbin/acpid
└─user.slice
  └─user-1000.slice
    ├─user@1000.service
    │ ├─15440 /lib/systemd/systemd --user
    │ └─15441 (sd-pam)  
    ├─session-10.scope
    │ ├─21923 sshd: trainee [priv]
    │ ├─21957 sshd: trainee@pts/1 
    │ ├─21958 -bash
    │ ├─21999 su -
    │ └─22027 -su
    └─session-13.scope
      ├─11749 sshd: trainee [priv]
      ├─11819 sshd: trainee@pts/0 
      ├─11820 -bash
      ├─15165 su -
      ├─15193 -su
      ├─21101 systemd-cgls
      └─21112 systemd-cgls

En utilisant Systemd, plusieurs ressources peuvent être limitées :

  • CPUShares - par défault 1024,
  • MemoryLimit - limite exprimée en Mo ou en Go. Pas de valeur par défaut,
  • BlockIOWeight - valeur entre 10 et 1000. Pas de valeur par défaut,
  • StartupCPUShares - comme CPUShares mais uniquement appliqué pendant le démarrage,
  • StartupBlockIOWeight - comme BlockIOWeight mais uniquement appliqué pendant le démarrage,
  • CPUQuota - utilisé pour limiter le temps CPU, même quand le système ne fait rien.

Important : Consultez le manuel systemd.resource-control(5) pour voir les paramètres CGroup qui peuvent être passés à systemctl.

LAB #1 - Travailler avec les cgroups sous Debian 8

Créez un service appelé foo :

root@debian8:~# vi /lib/systemd/system/foo.service
root@debian8:~# cat /lib/systemd/system/foo.service
[Unit]
Description=The foo service that does nothing useful
After=remote-fs.target nss-lookup.target

[Service]
ExecStart=/usr/bin/sha1sum /dev/zero 
ExecStop=/bin/kill -WINCH ${MAINPID}

[Install]
WantedBy=multi-user.target

root@debian8:~# systemctl status foo.service
● foo.service - The foo service that does nothing useful
   Loaded: loaded (/lib/systemd/system/foo.service; disabled)
   Active: inactive (dead)

Démarrez et activez le service :

root@debian8:~# systemctl start foo.service
root@debian8:~# systemctl enable foo.service
Created symlink from /etc/systemd/system/multi-user.target.wants/foo.service to /lib/systemd/system/foo.service.
root@debian8:~# systemctl status foo.service
● foo.service - The foo service that does nothing useful
   Loaded: loaded (/lib/systemd/system/foo.service; enabled)
   Active: active (running) since Tue 2016-07-19 02:24:29 BST; 16s ago
 Main PID: 25509 (sha1sum)
   CGroup: /system.slice/foo.service
           └─25509 /usr/bin/sha1sum /dev/zero

Notez que notre service a été placé dans la tranche system.slice :

root@debian8:~# systemctl show -p Slice foo.service
Slice=system.slice

Utilisez ps pour voir le pourcentage du CPU utilisé par ce service :

root@debian8:~# ps -p 25509 -o pid,comm,cputime,%cpu
  PID COMMAND             TIME %CPU
25509 sha1sum         00:01:24 98.6

Fixez maintenant la valeur de CPUShares pour ce service à 250 :

root@debian8:~# systemctl set-property foo.service CPUShares=250

Cette limite est permenante et a été inscrite dans le fichier 50-CPUShares.conf qui se trouve dans le répertoire /etc/systemd/system/foo.service.d :

root@debian8:~# ls /etc/systemd/system/foo.service.d
50-CPUShares.conf
root@debian8:~# cat /etc/systemd/system/foo.service.d/50-CPUShares.conf
[Service]
CPUShares=250

Important : En utilisant l'option –runtime avec la commande sysetmctl set-property il est possible d'appliquer la limite d'une manière provisoire.

Appliquez cette modification en rechargeant systemd et en re-démarrant le service foo.service :

root@debian8:~# systemctl daemon-reload
root@debian8:~# systemctl restart foo.service

Vérifiez maintenant que la limite a été appliquée :

root@debian8:~# cat /sys/fs/cgroup/cpu/system.slice/foo.service/cpu.shares
250
root@debian8:~# systemctl show -p MainPID foo.service
MainPID=26975
root@debian8:~# cat /proc/26975/cgroup | grep foo
3:cpu,cpuacct:/system.slice/foo.service
1:name=systemd:/system.slice/foo.service

Créez maintenant le service bar :

root@debian8:~# vi /lib/systemd/system/bar.service
root@debian8:~# cat /lib/systemd/system/bar.service
[Unit]
Description=The bar service that does nothing useful
After=remote-fs.target nss-lookup.target

[Service]
ExecStart=/usr/bin/md5sum /dev/zero 
ExecStop=/bin/kill -WINCH ${MAINPID}

[Install]
WantedBy=multi-user.target

Fixez maintenant la limite de CPUShares pour ce service à 2000 :

root@debian8:~# systemctl set-property bar.service CPUShares=2000
Failed to set unit properties on bar.service: Unit bar.service is not loaded.
root@debian8:~# systemctl start bar.service
root@debian8:~# systemctl enable bar.service
Created symlink from /etc/systemd/system/multi-user.target.wants/bar.service to /lib/systemd/system/bar.service.
root@debian8:~# systemctl set-property bar.service CPUShares=2000

Appliquez la limite :

root@debian8:~# systemctl daemon-reload
root@debian8:~# systemctl restart bar.service
root@debian8:~# systemctl status bar.service
● bar.service - The bar service that does nothing useful
   Loaded: loaded (/lib/systemd/system/bar.service; enabled)
  Drop-In: /etc/systemd/system/bar.service.d
           └─50-CPUShares.conf
   Active: active (running) since Tue 2016-07-19 02:32:13 BST; 9s ago
  Process: 28993 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS)
 Main PID: 28995 (md5sum)
   CGroup: /system.slice/bar.service
           └─28995 /usr/bin/md5sum /dev/zero

Re-démarrer les services foo et bar :

root@debian8:~# systemctl restart foo.service
root@debian8:~# systemctl status foo.service
● foo.service - The foo service that does nothing useful
   Loaded: loaded (/lib/systemd/system/foo.service; enabled)
  Drop-In: /etc/systemd/system/foo.service.d
           └─50-CPUShares.conf
   Active: active (running) since Tue 2016-07-19 02:32:59 BST; 8s ago
  Process: 29351 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS)
 Main PID: 29353 (sha1sum)
   CGroup: /system.slice/foo.service
           └─29353 /usr/bin/sha1sum /dev/zero
root@debian8:~# systemctl restart bar.service
root@debian8:~# systemctl status bar.service
● bar.service - The bar service that does nothing useful
   Loaded: loaded (/lib/systemd/system/bar.service; enabled)
  Drop-In: /etc/systemd/system/bar.service.d
           └─50-CPUShares.conf
   Active: active (running) since Tue 2016-07-19 02:33:20 BST; 7s ago
  Process: 29483 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS)
 Main PID: 29485 (md5sum)
   CGroup: /system.slice/bar.service
           └─29485 /usr/bin/md5sum /dev/zero

Utilisez ps pour voir le pourcentage du CPU utilisé par les deux services :

root@debian8:~# ps -p 29353,29485 -o pid,comm,cputime,%cpu
  PID COMMAND             TIME %CPU
29353 sha1sum         00:00:13 10.9
29485 md5sum          00:01:31 87.5

<html>

Copyright © 2020 Hugh Norris.<br><br>

</html>


Menu