[unix] 슬래브 객체가 자동으로 재생되지 않는 이유

업데이트 : 4.9에서 더 이상이 문제가 발생하지 않습니다. * 언제 수정되었는지 확실하지 않습니다.

전체 시스템 백업 후 매일 echo 2 > /proc/sys/vm/drop_caches교정 가능한 슬랩 개체를 해제하기 위해 실행할 때까지 다양한 프로그램이 읽기 오류와 함께 실패 합니다.

예를 들어, sudo apt-get update백업 후의 결과는 다음과 같습니다.

$ sudo apt-get update
Hit http://ftp.ca.debian.org unstable InRelease
Hit http://ftp.ca.debian.org experimental InRelease
Ign http://dl.google.com stable InRelease
Get:1 http://ftp.ca.debian.org unstable/contrib amd64 Packages/DiffIndex [7,819 B]
Hit http://dl.google.com stable Release.gpg
Hit http://ppa.launchpad.net wily InRelease
Get:2 http://ftp.ca.debian.org unstable/non-free amd64 Packages/DiffIndex [6,577 B]
Hit http://dl.google.com stable Release
Hit http://ppa.launchpad.net wily InRelease
Get:3 http://ftp.ca.debian.org unstable/main amd64 Packages/DiffIndex [7,876 B]
Get:4 http://ftp.ca.debian.org unstable/contrib i386 Packages/DiffIndex [7,819 B]
Get:5 http://ppa.launchpad.net wily/main amd64 Packages [4,559 B]
Get:6 http://ftp.ca.debian.org unstable/non-free i386 Packages/DiffIndex [6,715 B]
Get:7 http://ppa.launchpad.net wily/main i386 Packages [4,608 B]
Get:8 http://ftp.ca.debian.org unstable/main i386 Packages/DiffIndex [7,876 B]
Hit http://dl.google.com stable/main amd64 Packages
Get:9 http://ftp.ca.debian.org unstable/contrib Translation-en/DiffIndex [2,161 B]
Get:10 http://ppa.launchpad.net wily/main Translation-en [1,663 B]
Hit http://dl.google.com stable/main i386 Packages
E: Read error - read (5: Input/output error)

gulp / node.js와 함께 또 다른 샘플 오류

$ gulp watch
fs.js:651
  var r = binding.read(fd, buffer, offset, length, position);
                  ^

Error: EIO: i/o error, read
    at Error (native)
    at Object.fs.readSync (fs.js:651:19)
    at Object.fs.readFileSync (fs.js:467:24)
    at Object.Module._extensions..js (module.js:431:20)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:313:12)
    at Module.require (module.js:366:17)
    at require (module.js:385:17)
    at Object.<anonymous> (/usr/local/lib/node_modules/gulp/node_modules/liftoff/node_modules/findup-sync/lib/findup-sync.js:15:12)
    at Module._compile (module.js:425:26)

다른 프로그램도 읽기 오류와 함께 실패하지만 apt-get 및 gulp / node.js가 아닙니다.

슬랩 탑 출력 :

$ sudo slabtop -o
 Active / Total Objects (% used)    : 7244650 / 7322302 (98.9%)
 Active / Total Slabs (% used)      : 882626 / 882697 (100.0%)
 Active / Total Caches (% used)     : 78 / 122 (63.9%)
 Active / Total Size (% used)       : 3423174.16K / 3434416.86K (99.7%)
 Minimum / Average / Maximum Object : 0.02K / 0.47K / 4096.00K

  OBJS ACTIVE  USE OBJ SIZE  SLABS OBJ/SLAB CACHE SIZE NAME
2419584 2418888  99%    0.97K 604896        4   2419584K btrfs_inode
2249163 2249125  99%    0.19K 107103       21    428412K dentry
1271127 1270067  99%    0.30K  97779       13    391116K btrfs_delayed_node
306243 299649  97%    0.06K   4861       63     19444K kmalloc-64
241556 230494  95%    0.27K  17254       14     69016K btrfs_extent_buffer
215068 212777  98%    0.14K   7681       28     30724K btrfs_path
186102 185989  99%    0.56K  26586        7    106344K radix_tree_node
174650 144422  82%    0.08K   3493       50     13972K btrfs_extent_state
 37170  34869  93%    0.06K    590       63      2360K btrfs_free_space
 37149  33473  90%    0.19K   1769       21      7076K kmalloc-192
 32891  32382  98%    0.12K   1061       31      4244K kmalloc-96
 26536  19327  72%    0.03K    214      124       856K kmalloc-32
 24123  24015  99%    0.12K    731       33      2924K kernfs_node_cache
 19656  19631  99%    0.07K    351       56      1404K Acpi-ParseExt
 13728  11523  83%    0.25K    858       16      3432K kmalloc-256
 11648  10783  92%    0.55K   1664        7      6656K inode_cache
 11160   7283  65%    0.12K    360       31      1440K kmalloc-node
 10696   9398  87%    0.07K    191       56       764K anon_vma
  7059   6714  95%    0.10K    181       39       724K blkdev_ioc
  3735   3615  96%    0.05K     45       83       180K ftrace_event_field
  3696   3574  96%    0.50K    462        8      1848K kmalloc-512
  3018   2871  95%    0.60K    503        6      2012K proc_inode_cache
  1584   1503  94%    0.04K     16       99        64K Acpi-Namespace
  1464   1418  96%    0.63K    244        6       976K shmem_inode_cache
  1426   1348  94%    0.09K     31       46       124K trace_event_file
  1400   1382  98%    1.00K    350        4      1400K kmalloc-1024
  1311   1248  95%    4.00K   1311        1      5244K kmalloc-4096
  1074    985  91%    0.62K    179        6       716K sock_inode_cache
   852    806  94%    0.88K    213        4       852K RAW
   726    718  98%    2.94K    363        2      2904K task_struct
   612    608  99%    2.00K    306        2      1224K kmalloc-2048
   462    447  96%    2.05K    154        3      1232K idr_layer_cache
   462    210  45%    0.18K     21       22        84K btrfs_trans_handle
   429    157  36%    0.10K     11       39        44K buffer_head
   384    181  47%    0.31K     32       12       128K bio-1
   355    217  61%    0.05K      5       71        20K file_lock_ctx
   350    307  87%    1.12K     50        7       400K signal_cache
   327    307  93%    2.06K    109        3       872K sighand_cache
   289    211  73%    0.23K     17       17        68K cfq_queue
   280    156  55%    0.38K     28       10       112K mnt_cache

무료 출력 :

$ sudo free -h
              total        used        free      shared  buff/cache   available
Mem:            15G        2.3G        292M         28M         13G         13G
Swap:          7.5G        4.9M        7.4G

실행 echo 2 > /proc/sys/vm/drop_caches후 오류가 더 이상 나타나지 않습니다. apt-get 및 기타 프로그램이 정상적으로 실행됩니다.

슬랩 탑 출력 :

$ sudo slabtop -o
 Active / Total Objects (% used)    : 586239 / 777567 (75.4%)
 Active / Total Slabs (% used)      : 57059 / 57123 (99.9%)
 Active / Total Caches (% used)     : 79 / 122 (64.8%)
 Active / Total Size (% used)       : 180630.05K / 229256.91K (78.8%)
 Minimum / Average / Maximum Object : 0.02K / 0.29K / 4096.00K

  OBJS ACTIVE  USE OBJ SIZE  SLABS OBJ/SLAB CACHE SIZE NAME
241556 230586  95%    0.27K  17254       14     69016K btrfs_extent_buffer
146251 100390  68%    0.56K  20893        7     83572K radix_tree_node
 50967  26035  51%    0.06K    809       63      3236K kmalloc-64
 37170  34866  93%    0.06K    590       63      2360K btrfs_free_space
 37149  33440  90%    0.19K   1769       21      7076K kmalloc-192
 37016   7054  19%    0.14K   1322       28      5288K btrfs_path
 35889  13681  38%    0.19K   1709       21      6836K dentry
 27700   1805   6%    0.08K    554       50      2216K btrfs_extent_state
 26412  19384  73%    0.03K    213      124       852K kmalloc-32
 24123  24067  99%    0.12K    731       33      2924K kernfs_node_cache
 19656  19637  99%    0.07K    351       56      1404K Acpi-ParseExt
 13712  11542  84%    0.25K    857       16      3428K kmalloc-256
 12152   8791  72%    0.97K   3038        4     12152K btrfs_inode
 10696   9414  88%    0.07K    191       56       764K anon_vma
  9632   8948  92%    0.55K   1376        7      5504K inode_cache
  8742   4845  55%    0.12K    282       31      1128K kmalloc-node
  7059   6794  96%    0.10K    181       39       724K blkdev_ioc
  4867   2606  53%    0.12K    157       31       628K kmalloc-96
  3735   3710  99%    0.05K     45       83       180K ftrace_event_field
  3688   3525  95%    0.50K    461        8      1844K kmalloc-512
  1794    498  27%    0.30K    138       13       552K btrfs_delayed_node
  1584   1521  96%    0.04K     16       99        64K Acpi-Namespace
  1464   1418  96%    0.63K    244        6       976K shmem_inode_cache
  1426   1348  94%    0.09K     31       46       124K trace_event_file
  1420   1357  95%    1.00K    355        4      1420K kmalloc-1024
  1310   1252  95%    4.00K   1310        1      5240K kmalloc-4096
  1074   1016  94%    0.62K    179        6       716K sock_inode_cache
   852    807  94%    0.88K    213        4       852K RAW
   726    713  98%    2.94K    363        2      2904K task_struct
   648    254  39%    0.60K    108        6       432K proc_inode_cache
   636    635  99%    2.00K    318        2      1272K kmalloc-2048
   506    240  47%    0.18K     23       22        92K btrfs_trans_handle
   468    190  40%    0.10K     12       39        48K buffer_head
   462    447  96%    2.05K    154        3      1232K idr_layer_cache
   408    250  61%    0.31K     34       12       136K bio-1
   355    161  45%    0.05K      5       71        20K file_lock_ctx
   350    307  87%    1.12K     50        7       400K signal_cache
   327    307  93%    2.06K    109        3       872K sighand_cache
   300    286  95%    0.38K     30       10       120K mnt_cache
   297     85  28%    0.04K      3       99        12K btrfs_delayed_extent_op

무료 출력 :

$ sudo free -h
              total        used        free      shared  buff/cache   available
Mem:            15G        2.3G        6.1G         28M        7.3G         13G
Swap:          7.5G        4.8M        7.4G

btrfs에서 Debian Sid를 실행하고 있지만 ext4와 동일한 문제가 발생했기 때문에 파일 시스템 관련 문제라고 생각하지 않습니다.

$ uname -v
#1 SMP Debian 4.2.6-1 (2015-11-10)

또한 vfs_cache_pressure를 높은 값으로 설정하려고했습니다.

vm.vfs_cache_pressure=[ 100 | 1000 | 100000 ]

100000에서 읽기 오류가 줄어들지 만 CPU 사용량이 증가하고 시스템 응답 성이 끔찍해 지므로 대체 솔루션을 찾고 있습니다.

나는 echo 2 > /proc/sys/vm/drop_cachescron 작업을 고수 할 수는 있지만 문제를 해결하지는 못하고 해결 방법입니다.

여기에 dmesg



답변

kernel/mm/slab.c느린 캐시 파괴를 해결하는 최근 (jan, feb 2017) 패치가 많이 있습니다. 경우에 따라 캐시 제거 작업이 여러 시간 동안 실행될 수 있습니다. 작업 자체도 성능이 비쌌습니다.

디스크 I / O 작업이 많은 경우 높은 수치를 보는 것은 좋지 않습니다. 그럼에도 불구하고, 당신의 수는 아마도 높은 편에 있었고 느린 파괴와 관련된 해결 된 버그 중 하나에서 고통을 겪었을 것입니다.


답변