Saturday, January 18, 2025

Benchmark Ceph Cluster Performance

-

1. Tổng quan.

Một trong những câu hỏi phổ biến mà chúng ta thường nghe là “Làm thế nào để kiểm tra xem cụm của tôi đang chạy ở hiệu suất tối đa hay không?”.

Đừng còn nghi ngờ nữa – trong hướng dẫn này, tôi sẽ hướng dẫn bạn thông qua một số công cụ bạn có thể sử dụng để đánh giá hiệu suất của cụm Ceph của bạn.

2. Lấy dữ liệu hiệu suất cơ bản.

Về cơ bản, việc đánh giá hiệu suất là về sự so sánh. Bạn sẽ không biết liệu cụm Ceph của bạn có hiệu suất kém hơn không nếu bạn không xác định trước hiệu suất tối đa có thể đạt được. Vì vậy, trước khi bạn bắt đầu đánh giá hiệu suất của cụm, bạn cần thu thập dữ liệu hiệu suất cơ bản cho hai thành phần chính của cơ sở hạ tầng Ceph của bạn: disk và network.

2.1. Đánh giá hiệu suất disk.

Cách đơn giản nhất để đánh giá hiệu suất của ổ đĩa là sử dụng lệnh dd. Sử dụng lệnh sau để đọc và ghi một file, nhớ thêm tham số oflag để bỏ qua bộ cache disk shell> dd if=/dev/zero of=here bs=1G count=1 oflag=direct.

shell> dd if=/dev/sda1 of=here bs=1G count=1 oflag=direct
1+0 records in
1+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 14.1375 s, 75.9 MB/s

Trong đoạn shell này, lệnh dd được sử dụng để tạo và ghi một file có dung lượng 1 gigabyte vào disk từ thiết bị /dev/zero. Tham số “oflag=direct” được thêm vào để bỏ qua cache disk, giúp đo lường hiệu suất thực tế hơn mà không bị ảnh hưởng bởi bộ cache của hệ thống.

Chú ý đến số liệu cuối cùng được cung cấp, cho biết hiệu suất của ổ đĩa được đo bằng đơn vị MB/giây. Thực hiện thử nghiệm này cho từng ổ đĩa trong cụm của bạn và ghi lại kết quả.

Lặp lại quá trình trên với mỗi ổ đĩa trong cụm Ceph của bạn, thay đổi thiết bị đầu vào (if) để thí nghiệm trên mỗi ổ đĩa riêng lẻ. Ghi chú kết quả của mỗi lần thử nghiệm để bạn có thể so sánh hiệu suất giữa các ổ đĩa khác nhau.

Ví dụ:

shell> dd if=/dev/zero of=here_disk1 bs=1G count=1 oflag=direct   # Thử nghiệm cho ổ đĩa 1
shell> dd if=/dev/zero of=here_disk2 bs=1G count=1 oflag=direct   # Thử nghiệm cho ổ đĩa 2
# ... và tiếp tục cho tất cả các ổ đĩa khác trong cụm Ceph

Khi bạn đã thu thập dữ liệu hiệu suất cho tất cả các ổ đĩa, bạn có thể so sánh chúng để xác định xem có sự chênh lệch hiệu suất nào đáng kể giữa chúng hay không. Điều này giúp bạn hiểu rõ hơn về hiệu suất của từng thành phần trong cụm Ceph và có thể đưa ra các điều chỉnh cần thiết để tối ưu hóa hiệu suất toàn bộ hệ thống.

2.2. Đánh giá hiệu suất network.

Yếu tố khác quan trọng ảnh hưởng đến hiệu suất của cụm Ceph là network throughput. Một công cụ tốt cho việc này là iperf, sử dụng kết nối client-server để đo lường băng thông TCP và UDP.

Bạn có thể cài đặt iperf bằng cách sử dụng lệnh apt-get install iperf hoặc yum install iperf.

iperf cần được cài đặt trên ít nhất hai node trong cụm của bạn. Sau đó, trên một trong những node đó, bắt đầu máy chủ iperf bằng lệnh iperf -s:

shell> iperf -s

Ví dụ:

shell>  iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size:  128 KByte (default)
------------------------------------------------------------

Trên một node khác bắt đầu với lệnh iperf -c <ip_other_node>, nhớ sử dụng địa chỉ IP của node chứa máy chủ iperf:

shell>  iperf -c 10.10.10.1
------------------------------------------------------------
Client connecting to 10.10.10.1, TCP port 5001
TCP window size:  325 KByte (default)
------------------------------------------------------------
[  1] local 10.10.10.2 port 46614 connected with 10.10.10.1 port 5001 (icwnd/mss/irtt=87/8948/174)
[ ID] Interval       Transfer     Bandwidth
[  1] 0.0000-10.0081 sec  22.3 GBytes  19.1 Gbits/sec

Lúc này trên node thứ nhất bạn cũng thấy một phản hồi tương tự.

shell>  iperf -s
------------------------------------------------------------
Server listening on TCP port 5001
TCP window size:  128 KByte (default)
------------------------------------------------------------
[  1] local 10.10.10.1 port 5001 connected with 10.10.10.2 port 46614 (icwnd/mss/irtt=87/8948/167)
[ ID] Interval       Transfer     Bandwidth
[  1] 0.0000-10.0020 sec  22.3 GBytes  19.1 Gbits/sec

Một ví dụ khác.

shell>  iperf -c 192.168.100.201
------------------------------------------------------------
Client connecting to 192.168.100.201, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[  1] local 192.168.100.202 port 33956 connected with 192.168.100.201 port 5001 (icwnd/mss/irtt=14/1448/614)
[ ID] Interval       Transfer     Bandwidth
[  1] 0.0000-10.0389 sec  1.08 GBytes   927 Mbits/sec

Chú ý đến thống kê về băng thông trong Mbits/giây vì nó cho biết thông lượng tối đa được hỗ trợ bởi mạng của bạn.

Bây giờ bạn đã có một số con số cơ bản, bạn có thể bắt đầu đánh giá hiệu suất cụm Ceph của mình để xem liệu nó có mang lại hiệu suất tương tự không. Việc đánh giá hiệu suất có thể được thực hiện ở các cấp độ khác nhau, các phần tiếp theo sẽ thảo luận về từng phương pháp này.

LƯU Ý: Trước khi chạy bất kỳ bài kiểm tra hiệu suất nào trong các phần tiếp theo, hãy xóa tất cả bộ đệm sử dụng một lệnh như sau:

shell> sudo echo 3 | sudo tee /proc/sys/vm/drop_caches && sudo sync

3. Kiểm tra hiệu suất Ceph Cluster.

Ceph cung cấp lệnh rados bench, được thiết kế đặc biệt để đánh giá hiệu suất của một cụm lưu trữ RADOS. Để sử dụng nó, tạo một pool lưu trữ và sau đó sử dụng rados bench để thực hiện bài kiểm tra ghi, như dưới đây.

Lưu ý rằng lệnh rados có sẵn trong Ceph.

Đoạn shell này tạo một pool mới có tên ‘scbench’ sử dụng cho việc kiểm tra hiệu suất Ceph Cluster.

shell> ceph osd pool create scbench 128 128
pool 'scbench' created

3.1. Kiểm tra hiệu suất write.

Thực hiện một bài kiểm tra ghi trong 10 giây, chú ý tới tùy chọn --no-cleanup, giữ lại một số dữ liệu. Đầu ra cung cấp một chỉ báo tốt về tốc độ mà cụm của bạn có thể ghi dữ liệu.

shell> rados bench -p scbench 10 write --no-cleanup
hints = 1
Maintaining 16 concurrent writes of 4194304 bytes to objects of size 4194304 for up to 10 seconds or 0 objects
Object prefix: benchmark_data_pve01_206160
  sec Cur ops   started  finished  avg MB/s  cur MB/s last lat(s)  avg lat(s)
    0       0         0         0         0         0           -           0
    1      16        59        43   171.996       172    0.963678    0.213789
    2      16       104        88    175.99       180    0.295165    0.286825
    3      16       139       123   163.989       140    0.312714    0.330538
    4      16       183       167   166.987       176    0.346195    0.349855
    5      16       223       207   165.587       160   0.0237642    0.361371
    6      16       289       273   181.985       264    0.141648     0.33803
    7      16       363       347   198.269       296    0.277607    0.315916
    8      16       435       419   209.482       288   0.0178935    0.299038
    9      16       498       482   214.203       252    0.739165    0.290785
   10      16       575       559    223.58       308   0.0242857    0.281243
Total time run:         10.3942
Total writes made:      575
Write size:             4194304
Object size:            4194304
Bandwidth (MB/sec):     221.277
Stddev Bandwidth:       63.9569
Max bandwidth (MB/sec): 308
Min bandwidth (MB/sec): 140
Average IOPS:           55
Stddev IOPS:            15.9892
Max IOPS:               77
Min IOPS:               35
Average Latency(s):     0.283744
Stddev Latency(s):      0.308866
Max latency(s):         2.29825
Min latency(s):         0.0162581

3.2. Kiểm tra hiệu suất read.

  • Có hai loại kiểm tra hiệu suất read:
    • seq đọc tuần tự
    • rand đọc ngẫu nhiên.

Để thực hiện bài kiểm tra hiệu suất read, sử dụng các lệnh sau:

Kiểm tra hiệu suất read sử dụng seq đọc tuần tự.

shell> rados bench -p scbench 10 seq
hints = 1
  sec Cur ops   started  finished  avg MB/s  cur MB/s last lat(s)  avg lat(s)
    0       0         0         0         0         0           -           0
    1      16        51        35   139.972       140    0.756952    0.279962
    2      16        86        70   139.979       140     0.23217    0.359918
    3      16       120       104   138.648       136     1.56024     0.37622
    4      16       159       143   142.982       156    0.342164    0.379561
    5      16       196       180   143.983       148    0.199029    0.397816
    6      16       229       213   141.983       132     0.93168     0.41536
    7      16       267       251   143.412       152     0.73074      0.4178
    8      16       306       290   144.984       156   0.0142614    0.424589
    9      16       343       327   145.317       148    0.267312    0.421654
   10      16       377       361   144.383       136    0.180502    0.424134
Total time run:       10.601
Total reads made:     377
Read size:            4194304
Object size:          4194304
Bandwidth (MB/sec):   142.25
Average IOPS:         35
Stddev IOPS:          2.18327
Max IOPS:             39
Min IOPS:             33
Average Latency(s):   0.434896
Max latency(s):       2.58891
Min latency(s):       0.0113677

Kiểm tra hiệu suất read sử dụng seq đọc ngẫu nhiên.

shell>  rados bench -p scbench 10 rand
hints = 1
  sec Cur ops   started  finished  avg MB/s  cur MB/s last lat(s)  avg lat(s)
    0       0         0         0         0         0           -           0
    1      16        53        37    147.98       148   0.0130151    0.278623
    2      16        90        74   147.983       148    0.381693    0.324045
    3      16       124       108   143.985       136    0.698125     0.40277
    4      16       166       150   149.985       168   0.0140388    0.377531
    5      16       202       186   148.785       144    0.304747    0.397443
    6      16       249       233   155.318       188    0.794429    0.380006
    7      16       285       269   153.699       144     0.62953    0.394227
    8      16       323       307   153.484       152   0.0117146     0.39327
    9      16       353       337   149.762       120     1.31034    0.402935
   10      16       395       379   151.585       168   0.0115058    0.403742
Total time run:       10.4776
Total reads made:     395
Read size:            4194304
Object size:          4194304
Bandwidth (MB/sec):   150.798
Average IOPS:         37
Stddev IOPS:          4.7481
Max IOPS:             47
Min IOPS:             30
Average Latency(s):   0.414063
Max latency(s):       2.4455
Min latency(s):       0.00287499

Bạn cũng có thể thêm tham số -t để tăng cường đọc và ghi (mặc định là 16 luồng), hoặc tham số -b để thay đổi kích thước của đối tượng đang được ghi (mặc định là 4 MB). Cũng là một ý tưởng tốt để chạy nhiều bản sao của bài kiểm tra này đối với các pool khác nhau, để xem hiệu suất thay đổi như thế nào với nhiều client.

Sau khi bạn có dữ liệu, bạn có thể bắt đầu so sánh các thống kê đọc và ghi của cụm với các bài kiểm tra chỉ đọc từ ổ đĩa đã thực hiện trước đó, xác định sự chênh lệch hiệu suất (nếu có) và bắt đầu tìm kiếm nguyên nhân.

Bạn có thể dọn sạch dữ liệu kiểm tra bị bỏ lại bởi bài kiểm tra ghi bằng lệnh rados -p <pool_name> cleanup:

shell> rados -p scbench cleanup
Removed 575 objects

4. Kiểm tra hiệu suất Block Device của Ceph Cluster.

Nếu bạn quan tâm đến các thiết bị sử dụng Block Device của Ceph, có hai công cụ bạn có thể sử dụng để đánh giá hiệu suất của chúng. Ceph đã bao gồm lệnh rbd bench, nhưng bạn cũng có thể sử dụng công cụ phổ biến để kiểm tra I/O là fio, hiện đã tích hợp sẵn hỗ trợ cho các thiết bị block RADOS.

Lưu ý rằng lệnh rbd đã có sẵn trong Ceph còn fio là một tính năng khá mới, do đó, bạn cần tải nó và cài đặt từ repo của nó hoặc bạn tham khảo bài viết này https://wiki.hoanghd.com/su-dung-cong-cu-fio-de-do-i-o-toi-da-cua-mot-o-dia/ để tham khảo các bước cài đặt fio.

Trước khi sử dụng bất kỳ công cụ nào trong hai công cụ này, tạo một thiết bị block bằng cách sử dụng các lệnh dưới đây:

shell> ceph osd pool create rbdbench 128 128
shell> rbd create image01 --size 1024 --pool rbdbench
shell> sudo rbd map image01 --pool rbdbench --name client.admin
shell> sudo /sbin/mkfs.ext4 -m0 /dev/rbd/rbdbench/image01
shell> sudo mkdir /mnt/ceph-block-device
shell> sudo mount /dev/rbd/rbdbench/image01 /mnt/ceph-block-device

Một ví dụ cho các lệnh ở trên.

shell> ceph osd pool create rbdbench 128 128
pool 'rbdbench' created

shell> rbd create image01 --size 1024 --pool rbdbench

shell> sudo rbd map image01 --pool rbdbench --name client.admin
/dev/rbd1                                                                                               252:16   0     1G  0 disk

shell> sudo /sbin/mkfs.ext4 -m0 /dev/rbd/rbdbench/image01
mke2fs 1.47.0 (5-Feb-2023)
Discarding device blocks: done                            
Creating filesystem with 262144 4k blocks and 65536 inodes
Filesystem UUID: d2995e16-ffba-4a36-98e5-2b9ec33affb5
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

shell> sudo mkdir /mnt/ceph-block-device

shell> sudo mount /dev/rbd/rbdbench/image01 /mnt/ceph-block-device

shell> df -h
Filesystem                    Size  Used Avail Use% Mounted on
udev                          126G     0  126G   0% /dev
tmpfs                          26G  2.4M   26G   1% /run
/dev/mapper/pve-root           94G  5.2G   84G   6% /
tmpfs                         126G   66M  126G   1% /dev/shm
tmpfs                         5.0M     0  5.0M   0% /run/lock
/dev/sdi2                    1022M  356K 1022M   1% /boot/efi
/dev/fuse                     128M   44K  128M   1% /etc/pve
tmpfs                         126G   28K  126G   1% /var/lib/ceph/osd/ceph-9
tmpfs                         126G   28K  126G   1% /var/lib/ceph/osd/ceph-13
tmpfs                         126G   28K  126G   1% /var/lib/ceph/osd/ceph-11
tmpfs                         126G   28K  126G   1% /var/lib/ceph/osd/ceph-15
tmpfs                         126G   28K  126G   1% /var/lib/ceph/osd/ceph-14
tmpfs                         126G   28K  126G   1% /var/lib/ceph/osd/ceph-10
tmpfs                         126G   28K  126G   1% /var/lib/ceph/osd/ceph-12
tmpfs                         126G   28K  126G   1% /var/lib/ceph/osd/ceph-8
10.10.10.10:/mnt/ntjpool/pve   32T  710G   31T   3% /mnt/pve/nfs-backup
tmpfs                          26G     0   26G   0% /run/user/0
/dev/rbd1                     974M   24K  958M   1% /mnt/ceph-block-device

Lệnh rbd bench-write image01 --pool=rbdbench tạo ra một loạt các bản ghi tuần tự vào image01 để đo throughput và latency.

Dưới đây là một ví dụ:

shell> rbd bench-write image01 --pool=rbdbench
rbd: bench-write is deprecated, use rbd bench --io-type write ...
bench  type write io_size 4096 io_threads 16 bytes 1073741824 pattern sequential
  SEC       OPS   OPS/SEC   BYTES/SEC
    1     56496   56512.2   221 MiB/s
    2    100144   50080.2   196 MiB/s
    3    148800   49605.5   194 MiB/s
    4    197632   49412.2   193 MiB/s
    5    256256   51254.6   200 MiB/s
elapsed: 7   ops: 262144   ops/sec: 34366.2   bytes/sec: 134 MiB/s

Hoặc bạn có thể sử dụng fio để kiểm tra Block Device của bạn. Hãy tạo một template rbd.fio để thực hiện một bài kiểm tra write ngẫu nhiên 4K đối với Block Device RADOS thông qua librbd.

Bạn cần cập nhật tên pool và tên Block Device của bạn cho template như ví dụ dưới đây.

cat > ./rbd.fio << 'OEF'
[global]
ioengine=rbd
clientname=admin
pool=rbdbench
rbdname=image01
rw=randwrite
bs=4k

[rbd_iodepth32]
iodepth=32
OEF

Sau đó, chạy fio <template_filename> như sau:

shell> fio ./rbd.fio
rbd_iodepth32: (g=0): rw=randwrite, bs=(R) 4096B-4096B, (W) 4096B-4096B, (T) 4096B-4096B, ioengine=rbd, iodepth=32
fio-3.33
Starting 1 process
Jobs: 1 (f=1): [w(1)][100.0%][w=160MiB/s][w=41.0k IOPS][eta 00m:00s]
rbd_iodepth32: (groupid=0, jobs=1): err= 0: pid=190327: Mon Nov 20 11:58:18 2023
  write: IOPS=35.8k, BW=140MiB/s (147MB/s)(1024MiB/7314msec); 0 zone resets
    slat (nsec): min=1184, max=293391, avg=6151.75, stdev=6026.82
    clat (usec): min=24, max=94237, avg=885.74, stdev=2198.32
     lat (usec): min=30, max=94244, avg=891.89, stdev=2198.64
    clat percentiles (usec):
     |  1.00th=[  200],  5.00th=[  249], 10.00th=[  285], 20.00th=[  347],
     | 30.00th=[  412], 40.00th=[  486], 50.00th=[  562], 60.00th=[  668],
     | 70.00th=[  807], 80.00th=[ 1012], 90.00th=[ 1483], 95.00th=[ 2212],
     | 99.00th=[ 5014], 99.50th=[ 6783], 99.90th=[31589], 99.95th=[58983],
     | 99.99th=[74974]
   bw (  KiB/s): min=109864, max=170096, per=98.30%, avg=140928.00, stdev=18847.42, samples=14
   iops        : min=27466, max=42524, avg=35232.00, stdev=4711.86, samples=14
  lat (usec)   : 50=0.01%, 100=0.01%, 250=5.16%, 500=37.06%, 750=24.26%
  lat (usec)   : 1000=12.95%
  lat (msec)   : 2=14.58%, 4=4.32%, 10=1.41%, 20=0.08%, 50=0.09%
  lat (msec)   : 100=0.07%
  cpu          : usr=27.14%, sys=6.02%, ctx=22493, majf=0, minf=5261
  IO depths    : 1=0.1%, 2=0.1%, 4=0.1%, 8=0.1%, 16=0.1%, 32=100.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.1%, 64=0.0%, >=64=0.0%
     issued rwts: total=0,262144,0,0 short=0,0,0,0 dropped=0,0,0,0
     latency   : target=0, window=0, percentile=100.00%, depth=32

Run status group 0 (all jobs):
  WRITE: bw=140MiB/s (147MB/s), 140MiB/s-140MiB/s (147MB/s-147MB/s), io=1024MiB (1074MB), run=7314-7314msec

Disk stats (read/write):
    dm-8: ios=0/367, merge=0/0, ticks=0/0, in_queue=0, util=1.40%, aggrios=4/178, aggrmerge=0/190, aggrticks=2/32, aggrin_queue=34, aggrutil=1.55%
  sdi: ios=4/178, merge=0/190, ticks=2/32, in_queue=34, util=1.55%

4. Kiểm tra hiệu suất Ceph object gateway.

Khi muốn kiểm tra hiệu suất của Ceph object gateway, không có gì tốt hơn swift-bench, đây là công cụ kiểm tra hiệu suất đi kèm với OpenStack Swift. Công cụ swift-bench kiểm tra hiệu suất của cụm Ceph của bạn bằng cách mô phỏng các yêu cầu PUT và GET từ khách hàng và đo lường hiệu suất của chúng.

Bạn có thể cài đặt swift-bench bằng cách sử dụng lệnh pip install swift && pip install swift-bench.

Để sử dụng swift-bench, bạn cần tạo một gateway user và subuser như sau:

shell> sudo radosgw-admin user create --uid="benchmark" --display-name="benchmark"
shell> sudo radosgw-admin subuser create --uid=benchmark --subuser=benchmark:swift --access=full
shell> sudo radosgw-admin key create --subuser=benchmark:swift --key-type=swift --secret=guessme
shell> radosgw-admin user modify --uid=benchmark --max-buckets=0

Tiếp theo bạn tạo một file cấu hình cho swift-bench trên một máy client. Đừng quên cập nhật URL xác thực để ánh xạ vào Ceph object gateway của bạn và nhớ sử dụng thông tin đăng nhập chính xác.

[bench]
auth = http://gateway-node/auth/v1.0
user = benchmark:swift
key = guessme
auth_version = 1.0

Bạn có thể chạy một bài kiểm tra như sau. Sử dụng tham số -c để điều chỉnh số lượng kết nối đồng thời (ví dụ này sử dụng 64) và tham số -s để điều chỉnh kích thước của đối tượng đang được ghi (ví dụ này sử dụng đối tượng 4K). Các tham số -n và -g kiểm soát số lượng đối tượng PUT và GET tương ứng.

shell> swift-bench -c 64 -s 4096 -n 1000 -g 100 /tmp/swift.conf

Mặc dù swift-bench đo lường hiệu suất dưới dạng số đối tượng/giây, nhưng bạn có thể dễ dàng chuyển đổi thành MB/giây bằng cách nhân với kích thước của mỗi đối tượng. Tuy nhiên, bạn nên cẩn trọng khi so sánh trực tiếp với các thống kê hiệu suất ổ đĩa cơ bản mà bạn đã kiếm tra và thu được kết quả trước đó vì một số yếu tố khác cũng ảnh hưởng đến các thống kê này, ví dụ như:

The level of replication (and latency overhead): Trong Ceph, dữ liệu thường được rebalance sao chép để đảm bảo sự đồng nhất và đảm bảo rằng nếu một OSD (Object Storage Daemon) hoặc thiết bị lưu trữ gặp sự cố, dữ liệu vẫn có sẵn từ các bản sao khác. Tuy nhiên, quá trình rebalance có thể gây lengacy, đặc biệt là khi cần phải lengacy dựa vào network.

Full data journal writes: Việc ghi logs đầy đủ vào nhật ký đôi khi là cần thiết để đảm bảo tính nhất quán của hệ thống. Tuy nhiên, điều này có thể tiêu tốn hiệu năng về hiệu suất do phải chờ đến khi dữ liệu được xác nhận đã được ghi vào nhật ký trước khi thực hiện các thao tác tiếp theo. Trong một số tình huống, việc tổng hợp dữ liệu nhật ký có thể giảm bớt tiêu tốn hiệu năng bằng cách ghi một lượng lớn dữ liệu vào nhật ký một lần thay vì từng phần riêng lẻ.

Fsync on the OSDs to guarantee data safety: Fsync là một hệ thống gọi để đảm bảo rằng dữ liệu đã được ghi vào ổ đĩa vật lý. Trong Ceph, việc sử dụng fsync đảm bảo an toàn của dữ liệu, nhưng điều này có thể làm giảm hiệu suất của hệ thống vì cần phải chờ đến khi dữ liệu được đồng bộ hóa trước khi tiếp tục.

Metadata overhead for keeping data stored in RADOS: Trong hệ thống lưu trữ Ceph, metadata là thông tin mô tả về dữ liệu như tên, kích thước, bản đồ dữ liệu v.v. Quản lý metadata cần thời gian và tài nguyên đêr quản lý, đặc biệt là khi lưu trữ nhiều đối tượng nhỏ và khi có nhiều thao tác metadata.

Latency overhead (network, ceph, etc) makes readahead more important: Độ trễ, tức thời gian chờ giữa khi một yêu cầu được gửi và khi nhận được phản hồi, có thể phát sinh từ nhiều nguồn như đường truyền mạng, các thành phần Ceph (như OSD), v.v. Trong môi trường Ceph, độ trễ trở thành yếu tố quan trọng đặc biệt khi thực hiện các thao tác đọc, vì mỗi thao tác đọc sẽ phải chờ đợi thời gian độ trễ trước khi nhận được dữ liệu.

Tips: Khi đo lường Ceph object gateway, không có quy tắc cứng nhắc nào bạn có thể sử dụng để dễ dàng cải thiện hiệu suất. Ở một số trường hợp, các kỹ sư Ceph đã có thể đạt được hiệu suất tốt hơn so với thông số hiệu suất đã đưa ra do thiết bị trong hệ thống và bằng kinh nghiệm của họ, trong khi ở các trường hợp khác (ví dụ trường hợp của tôi và của bạn) hiệu suất Ceph object gateway có thể thấp hơn hiệu suất ổ đĩa do latency, fsync và tài nguyên quản lý metadata.

5. Kết luận.

Có nhiều công cụ có sẵn để đánh giá hiệu suất của một cụm Ceph ở các cấp độ khác nhau: disk, network, cluster, devices,…. Bạn nên có một cái nhìn sâu sắc hơn về cách tiếp cận quá trình đánh giá hiệu suất với cụm của bạn.

Tài liệu tham khảo https://tracker.ceph.com/projects/ceph/wiki/Benchmark_Ceph_Cluster_Performance.

Chúc may mắn!

LEAVE A REPLY

Please enter your comment!
Please enter your name here

4,956FansLike
256FollowersFollow
223SubscribersSubscribe
spot_img

Related Stories