GNU/Linux >> Belajar Linux >  >> Linux

Apakah mungkin untuk membuat daftar file yang di-cache?

Solusi 1:

Yah, ada adalah cara mudah untuk melihat cache halaman kernel jika Anda memiliki ftools - "fincore" memberi Anda beberapa informasi ringkasan tentang halaman file apa yang merupakan isi dari cache.

Anda perlu memberikan daftar nama file untuk memeriksa keberadaannya di cache halaman. Ini karena informasi yang disimpan dalam tabel cache halaman kernel hanya berisi referensi blok data dan bukan nama file. fincore akan menyelesaikan blok data file yang diberikan melalui data inode dan mencari entri masing-masing di tabel cache halaman.

Tidak ada mekanisme pencarian yang efisien untuk melakukan sebaliknya - mendapatkan nama file milik blok data akan memerlukan membaca semua inode dan blok tidak langsung pada sistem file. Jika Anda perlu mengetahui tentang setiap blok file yang disimpan di cache halaman, Anda perlu memberikan daftar semua file di sistem file Anda ke fincore . Namun hal itu sekali lagi kemungkinan merusak pengukuran karena sejumlah besar data akan dibaca melintasi direktori dan mendapatkan semua inode dan blok tidak langsung - memasukkannya ke dalam cache halaman dan menghapus data cache halaman yang Anda coba periksa.

Solusi 2:

Anda dapat menggunakan utilitas vmtouch untuk melihat apakah file atau direktori bernama ada di cache. Anda juga dapat menggunakan alat tersebut untuk memaksa item ke dalam cache atau menguncinya ke dalam cache.

[[email protected] ~]# vmtouch -v /usr/local/var/orca/procallator.cfg
/usr/local/var/orca/procallator.cfg
[     ] 0/5

           Files: 1
     Directories: 0
  Resident Pages: 0/5  0/20K  0%
         Elapsed: 0.000215 seconds

Sekarang saya bisa "menyentuh" ​​ke dalam cache.

[[email protected] ~]# vmtouch -vt /usr/local/var/orca/procallator.cfg
/usr/local/var/orca/procallator.cfg
[OOOOO] 5/5

           Files: 1
     Directories: 0
   Touched Pages: 5 (20K)
         Elapsed: 0.005313 seconds

Sekarang untuk melihat berapa banyak yang di-cache...

[[email protected] ~]# vmtouch -v /usr/local/var/orca/procallator.cfg
/usr/local/var/orca/procallator.cfg
[OOOOO] 5/5

           Files: 1
     Directories: 0
  Resident Pages: 5/5  20K/20K  100%
         Elapsed: 0.000241 seconds

Solusi 3:

Saya menulis skrip Shell yang sangat sederhana untuk menampilkan file yang di-cache dengan menggunakan linux-fincore. Karena cache adalah salah satu bagian dari memori, kode saya adalah menemukan 10 proses penggunaan RSZ teratas, dan menggunakan lsof untuk mengetahui file yang diproses dibuka, terakhir gunakan linux-fincore untuk mengetahui apakah file-file ini di-cache atau tidak.

Harap perbaiki saya jika saya salah berpikir.

#!/bin/bash
#Author: Shanker
#Time: 2016/06/08

#set -e
#set -u
#you have to install linux-fincore
if [ ! -f /usr/local/bin/linux-fincore ]
then
    echo "You haven't installed linux-fincore yet"
    exit
fi

#find the top 10 processs' cache file
ps -e -o pid,rss|sort -nk2 -r|head -10 |awk '{print $1}'>/tmp/cache.pids
#find all the processs' cache file
#ps -e -o pid>/tmp/cache.pids

if [ -f /tmp/cache.files ]
then
    echo "the cache.files is exist, removing now "
    rm -f /tmp/cache.files
fi

while read line
do
    lsof -p $line 2>/dev/null|awk '{print $9}' >>/tmp/cache.files 
done</tmp/cache.pids


if [ -f /tmp/cache.fincore ]
then
    echo "the cache.fincore is exist, removing now"

    rm -f /tmp/cache.fincore
fi

for i in `cat /tmp/cache.files`
do

    if [ -f $i ]
    then

        echo $i >>/tmp/cache.fincore
    fi
done

linux-fincore -s  `cat /tmp/cache.fincore`

rm -f /tmp/cache.{pids,files,fincore}

Solusi 4:

Anda juga dapat menggunakan pcsstat (Stat Cache Halaman)https://github.com/tobert/pcstat

Semoga ini bisa membantu seseorang.

Solusi 5:

Saya menulis skrip berikut yang mencetak semua file dan status cache mereka menggunakan perintah pcsstat. Ini adalah skrip mandiri untuk sistem linux x86_64. Itu mengunduh pcstat jika diperlukan .

Argumen pertama adalah lokasi sistem file untuk dianalisis dan argumen kedua adalah jumlah hasil (Top N dengan jumlah halaman dalam cache).

#!/bin/bash
#Exit if a variable is not set
set -o nounset
#Exit on first error
set -o errexit

if [ $# -eq 0 ]; then
echo "Usage: $0 <root-dir> [number-of-results]"
echo
echo "Example $0 /var 10"
echo "will show top 10 files in /var which are loaded in cache"
exit
fi

ROOT=$1
#Number of results to show
HOW_MANY=50
[ -n ${2-} ] && HOW_MANY=$2


SCRIPT_DIR="$( cd -P "$( dirname "$0" )" && pwd )"
if [ ! -x $SCRIPT_DIR/pcstat ]; then
(
cd $SCRIPT_DIR
rm -f pcstat
curl -L -o pcstat https://github.com/tobert/pcstat/raw/2014-05-02-01/pcstat.x86_64
chmod +x pcstat
)
fi

FIND="find ${ROOT} -not ( -path /proc -prune ) -not ( -path /sys -prune ) -type f -size +0c -print0"
$FIND |  xargs -0 ${SCRIPT_DIR}/pcstat -terse -nohdr | sort --field-separator=, -r -n -k 6 | head -n ${HOW_MANY}

Linux
  1. Daftar File yang Diakses Oleh Program?

  2. Bagaimana Tanda Kurung Diinterpretasikan Pada Baris Perintah?

  3. Perintah mana yang digunakan untuk mengurutkan daftar file/folder berdasarkan waktu?

  1. Gunakan terminal Linux untuk melihat file apa yang ada di komputer Anda

  2. Pengarsipan tar yang mengambil input dari daftar file

  3. Cara mendaftar Pohon Perangkat kernel

  1. [Linux]:Cara menyalin file/direktori tanpa menimpa file yang sudah disalin!

  2. Linux – Bagaimana Mengosongkan Buffer Dan Cache Pada Sistem Linux?

  3. Alat Untuk Mendapatkan Garis Dalam Satu File Yang Tidak Di File Lain?