Điểm:1

AWS i3en.3xlarge iops thực sự thấp

lá cờ lk

Tôi vừa khởi chạy một phiên bản ec2 phiên bản mới thuộc loại i3en.3xlarge. Hệ điều hành là Ubuntu. Tôi đã cài đặt cửa hàng Phiên bản NVMe nhưng mọi bài kiểm tra tốc độ mà tôi chạy đều thấp đến mức khó tin, khoảng 7 nghìn iop. Tôi đang làm gì sai?

Đây là các bước tôi đã làm:

1) Kiểm tra ssds có sẵn với 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 Bộ nhớ phiên bản Amazon EC2 NVMe 1 7,50 TB / 7,50 TB 512 B + 0 B 0

2) tạo hệ thống tệp xfs mới cho nvme1n1:

sudo mkfs -t xfs /dev/nvme1n1

3) gắn nó vào /home

Sudo mount /dev/nvme1n1 /home

4) kiểm tra df -h:

    ubuntu@ip-172-31-35-146:/home$ df -h
Kích thước hệ thống tệp được sử dụng Sẵn có Sử dụng % Được gắn trên
/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%/lần chạy
tmpfs 5,0M 0 5,0M 0%/chạy/khóa
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%/chạy/người dùng/1000
/dev/nvme1n1 6,9T 49G 6,8T 1%/nhà

5) chạy thử với 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

Kết quả Fio:

fio-3.16
Bắt đầu 1 quá trình
Rand_Read_Testing: Bố trí tệp IO (1 tệp / 1024MiB)
Công việc: 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 Jan 22:28:17 2022
  đọc: IOPS=7139, BW=27,9MiB/giây (29,2MB/giây)(1024MiB/36717msec)
    đá phiến (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
    phần trăm clat (usec):
     | Thứ 1,00=[ 35], thứ 5,00=[ 99], thứ 10,00=[ 100], thứ 20,00=[ 124],
     | Thứ 30,00=[ 125], thứ 40,00=[ 126], thứ 50,00=[ 139], thứ 60,00=[ 141],
     | Thứ 70,00=[ 165], 80,00=[ 167], 90,00=[ 169], 95,00=[ 169],
     | Thứ 99,00=[ 172], 99,50=[ 174], 99,90=[ 212], 99,95=[ 281],
     | 99,99th=[ 453]
   bw ( KiB/s): min=28040, max=31152, per=99,82%, avg=28506,48, stdev=367,13, sample=73
   iops: tối thiểu = 7010, tối đa = 7788, trung bình = 7126,59, stdev = 91,80, mẫu = 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
  Độ sâu IO: 1=100,0%, 2=0,0%, 4=0,0%, 8=0,0%, 16=0,0%, 32=0,0%, >=64=0,0%
     gửi : 0=0,0%, 4=100,0%, 8=0,0%, 16=0,0%, 32=0,0%, 64=0,0%, >=64=0,0%
     hoàn thành : 0=0,0%, 4=100,0%, 8=0,0%, 16=0,0%, 32=0,0%, 64=0,0%, >=64=0,0%
     rwts đã phát hành: tổng=262144,0,0,0 ngắn=0,0,0,0 giảm=0,0,0,0
     độ trễ: mục tiêu = 0, cửa sổ = 0, phần trăm = 100,00%, độ sâu = 1

Chạy trạng thái nhóm 0 (tất cả công việc):
   ĐỌC: bw=27,9MiB/s (29,2MB/s), 27,9MiB/s-27,9MiB/s (29,2MB/s-29,2MB/s), io=1024MiB (1074MB), run=36717-36717msec

Thống kê đĩa (đọc/ghi):
  nvme1n1: ios=259894/5, merge=0/3, ticks=35404/0, in_queue=35404, util=99,77%

Theo điểm chuẩn như đây hiệu suất iops sẽ tốt hơn nhiều.

Vì vậy, tôi đang thiếu một cái gì đó ở đây?

Cảm ơn trước

Tim avatar
lá cờ gp
Tim
Hy vọng rằng ai đó có thể giúp bạn. Nếu không, với những phiên bản lớn như vậy, tôi nghĩ bạn có thể thấy AWS Support thực sự hữu ích, hỗ trợ nhà phát triển không đặc biệt tốn kém và chúng có thể thực sự hữu ích.
Điểm:1
lá cờ lk

Nhờ phản hồi của @ shearn89 và sự hỗ trợ của aws, tôi đã tìm ra cách chạy thử nghiệm fio gây lãng phí vấn đề.

Đây là những gì AWS nói với tôi:

Để bắt đầu, loại phiên bản i3.4xlarge có IOPS đọc/ghi được liệt kê lần lượt là 825k và 360k [1].Hiệu suất IOPS này có thể đạt được bằng cách sử dụng kích thước khối lên tới 4KB và ở độ bão hòa độ sâu hàng đợi.

Độ dài hàng đợi âm lượng là số lượng yêu cầu I/O đang chờ xử lý cho một thiết bị. Độ dài hàng đợi tối ưu khác nhau đối với từng khối lượng công việc, tùy thuộc vào độ nhạy của ứng dụng cụ thể của bạn đối với IOPS và độ trễ. Nếu khối lượng công việc của bạn không cung cấp đủ yêu cầu I/O để sử dụng đầy đủ hiệu suất có sẵn cho ổ đĩa EBS của bạn, thì ổ đĩa của bạn có thể không cung cấp IOPS hoặc thông lượng mà bạn đã cung cấp [2].

Để xác định độ dài hàng đợi tối ưu cho khối lượng công việc của bạn trên các ổ đĩa được SSD hỗ trợ, chúng tôi khuyên bạn nên nhắm mục tiêu độ dài hàng đợi là 1 cho mỗi 1000 IOPS có sẵn [3]. Việc tăng độ dài hàng đợi sẽ có lợi cho đến khi bạn đạt được IOPS được cung cấp, thông lượng hoặc giá trị độ dài hàng đợi hệ thống tối ưu, hiện được đặt thành 32. Để biết thêm thông tin về độ sâu hàng đợi, vui lòng tham khảo các bài viết của bên thứ ba giải thích rất chi tiết về thuật ngữ này [4][5][6].

Để tái tạo vấn đề của bạn, tôi đã khởi chạy một phiên bản cùng loại và AMI, tạo một mảng RAID 0 bằng cách sử dụng 2 thiết bị NVMe lưu trữ phiên bản [7] và chạy fio với cùng tham số mà bạn đã cung cấp. Kết quả tương tự như những gì bạn đạt được:

$ 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: tối thiểu = 8820, tối đa = 9196, trung bình = 8905,17, stdev = 102,04, mẫu = 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: tối thiểu = 1552, tối đa = 2012, trung bình = 1883,84, stdev = 59,06, mẫu = 278

Tôi đã lặp lại thử nghiệm ở trên và có thể đạt được R/W IOPS lần lượt là 824k và 460k, bằng cách đặt các tham số "iodepth=32" và "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: tối thiểu=572631, tối đa=910386, trung bình=824619,49, stdev=3518,58, mẫu=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: tối thiểu=291970, tối đa=509505, trung bình=360163,50, stdev=2193,22, mẫu=5760

Xin lưu ý rằng IOPS của cửa hàng phiên bản cũng phụ thuộc vào nhiều yếu tố, bao gồm cả những yếu tố đã được đề cập ở trên, chẳng hạn như loại I/O, kích thước khối, kích thước I/O, công cụ I/O, độ sâu I/O, số lượng tệp/ thiết bị và số luồng/quy trình. Để biết thêm thông tin về cách điều chỉnh các tham số để tối ưu hóa hiệu suất, vui lòng tham khảo các bài viết này [8][9][10].

Ngoài ra, một kho lưu trữ phiên bản cung cấp bộ lưu trữ tạm thời cho phiên bản của bạn và dữ liệu sẽ bị mất nếu đĩa bên dưới bị lỗi hoặc nếu phiên bản bị dừng/chấm dứt [11]. Do đó, nếu bạn yêu cầu lưu trữ dữ liệu lâu dài, hãy xem xét một tùy chọn lâu bền hơn, chẳng hạn như Amazon EBS [12].

Tôi hy vọng bạn tìm thấy những thông tin trên hữu ích. Vui lòng cho tôi biết nếu bạn có thêm bất kỳ câu hỏi kỹ thuật nào.

Cảm ơn bạn.

Điểm:0
lá cờ cn

Vì vậy, tôi mở rộng một trong những trường hợp này để tự kiểm tra. Các bước của tôi chỉ khác một chút:

  1. Phân vùng đĩa trước bằng cách sử dụng chia tay
  2. Tạo hệ thống tập tin
  3. Gắn kết tại /opt như /Trang Chủ đã ở đó và có thư mục chính của người dùng của tôi trong (Ubuntu).
  4. cập nhật apt && nâng cấp apt, sau đó cài đặt fio
  5. Chạy lệnh tương tự như bạn: 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 từ bên trong /opt, với sudo.

Tôi nhận được kết quả tương tự, với đọc: IOPS=7147.

Sau đó tôi chạy thử nghiệm khác:

/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
Bắt đầu 1 quá trình
fiotest: Bố trí file IO (1 file / 8192MiB)
Công việc: 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: Mon 31 tháng 1 09:14:45 2022
  đọc: IOPS=91,5k, BW=357MiB/giây (375MB/giây)(6141MiB/17187msec)
   bw ( KiB/s): tối thiểu=339568, tối đa=509896, mỗi=100,00%, trung bình=366195,29, stdev=59791,96, mẫu=34
   iops: tối thiểu=84892, tối đa=127474, trung bình=91548,82, stdev=14947,99, mẫu=34
  ghi: IOPS=30,5k, BW=119MiB/s (125MB/s)(2051MiB/17187msec); 0 vùng đặt lại
   bw ( KiB/s): min=111264, max=170424, per=100,00%, avg=122280,71, stdev=20225,33, sample=34
   iops: tối thiểu=27816, tối đa=42606, avg=30570,18, stdev=5056,32, mẫu=34
  cpu: usr=19,73%, sys=41,60%, ctx=742611, majf=0, minf=8
  Độ sâu IO: 1=0,1%, 2=0,1%, 4=0,1%, 8=0,1%, 16=0,1%, 32=0,1%, >=64=100,0%
     gửi : 0=0,0%, 4=100,0%, 8=0,0%, 16=0,0%, 32=0,0%, 64=0,0%, >=64=0,0%
     hoàn thành : 0=0,0%, 4=100,0%, 8=0,0%, 16=0,0%, 32=0,0%, 64=0,1%, >=64=0,0%
     rwts đã phát hành: tổng=1572145,525007,0,0 short=0,0,0,0 drop=0,0,0,0
     độ trễ: mục tiêu = 0, cửa sổ = 0, phần trăm = 100,00%, độ sâu = 64

Chạy trạng thái nhóm 0 (tất cả công việc):
   ĐỌC: bw=357MiB/s (375MB/s), 357MiB/s-357MiB/s (375MB/s-375MB/s), io=6141MiB (6440MB), run=17187-17187msec
  VIẾT: bw=119MiB/s (125MB/s), 119MiB/s-119MiB/s (125MB/s-125MB/s), io=2051MiB (2150MB), run=17187-17187msec

Thống kê đĩa (đọc/ghi):
  nvme1n1: ios=1563986/522310, hợp nhất=0/0, tick=927244/24031, in_queue=951275, util=99,46%

... trông đẹp hơn rất nhiều - đọc: IOPS=91,5k.

Tôi nghi ngờ đó là do cách thức hoạt động của bài kiểm tra chỉ đọc? Hoặc một số sắc thái của việc đọc đĩa bạn đang sử dụng và một số hạn chế khác?

Tôi đã chạy thử nghiệm của mình thêm vài lần nữa và mỗi lần đều nhận được kết quả tương tự.

Sau đó, tôi đã chạy một bài kiểm tra chỉ đọc khác bằng cách sử dụng lệnh từ đây, và nhận được điều này:

/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
Bắt đầu 1 quá trình
Công việc: 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: Mon 31 tháng 1 09:17:57 2022
  đọc: IOPS=88,6k, BW=346MiB/giây (363MB/giây)(8192MiB/23663msec)
   bw ( KiB/s): min=339560, max=787720, per=100,00%, avg=354565,45, stdev=72963,81, sample=47
   iops: tối thiểu=84890, tối đa=196930, trung bình=88641,40, stdev=18240,94, mẫu=47
  cpu: usr=15,37%, sys=31,05%, ctx=844523, majf=0, minf=72
  Độ sâu IO: 1=0,1%, 2=0,1%, 4=0,1%, 8=0,1%, 16=0,1%, 32=0,1%, >=64=100,0%
     gửi : 0=0,0%, 4=100,0%, 8=0,0%, 16=0,0%, 32=0,0%, 64=0,0%, >=64=0,0%
     hoàn thành : 0=0,0%, 4=100,0%, 8=0,0%, 16=0,0%, 32=0,0%, 64=0,1%, >=64=0,0%
     rwts đã phát hành: tổng=2097152,0,0,0 short=0,0,0,0 drop=0,0,0,0
     độ trễ: mục tiêu = 0, cửa sổ = 0, phần trăm = 100,00%, độ sâu = 64

Chạy trạng thái nhóm 0 (tất cả công việc):
   ĐỌC: bw=346MiB/s (363MB/s), 346MiB/s-346MiB/s (363MB/s-363MB/s), io=8192MiB (8590MB), run=23663-23663msec

Thống kê đĩa (đọc/ghi):
  nvme1n1: ios=2095751/1, merge=0/0, ticks=1468160/0, in_queue=1468159, util=99,64%

Vì vậy, hiệu suất đọc tốt hơn nhiều. Tôi nghi ngờ các đối số mà bạn đã đưa ra lệnh của mình không cho phép thử nghiệm đạt được hiệu suất tốt nhất từ ​​đĩa, có thể do kích thước khối, kích thước tệp, v.v. Tôi đã nhận thấy rằng tất cả chúng đều là các đối số một dấu gạch ngang (ví dụ: -bs=4k) không gấp đôi (--bs=4k), vì vậy chúng thậm chí có thể không được phân tích cú pháp chính xác...

Raphael Noero avatar
lá cờ lk
Cảm ơn bạn rất nhiều vì câu trả lời phức tạp này. Tôi nghĩ bạn đúng và điều này tương tự như những gì bộ phận hỗ trợ aws đã nói với tôi.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.