캐시 최적화

캐시 최적화

HDD 3개와 SSD 1개가 있고 모든 드라이브를 bcache에 성공적으로 마운트했습니다.

pavs@VAS:~$ df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda1       132G   35G   90G  28% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            3.9G  8.0K  3.9G   1% /dev
tmpfs           786M  2.3M  784M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            3.9G  152K  3.9G   1% /run/shm
none            100M   52K  100M   1% /run/user
/dev/bcache1    2.7T  2.1T  508G  81% /var/www/html/directlink/FTP1
/dev/bcache2    1.8T  614G  1.2T  36% /var/www/html/directlink/FTP2
/dev/bcache0    1.8T  188G  1.6T  11% /var/www/html/directlink/FTP3
/dev/sdf1       367G  284G   65G  82% /media/pavs/e93284df-e52e-4a5d-a9e1-323a388b332f

캐시되는 드라이브는 운영 체제 드라이브가 아닙니다. 대용량 파일이 많은 하드 드라이브 3개, 평균 파일 크기 범위는 600MB~2GB, 최소 파일 크기는 500MB, 최대 파일 크기는 10GB입니다.

이러한 파일은 Apache 웹 서버를 통해 지속적으로 다운로드됩니다. 그러나 자주 액세스하는 파일에서도 IO 속도는 약간 또는 전혀 향상되지 않았습니다. bcache가 어떤 유형의 캐싱 공식을 사용하는지, 또는 최대 캐시 성능을 위해 조정할 수 있는지 모르겠습니다. 이상적으로는 자주 액세스하는 파일이 해당 파일에 대한 요청이 없을 때까지 적어도 하루 동안 캐시되어 있는지 확인하고 싶습니다. 이 수준의 세분화된 캐시 조정이 가능한지 모르겠습니다. 읽기 성능에만 관심이 있고 SSD 드라이브의 최대 활용도를 확인하고 싶습니다.


편집 : 따르면이것. bcache는 순차 캐싱을 "저해"합니다. 이는 제가 올바르게 이해했다면 대부분의 파일이 대용량 순차 파일이기 때문에 문제가 됩니다. 기본 순차 컷오프는 4.0M이므로 파일이 캐시되지 않을 수 있으므로(모르겠습니다) 각 백업 드라이브에 대해 다음을 수행하여 컷오프를 비활성화했습니다.

echo 0 > /sys/block/bcache0/bcache/sequential_cutoff

이제 실제로 성능이 향상되는지 기다려야 합니다.


bcache 통계에 ​​따르면 세 드라이브가 모두 캐시됩니다.

캐시 0

pavs@VAS:~$ tail /sys/block/bcache0/bcache/stats_total/*
==> /sys/block/bcache0/bcache/stats_total/bypassed <== 
461G

==> /sys/block/bcache0/bcache/stats_total/cache_bypass_hits <== 
9565207

==> /sys/block/bcache0/bcache/stats_total/cache_bypass_misses <== 
0

==> /sys/block/bcache0/bcache/stats_total/cache_hit_ratio <== 
63

==> /sys/block/bcache0/bcache/stats_total/cache_hits <== 
3003399

==> /sys/block/bcache0/bcache/stats_total/cache_miss_collisions <== 
659

==> /sys/block/bcache0/bcache/stats_total/cache_misses <== 
1698297

==> /sys/block/bcache0/bcache/stats_total/cache_readaheads <== 
0

캐시 1

pavs@VAS:~$ tail /sys/block/bcache1/bcache/stats_total/*
==> /sys/block/bcache1/bcache/stats_total/bypassed <==
396G

==> /sys/block/bcache1/bcache/stats_total/cache_bypass_hits <==
9466833

==> /sys/block/bcache1/bcache/stats_total/cache_bypass_misses <==
0

==> /sys/block/bcache1/bcache/stats_total/cache_hit_ratio <==
24

==> /sys/block/bcache1/bcache/stats_total/cache_hits <==
749032

==> /sys/block/bcache1/bcache/stats_total/cache_miss_collisions <==
624

==> /sys/block/bcache1/bcache/stats_total/cache_misses <==
2358913

==> /sys/block/bcache1/bcache/stats_total/cache_readaheads <==
0

캐시 2

pavs@VAS:~$ tail /sys/block/bcache2/bcache/stats_total/*
==> /sys/block/bcache2/bcache/stats_total/bypassed <==
480G

==> /sys/block/bcache2/bcache/stats_total/cache_bypass_hits <==
9202709

==> /sys/block/bcache2/bcache/stats_total/cache_bypass_misses <==
0

==> /sys/block/bcache2/bcache/stats_total/cache_hit_ratio <==
58

==> /sys/block/bcache2/bcache/stats_total/cache_hits <==
4821439

==> /sys/block/bcache2/bcache/stats_total/cache_miss_collisions <==
1098

==> /sys/block/bcache2/bcache/stats_total/cache_misses <==
3392411

==> /sys/block/bcache2/bcache/stats_total/cache_readaheads <==
0

답변1

congested_read_threshold_uscongested_write_threshold_usbcache 문서를 설정하고 따라 동일한 문제를 해결했습니다 .

  • 트래픽이 여전히 스핀들로 이동합니다./캐시 누락이 계속 발생합니다.

    실제 세계에서는 SSD가 항상 디스크 속도를 따라잡는 것은 아닙니다. 특히 느린 SSD, 하나의 SSD로 캐시된 많은 디스크 또는 대부분 순차 IO의 경우 더욱 그렇습니다. 따라서 SSD에 병목 현상이 발생하고 모든 것이 느려지는 것을 방지하고 싶습니다.

    bcache가 캐시 장치의 대기 시간을 추적하고 대기 시간이 임계값을 초과할 때 점차적으로 트래픽을 조절하는 것을 방지합니다(순차 우회를 줄여 이를 수행함).

    원하는 경우 임계값을 0으로 설정하여 이 기능을 비활성화할 수 있습니다.

    # echo 0 > /sys/fs/bcache/<cache set>/congested_read_threshold_us

    # echo 0 > /sys/fs/bcache/<cache set>/congested_write_threshold_us

    읽기의 기본 시간은 2000us(2밀리초)이고 쓰기의 기본 시간은 20000입니다.

이제 모든 디스크 IO가 내 SSD(sde)로 전송됩니다.

Device:    wrqm/s     r/s     w/s    rkB/s    wkB/s await svctm  %util
sdb          0.00    0.00    0.30     0.00     0.00  0.00  0.00   0.00
sdd          0.00    0.10    0.30     0.80     0.00  3.00  3.00   0.12
sdc          0.00    2.20    0.30    26.00     0.00  1.76  1.76   0.44
sda          0.00    0.20    0.20     0.80     0.00  8.00 13.00   0.52
sde        293.20   81.70  232.70  1129.20 58220.00 21.05  3.18 100.00
md1          0.00    2.50    0.30    27.60     0.00  0.00  0.00   0.00
md0          0.00    0.00    0.00     0.00     0.00  0.00  0.00   0.00
bcache0      0.00   83.00  402.40  1156.80 28994.80 31.70  2.06  99.92

관련 정보