Maison Tutoriel système Linux Linux peut-il augmenter la vitesse de votre disque plusieurs fois ? Voici des conseils top secrets d'optimisation des E/S !

Linux peut-il augmenter la vitesse de votre disque plusieurs fois ? Voici des conseils top secrets d'optimisation des E/S !

Feb 10, 2024 pm 12:00 PM
linux linux教程 linux系统 linux命令 shell脚本 Linux embarqué Débuter avec Linux apprentissage Linux

Linux peut-il augmenter la vitesse de votre disque plusieurs fois ? Voici des conseils top secrets doptimisation des E/S !

Dans les systèmes informatiques, les opérations d'E/S sont l'une des opérations les plus courantes et les plus longues. Pour les utilisateurs Linux, l'optimisation des performances IO est très importante. Cependant, de nombreuses personnes ne savent pas comment optimiser les E/S pour obtenir des vitesses de lecture et d’écriture sur disque plus rapides. Cet article présentera quelques techniques efficaces d'optimisation des E/S pour augmenter plusieurs fois la vitesse du disque de votre système Linux !

fio est plus pratique à utiliser sous le système Linux, iometer est plus pratique à utiliser sous le système Windows, Orion est le logiciel de test IO d'Oracle, qui peut simuler la lecture et l'écriture de scénarios de base de données Oracle sans installer la base de données Oracle.

Ce qui suit est un test d'E/S sur le stockage SAN à l'aide de l'outil fio sur un système Linux.

1. Installez fio

Méthode 1 : Téléchargez le fichier fio-2.1.10.tar depuis le site officiel de fio Après l'avoir décompressé, vous pouvez utiliser fio après ./configure, make et make install.

Méthode 2 : Installer via yum sous le système Linux, yum install -y fio

2. Explication du paramètre [neiqian]fio[/neiqian]

Vous pouvez utiliser fio -help pour afficher chaque paramètre. Pour des paramètres spécifiques, vous pouvez consulter la procédure à suivre sur le site officiel. Voici plusieurs descriptions de paramètres courants

.
filename=/dev/emcpowerb 支持文件系统或者裸设备,-filename=/dev/sda2或-filename=/dev/sdb
direct=1 测试过程绕过机器自带的buffer,使测试结果更真实
rw=randwread 测试随机读的I/O
rw=randwrite 测试随机写的I/O
rw=randrw 测试随机混合写和读的I/O
rw=read 测试顺序读的I/O
rw=write 测试顺序写的I/O
rw=rw 测试顺序混合写和读的I/O
bs=4k 单次io的块文件大小为4k
bsrange=512-2048 同上,提定数据块的大小范围
size=5g 本次的测试文件大小为5g,以每次4k的io进行测试
numjobs=30 本次的测试线程为30
runtime=1000 测试时间为1000秒,如果不写则一直将5g文件分4k每次写完为止
ioengine=psync io引擎使用pync方式,如果要使用libaio引擎,需要yum install libaio-devel包
rwmixwrite=30 在混合读写的模式下,写占30%
group_reporting 关于显示结果的,汇总每个进程的信息
此外
lockmem=1g 只使用1g内存进行测试
zero_buffers 用0初始化系统buffer
nrfiles=8 每个进程生成文件的数量
Copier après la connexion

3. Explication détaillée des scénarios de test fio et génération de rapports

Scénario de test :

100% aléatoire, 100% lu, 4K

fio -filename=/dev/emcpowerb -direct=1 -iodepth 1 -thread -rw=randread -ioengine=psync -

bs=4k -size=1000G -numjobs=50 -runtime=180 -group_reporting -name=rand_100read_4k
Copier après la connexion

100% aléatoire, 100% écrit, 4K

fio -filename=/dev/emcpowerb -direct=1 -iodepth 1 -thread -rw=randwrite -ioengine=psync -

bs=4k -size=1000G -numjobs=50 -runtime=180 -group_reporting -name=rand_100write_4k
Copier après la connexion

100% séquentiel, 100% lecture, 4K

fio -filename=/dev/emcpowerb -direct=1 -iodepth 1 -thread -rw=read -ioengine=psync -

bs=4k -size=1000G -numjobs=50 -runtime=180 -group_reporting -name=sqe_100read_4k
Copier après la connexion

100% séquentiel, 100% écrit, 4K

fio -filename=/dev/emcpowerb -direct=1 -iodepth 1 -thread -rw=write -ioengine=psync -

bs=4k -size=1000G -numjobs=50 -runtime=180 -group_reporting -name=sqe_100write_4k
Copier après la connexion

100 % aléatoire, 70 % de lecture, 30 % d'écriture 4K

fio -filename=/dev/emcpowerb -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -


ioengine=psync -bs=4k -size=1000G -numjobs=50 -runtime=180 -group_reporting -

name=randrw_70read_4k
Copier après la connexion

Vue du rapport de résultats :

[root@rac01-node02]# fio -filename=/dev/sdc4 -direct=1 -iodepth 1 -thread -rw=randrw -rwmixread=70 -ioengine=psync -bs=4k -size=1000G -numjobs=50 -runtime=180 -group_reporting -name=randrw_70read_4k_local
randrw_70read_4k_local: (g=0): rw=randrw, bs=4K-4K/4K-4K/4K-4K, ioengine=psync, iodepth=1
...
fio-2.1.10
Starting 50 threads
Jobs: 21 (f=21): [mm_m_m__mmmmmm__mm_m_mmm_mm__m_m_m] [3.4% done] [7004KB/2768KB/0KB /s] [1751/692/0 iops] [eta 01h:27m:00s]
randrw_70read_4k_local: (groupid=0, jobs=50): err= 0: pid=13710: Wed May 31 10:23:31 2017
read : io=1394.2MB, bw=7926.4KB/s, iops=1981, runt=180113msec

clat (usec): min=39, max=567873, avg=24323.79, stdev=25645.98
lat (usec): min=39, max=567874, avg=24324.23, stdev=25645.98
clat percentiles (msec):
| 1.00th=[ 3], 5.00th=[ 5], 10.00th=[ 6], 20.00th=[ 7],
| 30.00th=[ 9], 40.00th=[ 12], 50.00th=[ 16], 60.00th=[ 21],
| 70.00th=[ 27], 80.00th=[ 38], 90.00th=[ 56], 95.00th=[ 75],
| 99.00th=[ 124], 99.50th=[ 147], 99.90th=[ 208], 99.95th=[ 235],
| 99.99th=[ 314]
bw (KB /s): min= 15, max= 537, per=2.00%, avg=158.68, stdev=38.08

write: io=615280KB, bw=3416.8KB/s, iops=854, runt=180113msec

clat (usec): min=167, max=162537, avg=2054.79, stdev=7665.24
lat (usec): min=167, max=162537, avg=2055.38, stdev=7665.23
clat percentiles (usec):
| 1.00th=[ 201], 5.00th=[ 227], 10.00th=[ 249], 20.00th=[ 378],
| 30.00th=[ 548], 40.00th=[ 692], 50.00th=[ 844], 60.00th=[ 996],
| 70.00th=[ 1160], 80.00th=[ 1304], 90.00th=[ 1720], 95.00th=[ 3856],
| 99.00th=[40192], 99.50th=[58624], 99.90th=[98816], 99.95th=[123392],
| 99.99th=[148480]
bw (KB /s): min= 6, max= 251, per=2.00%, avg=68.16, stdev=29.18
lat (usec) : 50=0.01%, 100=0.03%, 250=3.15%, 500=5.00%, 750=5.09%
lat (usec) : 1000=4.87%
lat (msec) : 2=9.64%, 4=4.06%, 10=21.42%, 20=18.08%, 50=19.91%
lat (msec) : 100=7.24%, 250=1.47%, 500=0.03%, 750=0.01%

cpu : usr=0.07%, sys=0.21%, ctx=522490, majf=0, minf=7
IO depths : 1=100.0%, 2=0.0%, 4=0.0%, 8=0.0%, 16=0.0%, 32=0.0%, >=64=0.0%

submit : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
complete : 0=0.0%, 4=100.0%, 8=0.0%, 16=0.0%, 32=0.0%, 64=0.0%, >=64=0.0%
issued : total=r=356911/w=153820/d=0, short=r=0/w=0/d=0
latency : target=0, window=0, percentile=100.00%, depth=1

Run status group 0 (all jobs):
READ: io=1394.2MB, aggrb=7926KB/s, minb=7926KB/s, maxb=7926KB/s, mint=180113msec, maxt=1801

13msec

WRITE: io=615280KB, aggrb=3416KB/s, minb=3416KB/s, maxb=3416KB/s, mint=180113msec, maxt=180

113msec

Disk stats (read/write):

sdc: ios=356874/153927, merge=0/10, ticks=8668598/310288, in_queue=8978582, util=99.99%

io=执行了多少M的IO

bw=平均IO带宽
iops=IOPS
runt=线程运行时间
slat=提交延迟
clat=完成延迟
lat=响应时间
bw=带宽
cpu=利用率
IO depths=io队列
IO submit=单个IO提交要提交的IO数
IO complete=Like the above submit number, but for completions instead.
IO issued=The number of read/write requests issued, and how many of them were short.
IO latencies=IO完延迟的分布

io=总共执行了多少size的IO
aggrb=group总带宽
minb=最小.平均带宽.
maxb=最大平均带宽.
mint=group中线程的最短运行时间.
maxt=group中线程的最长运行时间.

ios=所有group总共执行的IO数.
merge=总共发生的IO合并数.
ticks=Number of ticks we kept the disk busy.
io_queue=花费在队列上的总共时间.
util=磁盘利用率
Copier après la connexion

4. Profondeur de file d'attente d'E/S étendue

À un certain moment, il y a N requêtes IO en vol, y compris les requêtes IO dans la file d'attente et les requêtes IO en cours de traitement par le disque. N est la profondeur de la file d'attente.
L'augmentation de la profondeur de la file d'attente du disque dur consiste à faire fonctionner le disque dur en continu et à réduire le temps d'inactivité du disque dur.
Augmentez la profondeur de la file d'attente -> Améliorez l'utilisation -> Obtenez les pics d'IOPS et de MBPS -> Notez que le temps de réponse se situe dans une plage acceptable,
Il existe de nombreuses façons d'augmenter la profondeur de la file d'attente. Utiliser des requêtes IO asynchrones et lancer plusieurs requêtes IO en même temps équivaut à avoir plusieurs requêtes IO dans la file d'attente.
Augmentez la taille des E/S de l'application. Après avoir atteint la couche inférieure, cela deviendra plusieurs demandes d'E/S, ce qui équivaut à plusieurs demandes d'E/S dans la file d'attente. La profondeur de la file d'attente augmente.
À mesure que la profondeur de la file d'attente augmente, le temps d'attente des E/S dans la file d'attente augmentera également, ce qui entraînera un temps de réponse des E/S plus long, ce qui nécessite un compromis.

Pourquoi devons-nous paralléliser les E/S disque ? L’objectif principal est d’améliorer les performances de l’application. Ceci est particulièrement important pour les disques virtuels (ou LUN) composés de plusieurs disques physiques.
Si les E/S sont soumises une par une, même si le temps de réponse est plus court, le débit du système est très faible.
En comparaison, la soumission de plusieurs E/S en même temps réduit non seulement la distance de mouvement de la tête (grâce à l'algorithme d'ascenseur), mais améliore également les IOPS.
Si un ascenseur ne peut prendre qu'une seule personne à la fois, alors une fois que tout le monde prend l'ascenseur, ils peuvent atteindre leur destination rapidement (temps de réponse), mais le temps d'attente sera plus long (longueur de la file d'attente).
La soumission simultanée de plusieurs E/S au système de disque équilibre le débit et le temps de réponse global.

Système Linux pour afficher la profondeur de file d'attente par défaut :

[root@qsdb ~]# lsscsi -l
[0:0:0:0] disk DGC VRAID 0533 /dev/sda

state=running queue_depth=30 scsi_level=5 type=0 device_blocked=0 timeout=30

[0:0:1:0] disk DGC VRAID 0533 /dev/sdb

state=running queue_depth=30 scsi_level=5 type=0 device_blocked=0 timeout=30

[2:0:0:0] disk DGC VRAID 0533 /dev/sdd

state=running queue_depth=30 scsi_level=5 type=0 device_blocked=0 timeout=30

[2:0:1:0] disk DGC VRAID 0533 /dev/sde

state=running queue_depth=30 scsi_level=5 type=0 device_blocked=0 timeout=30

[4:2:0:0] disk IBM ServeRAID M5210 4.27 /dev/sdc

state=running queue_depth=256 scsi_level=6 type=0 device_blocked=0 timeout=90

[9:0:0:0] cd/dvd Lenovo SATA ODD 81Y3677 IB00 /dev/sr0

state=running queue_depth=1 scsi_level=6 type=5 device_blocked=0 timeout=30
Copier après la connexion

Utilisez la commande dd pour définir bs=2M pour les tests :

dd if=/dev/zero of=/dev/sdd bs=2M count=1000 oflag=direct
Copier après la connexion

1000+0 lectures enregistrées 1000+0 écritures enregistrées 2097152000 octets (2,1 Go) copiés, 10,6663 secondes, 197 Mo/seconde

Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util

sdd 0.00 0.00 0.00 380.60 0.00 389734.40 1024.00 2.39 6.28 2.56 97.42
Copier après la connexion

Vous pouvez voir qu'une fois que 2 Mo d'E/S ont atteint la couche inférieure, ils se transformeront en plusieurs E/S de 512 Ko. La longueur moyenne de la file d'attente est de 2,39, le taux d'utilisation de ce disque dur est de 97 % et le MBPS atteint 197 Mo/s.
(Pourquoi cela devient-il 512 Ko d'E/S ? Vous pouvez utiliser Google pour vérifier la signification et l'utilisation du paramètre du noyau max_sectors_kb.) En d'autres termes, augmenter la profondeur de la file d'attente peut tester la valeur maximale du disque dur.

5. Explication détaillée de l'affichage de la commande IO iostat dans le système Linux

[root@rac01-node01 /]# iostat -xd 3

Linux 3.8.13-16.2.1.el6uek.x86_64 (rac01-node01) 05/27/2017 _x8664 (40 CPU)

Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await svctm %util

sda 0.05 0.75 2.50 0.50 76.59 69.83 48.96 0.00 1.17 0.47 0.14

scd0 0.00 0.00 0.02 0.00 0.11 0.00 5.25 0.00 21.37 20.94 0.05

dm-0 0.00 0.00 2.40 1.24 75.88 69.83 40.00 0.01 1.38 0.38 0.14

dm-1 0.00 0.00 0.02 0.00 0.14 0.00 8.00 0.00 0.65 0.39 0.00

sdc 0.00 0.00 0.01 0.00 0.11 0.00 10.20 0.00 0.28 0.28 0.00

sdb 0.00 0.00 0.01 0.00 0.11 0.00 10.20 0.00 0.15 0.15 0.00

sdd 0.00 0.00 0.01 0.00 0.11 0.00 10.20 0.00 0.25 0.25 0.00

sde 0.00 0.00 0.01 0.00 0.11 0.00 10.20 0.00 0.14 0.14 0.00
Copier après la connexion

Description du paramètre de sortie :

rrqms:每秒这个设备相关的读取请求有多少被Merge了(当系统调用需要读取数据的时候,VFS将请求发到各个FS,如

果FS发现不同的读取请求读取的是相同Block的数据,FS会将这个请求合并Merge)

wrqm/s:每秒这个设备相关的写入请求有多少被Merge了。

rsec/s:The number of sectors read from the device per second.

wsec/s:The number of sectors written to the device per second.

rKB/s:The number of kilobytes read from the device per second.

wKB/s:The number of kilobytes written to the device per second.

avgrq-sz:平均请求扇区的大

小,The average size (in sectors) of the requests that were issued to the device.

avgqu-sz:是平均请求队列的长度。毫无疑问,队列长度越短越

好,The average queue length of the requests that were issued to the device.


await:每一个IO请求的处理的平均时间(单位是微秒毫秒)。这里可以理解为IO的响应时间,一般地系统IO响应时间

应该低于5ms,如果大于10ms就比较大了。

这个时间包括了队列时间和服务时间,也就是说,一般情况下,await大于svctm,它们的差值越小,则说明队列时间越

短,反之差值越大,队列时间越长,说明系统出了问题。

svctm:表示平均每次设备I/O操作的服务时间(以毫秒为单位)。如果svctm的值与await很接近,表示几乎没有I/O

等待,磁盘性能很好。

如果await的值远高于svctm的值,则表示I/O队列等待太长,系统上运行的应用程序将变慢。

%util: 在统计时间内所有处理IO时间,除以总共统计时间。例如,如果统计间隔1秒,该设备有0.8秒在处理IO,而

0.2秒闲置,那么该设备的%util = 0.8/1 = 80%,

所以该参数暗示了设备的繁忙程度,一般地,如果该参数是100%表示磁盘设备已经接近满负荷运行了(当然如果是多磁

盘,即使%util是100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。
Copier après la connexion

Grâce à cet article, nous avons appris comment améliorer la vitesse de lecture et d'écriture du disque des systèmes Linux grâce à des techniques efficaces d'optimisation des E/S. Ces techniques incluent l'utilisation du planificateur d'E/S, la désactivation des services inutiles, l'ajustement des paramètres du système de fichiers, etc. Dans le processus d'optimisation des performances IO, soyez prudent et choisissez la solution d'optimisation la plus adaptée à vos besoins. Le système optimisé apportera une expérience de lecture et d'écriture de disque plus rapide et plus fluide, améliorera votre efficacité de travail et répondra mieux à vos besoins.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quelle configuration de l'ordinateur est requise pour VScode Quelle configuration de l'ordinateur est requise pour VScode Apr 15, 2025 pm 09:48 PM

Vs Code Système Exigences: Système d'exploitation: Windows 10 et supérieur, MacOS 10.12 et supérieur, processeur de distribution Linux: minimum 1,6 GHz, recommandé 2,0 GHz et au-dessus de la mémoire: minimum 512 Mo, recommandée 4 Go et plus d'espace de stockage: Minimum 250 Mo, recommandée 1 Go et plus d'autres exigences: connexion du réseau stable, xorg / wayland (Linux) recommandé et recommandée et plus

VScode ne peut pas installer l'extension VScode ne peut pas installer l'extension Apr 15, 2025 pm 07:18 PM

Les raisons de l'installation des extensions de code vs peuvent être: l'instabilité du réseau, les autorisations insuffisantes, les problèmes de compatibilité système, la version de code vs est trop ancienne, un logiciel antivirus ou des interférences de pare-feu. En vérifiant les connexions réseau, les autorisations, les fichiers journaux, la mise à jour vs du code, la désactivation des logiciels de sécurité et le redémarrage du code ou des ordinateurs, vous pouvez progressivement dépanner et résoudre les problèmes.

Comment exécuter le code Java dans le bloc-notes Comment exécuter le code Java dans le bloc-notes Apr 16, 2025 pm 07:39 PM

Bien que le bloc-notes ne puisse pas exécuter directement le code Java, il peut être réalisé en utilisant d'autres outils: à l'aide du compilateur de ligne de commande (Javac) pour générer un fichier bytecode (filename.class). Utilisez l'interpréteur Java (Java) pour interpréter ByteCode, exécuter le code et sortir le résultat.

Peut-on utiliser pour mac Peut-on utiliser pour mac Apr 15, 2025 pm 07:36 PM

VS Code est disponible sur Mac. Il a des extensions puissantes, l'intégration GIT, le terminal et le débogueur, et offre également une multitude d'options de configuration. Cependant, pour des projets particulièrement importants ou un développement hautement professionnel, le code vs peut avoir des performances ou des limitations fonctionnelles.

Qu'est-ce que VScode pour quoi est VScode? Qu'est-ce que VScode pour quoi est VScode? Apr 15, 2025 pm 06:45 PM

VS Code est le code Visual Studio Nom complet, qui est un éditeur de code multiplateforme gratuit et open source et un environnement de développement développé par Microsoft. Il prend en charge un large éventail de langages de programmation et fournit une mise en surbrillance de syntaxe, une complétion automatique du code, des extraits de code et des invites intelligentes pour améliorer l'efficacité de développement. Grâce à un écosystème d'extension riche, les utilisateurs peuvent ajouter des extensions à des besoins et des langues spécifiques, tels que les débogueurs, les outils de mise en forme de code et les intégrations GIT. VS Code comprend également un débogueur intuitif qui aide à trouver et à résoudre rapidement les bogues dans votre code.

Comment utiliser vscode Comment utiliser vscode Apr 15, 2025 pm 11:21 PM

Visual Studio Code (VSCODE) est un éditeur de code Open Source, Open Source et gratuit développé par Microsoft. Il est connu pour son léger, l'évolutivité et le support pour une large gamme de langages de programmation. Pour installer VScode, veuillez visiter le site officiel pour télécharger et exécuter l'installateur. Lorsque vous utilisez VSCODE, vous pouvez créer de nouveaux projets, modifier le code, déboguer le code, naviguer dans les projets, développer VSCODE et gérer les paramètres. VScode est disponible pour Windows, MacOS et Linux, prend en charge plusieurs langages de programmation et fournit diverses extensions via Marketplace. Ses avantages incluent le léger, l'évolutivité, le support linguistique étendu, les fonctionnalités riches et la version

Quel est le but principal de Linux? Quel est le but principal de Linux? Apr 16, 2025 am 12:19 AM

Les principales utilisations de Linux comprennent: 1. Système d'exploitation du serveur, 2. Système intégré, 3. Système d'exploitation de bureau, 4. Environnement de développement et de test. Linux excelle dans ces domaines, offrant des outils de stabilité, de sécurité et de développement efficaces.

Comment vérifier l'adresse de l'entrepôt de Git Comment vérifier l'adresse de l'entrepôt de Git Apr 17, 2025 pm 01:54 PM

Pour afficher l'adresse du référentiel GIT, effectuez les étapes suivantes: 1. Ouvrez la ligne de commande et accédez au répertoire du référentiel; 2. Exécutez la commande "git Remote -v"; 3. Affichez le nom du référentiel dans la sortie et son adresse correspondante.

See all articles