Hubungan antara disk IOPS dan sar tps

13

Saya mencoba memperkirakan persyaratan IOPS aplikasi saya yang berjalan pada CentOS 6.2 bit. Saya mulai melakukan beberapa pengukuran pada mesin dengan disk SATA dan saya cukup bingung perbedaan antara IOPS dan tps yang diukur oleh sar.

Menurut wikipedia disk SATA harus melakukan 75-100 IOPS. utilitas ioping tampaknya mengkonfirmasi ini untuk uji akses acak:

# ./ioping -R /dev/sda
--- /dev/sda (device 931.0 Gb) ioping statistics ---
279 requests completed in 3.0 s, 92 iops, 371.3 kb/s
min/avg/max/mdev = 2.7 ms / 10.8 ms / 130.8 ms / 7.9 ms

Tetapi nilai tps yang dihasilkan oleh sar jauh lebih tinggi (/ dev / sda):

# iostat 1
avg-cpu:  %user   %nice %system %iowait  %steal   %idle
       0.17    0.00    2.02   14.86    0.00   82.96

Device:            tps   Blk_read/s   Blk_wrtn/s   Blk_read   Blk_wrtn
sda             559.00         0.00    142600.00          0     142600
dm-0          18433.00         0.00    147464.00          0     147464
dm-1              0.00         0.00         0.00          0          0
dm-2              0.00         0.00         0.00          0          0

Tidak masalah jika beban ini berurutan (dd dengan berbagai ukuran blok) atau akses acak (ioping), nilainya masih sama. Saya pikir tps sebenarnya adalah IOPS dan saya harapkan turun dengan potongan yang lebih besar ditransfer.

Jadi apa sebenarnya nilai tps artinya? Dan bagaimana hubungannya dengan IOPS?

pistol
sumber
2
Saya yakin Anda melihat IOPS lebih tinggi dalam nilai TPS karena cache disk.
ceejayoz
1
Ok, saya mencoba file 10GB melalui dd dengan blok 256kB untuk benar-benar mengisi cache dan setelah ~ 90 detik tps turun menjadi ~ 200, jadi mungkin Anda benar. Tetapi masih 80 dan 200 adalah perbedaan yang cukup ... Apakah mungkin membaca dan menulis IOPS berbeda? Dan apakah ada cara untuk mengetahui IOPS yang diperlukan dari nilai ini?
pystole
1
Bisakah Anda jelaskan mengapa Anda mengejar IOPS? baca dan tulis adalah sepasang sepatu yang berbeda yang bisa dilemparkan ke panci yang sama di sini.
Nils
Alasannya adalah saya perlu menggambarkan persyaratan HW minimum. Saya memiliki server yang menerima data melalui jaringan (kami dapat mengasumsikan bitrate konstan di sini) dan menulis data yang diterima ke disk. Data ditulis ke file secara berurutan tetapi mungkin ada ratusan (misalnya 800) di antaranya secara paralel. Saya telah menemukan bahwa ketika jumlah klien mencapai titik tertentu saya mulai mendapatkan iowaits besar. Throughput disk aktual yang dapat saya capai adalah sekitar 25MB / s yang cukup rendah, lebih sedikit klien dengan bitrate lebih tinggi yang dapat melakukan 35MB / s, sekuensial murni sekitar 130MB / s. Jadi saya kira IOPS adalah yang penting di sini ...
pystole

Jawaban:

6

Transaksi adalah perintah-IO tunggal (ambil blok / blok tulis) yang ditulis ke disk-RAW (dalam contoh Anda dm-0). Linux-kernel mencoba untuk memesan perintah-perintah itu ke dalam urutan yang lebih baik atau mencoba untuk mengompresnya menjadi perintah-perintah yang lebih efisien (seperti: dapatkan dua blok sekaligus alih-alih mendapatkan satu blok dan mendapatkan blok lain tepat setelah yang ini). Ini adalah transaksi yang keluar ke disk-controller (tps for sda).

Pengendali yang baik migth memiliki logika sendiri yang mengurangi jumlah transaksi nyata lebih jauh.

Suatu transaksi mungkin perintah SCSI "tulis 2 GB ke crontoller 1 target 2 lun 3 mulai dari sektor 22). Seperti yang Anda lihat, ini tidak dapat dihubungkan langsung dengan angka-angka throughput.

Apa yang Anda kejar adalah tingkat penulisan berkelanjutan. Anda memiliki beberapa faktor pembatas di sini:

  • koneksi klien: Jika jaringan Gigabit, Anda tidak akan pernah memiliki lebih dari 100 MB / s input
  • disk-controller: Jika ini adalah pengontrol 3 Gb, Anda tidak akan pernah memiliki lebih dari 300 MB / s throughput
  • disk: Cari nilai pabrikan untuk kinerja penulisan berkelanjutan
  • Filesystem: Ada sedikit overhead karena OS perlu memproses data - menguji bahwa dalam RAM-disk ...

Dugaan saya untuk sistem Anda adalah: Dapatkan pengontrol serangan perangkat keras yang baik yang mampu melakukan serangan 10 atau 5 dan dapatkan setidaknya 6 disk cepat (15k).

Untuk penggunaan profesional gunakan SAS, bukan SATA.

Nils
sumber
Ok, Anda benar, IOPS tidak masuk akal untuk menulis karena ada banyak cache, pemesanan ulang, dan penggabungan yang terlibat. Menutup ... Terima kasih.
pystole
5

Perlu diketahui juga bahwa TPSnilai mewakili baca dan tulis, Anda dapat menggunakan -xsakelar untuk tampilan luas di mana baca dan tulis dipisahkan (r / s = baca IOPS, w / s = tulis IOPS):

Device:         rrqm/s   wrqm/s     r/s     w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
vda               0.07    24.65    0.30   18.95    30.65   330.22    18.74     0.07    3.61   0.98   1.89
HTF
sumber
Ya kamu benar. Tetapi dalam kasus saya ada hampir 100% dari menulis, membaca hampir tidak ada.
pystole