Apakah mungkin untuk melihat di Linux berapa banyak permintaan baca dan tulis dari ruang pengguna yang akhirnya menyebabkan hit dan miss cache untuk perangkat blok?
Anda dapat mengembangkan skrip SystemTap Anda sendiri . Anda perlu memperhitungkan dua subsistem berikut:
Pengembangan SystemTap membutuhkan waktu untuk dipelajari. Jika Anda adalah pengembang moderat dan memiliki pengetahuan yang baik di Linux, Anda harus melakukannya dalam 3-4 hari. Ya, itu butuh waktu untuk belajar, tetapi Anda akan sangat senang dengan hasilnya - SystemTap memberi Anda kesempatan untuk (dengan aman) meletakkan probe di hampir semua tempat di kernel Linux.
Perhatikan bahwa kernel Anda harus memiliki dukungan untuk memuat dan membongkar modul kernel. Kebanyakan kernel saat ini mendukung hal ini. Anda juga harus menginstal simbol debug untuk kernel Anda. Untuk sistem Ubuntu saya, ini semudah mengunduh beberapa ratus MB file deb, yang dikompilasi oleh tim pengembangan kernel Ubuntu untuk saya. Ini dijelaskan di halaman SystemtapOnUbuntu Wiki, misalnya.
PS Ambil pendekatan SystemTap hanya jika Anda tidak memiliki solusi lain, karena ini merupakan kerangka kerja yang sama sekali baru yang harus Anda pelajari, dan itu membutuhkan waktu / uang dan kadang-kadang frustrasi.
Saya pergi ke depan dan menulis naskah untuk ini. Ada satu di systemtap wiki, tetapi tampaknya itu tidak benar. Dalam pengujian dasar, ini terlihat cukup akurat tetapi YMMV.
sumber
semantic error: unable to find member 'bi_size' for struct bio (alternatives: bi_next bi_bdev bi_flags bi_rw bi_iter bi_phys_segments bi_seg_front_size bi_seg_back_size bi_remaining bi_end_io bi_private bi_ioc bi_css bi_integrity bi_vcnt bi_max_vecs bi_cnt bi_io_vec bi_pool bi_inline_vecs): operator '->' at /usr/share/systemtap/tapset/linux/ioblock.stp:113:20 source: size = $bio->bi_size ^ Pass 2: analysis failed. [man error::pass2]
dapatkah Anda membantu?/ proc / slabinfo adalah awal yang baik, tetapi tidak memberi Anda cukup informasi yang Anda cari (jangan tertipu oleh persentase hit / miss pada sistem dengan beberapa core dan statistik diaktifkan; itu adalah sesuatu yang lain). Sejauh yang saya tahu, tidak ada cara untuk menarik informasi tertentu dari kernel, meskipun seharusnya tidak terlalu sulit untuk menulis sedikit kode untuk dilakukan.
Edit: http://www.kernel.org/doc/man-pages/online/pages/man5/slabinfo.5.html
sumber
Sekarang ada utilitas cachestat dari paket perf-tools .
Penulis juga mencantumkan beberapa (mungkin lebih kasar) alternatif yang digunakan orang:
sumber
Jika Anda tertarik pada rasio hit / miss IO dari proses tertentu, pendekatan sederhana namun sangat efektif adalah membaca
/proc/<pid>/io
file.Di sini Anda akan menemukan 4 nilai utama:
rchar
: total jumlah byte yang dibaca dari sudut pandang aplikasi (yaitu: tanpa perbedaan yang dibuat antara read puas dari penyimpanan fisik daripada dari cache)wchar
: seperti di atas, tetapi tentang byte yang ditulisread_bytes
: byte benar-benar dibaca dari subsistem penyimpananwrite_bytes
: byte benar-benar ditulis ke subsistem penyimpananKatakanlah suatu proses memiliki nilai berikut:
Rasio cache cache baca (dalam byte) adalah
100*200000/1000000 = 20%
, dan rasio hit adalah100-20 = 80%
Namun ada satu hal yang menarik:
rchar
nilainya mencakup tty IO, jadi untuk proses yang membaca / menulis banyak dari / ke pipa perhitungan di atas akan miring, melaporkan rasio hit yang lebih tinggi daripada yang efektif.sumber