Puncte:1

AWS i3en.3xlarge iops foarte scăzut

drapel lk

Tocmai am lansat o nouă instanță ec2 de tip i3en.3xlarge. Sistemul de operare este Ubuntu. Am montat magazinul de instanțe NVMe, dar fiecare test de viteză pe care îl rulez este incredibil de scăzut, la aproximativ 7k iops. ce fac greșit?

Iată pașii pe care i-am făcut:

1) Verificați ssd-urile disponibile cu nvme -list:

---------------- ------------------- --------------- -------------------------- --------- ---------------- ----------- ---------------- --------
/dev/nvme0n1 vol012301587a8724842 Amazon Elastic Block Store 1 8,59 GB / 8,59 GB 512 B + 0 B 1,0     
/dev/nvme1n1 AWS16AAAC6C7BFAC4972 Stocare de instanță Amazon EC2 NVMe 1 7,50 TB / 7,50 TB 512 B + 0 B 0

2) creați un nou sistem de fișiere xfs pentru nvme1n1:

sudo mkfs -t xfs /dev/nvme1n1

3) montați-l pe /home

sudo mount /dev/nvme1n1 /home

4) verificați df -h:

    ubuntu@ip-172-31-35-146:/home$ df -h
Filesystem Size Used Avail Use% Montat pe
/dev/root 7.7G 2.8G 4.9G 37% /
devtmpfs 47G 0 47G 0% /dev
tmpfs 47G 0 47G 0% /dev/shm
tmpfs 9.4G 852K 9.4G 1% /run
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 47G 0 47G 0% /sys/fs/cgroup
/dev/loop0 25M 25M 0 100% /snap/amazon-ssm-agent/4046
/dev/loop3 43M 43M 0 100% /snap/snapd/14066
/dev/loop2 68M 68M 0 100% /snap/lxd/21835
/dev/loop1 56M 56M 0 100% /snap/core18/2284
/dev/loop4 62M 62M 0 100% /snap/core20/1242
/dev/loop6 56M 56M 0 100% /snap/core18/2253
/dev/loop5 44M 44M 0 100% /snap/snapd/14549
/dev/loop7 62M 62M 0 100% /snap/core20/1328
tmpfs 9.4G 0 9.4G 0% /run/user/1000
/dev/nvme1n1 6.9T 49G 6.8T 1% /home

5) rulați testul cu fio:

fio -direct=1 -iodepth=1 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=iotest -name=Rand_Read_Testing

Rezultate Fio:

fio-3.16
Începe 1 proces
Rand_Read_Testing: Așezare fișier IO (1 fișier / 1024 MiB)
Locuri de muncă: 1 (f=1): [r(1)][100,0%][r=28,5MiB/s][r=7297 IOPS][eta 00m:00s]
Rand_Read_Testing: (groupid=0, jobs=1): err= 0: pid=1701: sat 29 ian 22:28:17 2022
  citiți: IOPS=7139, BW=27,9 MiB/s (29,2 MB/s) (1024 MiB/36717 msec)
    sipcă (nsec): min=2301, max=39139, avg=2448,98, stdev=311,68
    clat (usec): min=32, max=677, avg=137,06, stdev=26,98
     lat (usec): min=35, max=680, avg=139,59, stdev=26,99
    percentile clat (usec):
     | 1.00th=[ 35], 5.00th=[ 99], 10.00th=[ 100], 20.00th=[ 124],
     | 30.00th=[ 125], 40.00th=[ 126], 50.00th=[ 139], 60.00th=[ 141],
     | 70.00th=[ 165], 80.00th=[ 167], 90.00th=[ 169], 95.00th=[ 169],
     | 99.00th=[ 172], 99.50th=[ 174], 99.90th=[ 212], 99.95th=[ 281],
     | 99,99=[ 453]
   bw ( KiB/s): min=28040, max=31152, per=99,82%, avg=28506,48, stdev=367,13, mostre=73
   iops : min= 7010, max= 7788, avg=7126.59, stdev=91.80, mostre=73
  lat (usec): 50=1,29%, 100=9,46%, 250=89,19%, 500=0,06%, 750=0,01%
  CPU : usr=1,43%, sys=2,94%, ctx=262144, majf=0, minf=12
  Adâncimi IO: 1=100,0%, 2=0,0%, 4=0,0%, 8=0,0%, 16=0,0%, 32=0,0%, >=64=0,0%
     trimite: 0=0,0%, 4=100,0%, 8=0,0%, 16=0,0%, 32=0,0%, 64=0,0%, >=64=0,0%
     complet: 0=0,0%, 4=100,0%, 8=0,0%, 16=0,0%, 32=0,0%, 64=0,0%, >=64=0,0%
     rwts emise: total=262144,0,0,0 short=0,0,0,0 dropped=0,0,0,0
     latență: țintă=0, fereastră=0, percentilă=100,00%, adâncime=1

Executați grupul de stare 0 (toate joburile):
   CITIȚI: bw=27.9MiB/s (29.2MB/s), 27.9MiB/s-27.9MiB/s (29.2MB/s-29.2MB/s), io=1024MiB (1074MB), rulare=36717-36717msec

Statistici disc (citire/scriere):
  nvme1n1: ios=259894/5, merge=0/3, ticks=35404/0, in_queue=35404, util=99,77%

Conform unor repere precum Aici performanța iops ar trebui să fie mult mai bună.

Deci îmi lipsește ceva aici?

Mulțumesc anticipat

Tim avatar
drapel gp
Tim
Sper sa te ajute cineva. Dacă nu, cu cazuri mari de genul acesta, cred că s-ar putea să găsiți cu adevărat util să aveți AWS Support, asistența pentru dezvoltatori nu este deosebit de costisitoare și poate fi cu adevărat utilă.
Puncte:1
drapel lk

Datorită răspunsului lui @shearn89 și asistenței aws, m-am gândit că modul în care am rulat testul fio era problema.

Iată ce mi-a spus AWS:

Pentru început, tipul de instanță i3.4xlarge are un IOPS de citire/scriere listat de 825k și, respectiv, 360k [1].Această performanță IOPS poate fi obținută folosind o dimensiune de bloc de până la 4KB și la saturația adâncimii cozii.

Lungimea cozii de volum este numărul de solicitări I/O în așteptare pentru un dispozitiv. Lungimea optimă a cozii variază pentru fiecare sarcină de lucru, în funcție de sensibilitatea aplicației dumneavoastră la IOPS și latență. Dacă volumul dvs. de lucru nu furnizează suficiente solicitări I/O pentru a utiliza pe deplin performanța disponibilă pentru volumul dvs. EBS, atunci este posibil ca volumul dvs. să nu ofere IOPS-ul sau debitul pe care le-ați furnizat [2].

Pentru a determina lungimea optimă a cozii de așteptare pentru volumul dvs. de lucru pe volume susținute de SSD, vă recomandăm să vizați o lungime de coadă de 1 pentru fiecare 1000 de IOPS disponibile [3]. Mărirea lungimii cozii este benefică până când atingeți valoarea IOPS, debitul sau lungimea optimă a cozii de sistem, care este setată în prezent la 32. Pentru mai multe informații despre adâncimea cozii, vă rugăm să consultați aceste articole terță parte care explică termenul în detaliu. [4][5][6].

Pentru a replica problema dvs., am lansat o instanță de același tip și AMI, am creat o matrice RAID 0 utilizând cele 2 dispozitive NVMe din magazinul de instanțe [7] și am rulat fio cu aceiași parametri pe care i-ați furnizat. Rezultatele sunt similare cu ceea ce ați obținut:

$ sudo fio -direct=1 -iodepth=1 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=iotest -name=Rand_Read_Testing
iops: min= 8820, max= 9196, avg=8905.17, stdev=102.04, mostre=58

$ sudo fio -direct=1 -iodepth=1 -rw=randwrite -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=iotest -name=Rand_Read_Testing
iops : min= 1552, max= 2012, avg=1883,84, stdev=59,06, mostre=278

Am repetat testul de mai sus și am reușit să ajung la IOPS R/W de 824k și respectiv 460k, setând parametrii „iodepth=32” și „numjobs=16”:

$ sudo fio --directory=/mnt/raid --name fio_test_file --direct=1 --rw=randread --bs=4k --size=1G --numjobs=16 --time_based --runtime=180 -- group_reporting --norandommap --iodepth=32 --ioengine=libaio
iops: min=572631, max=910386, avg=824619.49, stdev=3518.58, mostre=5745
   
$ sudo fio --directory=/mnt/raid --name fio_test_file --direct=1 --rw=randwrite --bs=4k --size=1G --numjobs=16 --time_based --runtime=180 -- group_reporting --norandommap --iodepth=32 --ioengine=libaio
iops: min=291970, max=509505, avg=360163.50, stdev=2193.22, mostre=5760

Vă rugăm să rețineți că IOPS-ul magazinului de instanțe depinde și de mulți factori, inclusiv de cei deja menționați mai sus, cum ar fi tipul I/O, dimensiunea blocului, dimensiunea I/O, motorul I/O, adâncimea I/O, numărul de fișiere/ dispozitive și numărul de fire/procese. Pentru mai multe informații despre cum să reglați parametrii pentru a optimiza performanța, vă rugăm să consultați aceste articole [8][9][10].

De asemenea, un magazin de instanțe oferă stocare temporară pentru instanța dvs., iar datele se vor pierde dacă discul de bază eșuează sau dacă instanța este oprită/terminată [11]. Prin urmare, dacă aveți nevoie de stocare de date cu persistență, luați în considerare o opțiune mai durabilă, cum ar fi Amazon EBS [12].

Sper să găsești utile informațiile de mai sus. Vă rugăm să-mi spuneți dacă aveți întrebări tehnice suplimentare.

Mulțumesc.

Puncte:0
drapel cn

Așa că învârt una dintre aceste cazuri pentru a testa pentru mine. Pașii mei au fost doar puțin diferiți:

  1. Partiționați discul mai întâi folosind despărțit
  2. Faceți sistemul de fișiere
  3. Montați la /opta la fel de /Acasă era deja acolo și avea directorul principal al utilizatorului meu în (ubuntu).
  4. apt update && apt upgrade, apoi instalați fio
  5. Rulați aceeași comandă ca și dvs.: fio -direct=1 -iodepth=1 -rw=randread -ioengine=libaio -bs=4k -size=1G -numjobs=1 -runtime=1000 -group_reporting -filename=iotest -name=Rand_Read_Testing din cadrul /opta, cu sudo.

Am obtinut rezultate similare, cu citiți: IOPS=7147.

Am mai rulat apoi un test:

/opt$ sudo fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=fiotest --filename=testfio --bs=4k --iodepth=64 --size=8G --readwrite=randrw --rwmixread=75
fiotest: (g=0): rw=randrw, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=64
fio-3.16
Începe 1 proces
fiotest: Așezare fișier IO (1 fișier / 8192 MiB)
Locuri de muncă: 1 (f=1): [m(1)][100,0%][r=332MiB/s,w=109MiB/s][r=85,1k,w=28,0k IOPS][eta 00m:00s]
fiotest: (groupid=0, jobs=1): err= 0: pid=26470: Luni 31 ian 09:14:45 2022
  citiți: IOPS=91,5k, BW=357MiB/s (375MB/s)(6141MiB/17187msec)
   bw ( KiB/s): min=339568, max=509896, per=100,00%, avg=366195,29, stdev=59791,96, mostre=34
   iops : min=84892, max=127474, avg=91548.82, stdev=14947.99, mostre=34
  scrie: IOPS=30.5k, BW=119MiB/s (125MB/s)(2051MiB/17187msec); 0 zone resetate
   bw ( KiB/s): min=111264, max=170424, per=100,00%, avg=122280,71, stdev=20225,33, mostre=34
   iops: min=27816, max=42606, avg=30570.18, stdev=5056.32, mostre=34
  CPU : usr=19,73%, sys=41,60%, ctx=742611, majf=0, minf=8
  Adâncimi IO: 1=0,1%, 2=0,1%, 4=0,1%, 8=0,1%, 16=0,1%, 32=0,1%, >=64=100,0%
     trimite: 0=0,0%, 4=100,0%, 8=0,0%, 16=0,0%, 32=0,0%, 64=0,0%, >=64=0,0%
     complet: 0=0,0%, 4=100,0%, 8=0,0%, 16=0,0%, 32=0,0%, 64=0,1%, >=64=0,0%
     rwts emise: total=1572145,525007,0,0 short=0,0,0,0 dropped=0,0,0,0
     latență: țintă=0, fereastră=0, percentilă=100,00%, adâncime=64

Executați grupul de stare 0 (toate joburile):
   CITEȘTE: bw=357MiB/s (375MB/s), 357MiB/s-357MiB/s (375MB/s-375MB/s), io=6141MiB (6440MB), rulare=17187-17187msec
  SCRIERE: bw=119MiB/s (125MB/s), 119MiB/s-119MiB/s (125MB/s-125MB/s), io=2051MiB (2150MB), rulare=17187-17187msec

Statistici disc (citire/scriere):
  nvme1n1: ios=1563986/522310, merge=0/0, ticks=927244/24031, in_queue=951275, util=99,46%

...care arata mult mai bine - citiți: IOPS=91,5k.

Bănuiesc că se datorează modului în care funcționează testul numai pentru citire? Sau o nuanță de citire a discului pe care vă aflați și o altă limitare?

Mi-am mai rulat testul de câteva ori și am obținut rezultate similare de fiecare dată.

Apoi am rulat un alt test numai în citire folosind comanda de la Aici, și am primit asta:

/opt$ sudo fio --randrepeat=1 --ioengine=libaio --direct=1 --gtod_reduce=1 --name=fiotest --filename=testfio --bs=4k --iodepth=64 --size=8G --readwrite=randread
fiotest: (g=0): rw=randread, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=libaio, iodepth=64
fio-3.16
Începe 1 proces
Locuri de muncă: 1 (f=1): [r(1)][100,0%][r=332MiB/s][r=85,1k IOPS][eta 00m:00s]
fiotest: (groupid=0, jobs=1): err= 0: pid=26503: Luni 31 ian 09:17:57 2022
  citiți: IOPS=88,6k, BW=346MiB/s (363MB/s)(8192MiB/23663msec)
   bw ( KiB/s): min=339560, max=787720, per=100,00%, avg=354565,45, stdev=72963,81, mostre=47
   iops: min=84890, max=196930, avg=88641.40, stdev=18240.94, mostre=47
  CPU : usr=15,37%, sys=31,05%, ctx=844523, majf=0, minf=72
  Adâncimi IO: 1=0,1%, 2=0,1%, 4=0,1%, 8=0,1%, 16=0,1%, 32=0,1%, >=64=100,0%
     trimite: 0=0,0%, 4=100,0%, 8=0,0%, 16=0,0%, 32=0,0%, 64=0,0%, >=64=0,0%
     complet: 0=0,0%, 4=100,0%, 8=0,0%, 16=0,0%, 32=0,0%, 64=0,1%, >=64=0,0%
     rwts emise: total=2097152,0,0,0 short=0,0,0,0 dropped=0,0,0,0
     latență: țintă=0, fereastră=0, percentilă=100,00%, adâncime=64

Executați grupul de stare 0 (toate joburile):
   CITIȚI: bw=346MiB/s (363MB/s), 346MiB/s-346MiB/s (363MB/s-363MB/s), io=8192MiB (8590MB), rulare=23663-23663msec

Statistici disc (citire/scriere):
  nvme1n1: ios=2095751/1, merge=0/0, ticks=1468160/0, in_queue=1468159, util=99,64%

Performanță de citire mult mai bună. Bănuiesc că argumentele pe care le-ați dat comanda nu permit testului să obțină cea mai bună performanță de pe disc, poate din cauza dimensiunii blocului, dimensiunii fișierului etc. Am observat că toate erau argumente cu o singură liniuță (de ex. -bs=4k) nu dublu (--bs=4k), așa că s-ar putea să nu fie analizate corect...

Raphael Noero avatar
drapel lk
Vă mulțumesc mult pentru acest răspuns sofisticat. Cred că ai dreptate și este similar cu ceea ce mi-a spus suportul aws.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.