В чем разница между «drop_caches» и «blockdev --flushbufs»?

Как говорится в заголовке, я запутался в «echo #> / proc / sys / vm / drop_caches» и blockdev --flushbufs.

http://pages.cs.wisc.edu/~remzi/OSTEP/file-implementation.pdf

Согласно OSSTEP, если цель Иноды не кэшируются в памяти, необходимо выполнить дисковый ввод-вывод для чтения индекса, что создаст структуру данных dentry в памяти.

Насколько мне известно, echo 3> / proc / sys / vm / drop_caches должен удалить (очистить) страницу cahche, inode и dentry.

Я экспериментировал с blktrace, чтобы выяснить, действительно ли диск io встречается для чтения инода.

1) echo 3 > /proc/sys/vm/drop_caches

> 259,0   38        1     0.000000000 40641  Q   R 109314048 + 32 [cat]
> 259,0   38        2     0.000004096 40641  G   R 109314048 + 32 [cat]
> 259,0   38        3     0.000027108 40641 UT   N [cat] 1
> 259,0   38        4     0.000027862 40641  I   R 109314048 + 32 [cat]
> 259,0   38        5     0.000036393 40641  D   R 109314048 + 32 [cat]
> 259,0   38        6     0.006268251     0  C   R 109314048 + 32 [0]

Однако нет диска io для чтения inode. Я вижу только диск io для чтения блока данных размером 16 КБ.

2) echo 3 > /proc/sys/vm/drop_caches и blockdev --flushbufs /dev/nvme0n1

259,0    1        1     0.000000000   325  Q  RM 74232 + 8 [cat]     
259,0    1        2     0.000004854   325  G  RM 74232 + 8 [cat]
259,0    1        3     0.000026263   325  D  RM 74232 + 8 [cat]
259,0    1        4     0.006292470     0  C  RM 74232 + 8 [0]
259,0    1        5     0.006382162   325  Q  RM 109052160 + 8 [cat]
259,0    1        6     0.006385621   325  G  RM 109052160 + 8 [cat]
259,0    1        7     0.006393322   325  D  RM 109052160 + 8 [cat]
259,0    1        8     0.006455750     0  C  RM 109052160 + 8 [0]
259,0    1        9     0.006511245   325  Q  RM 109117696 + 8 [cat]
259,0    1       10     0.006512342   325  G  RM 109117696 + 8 [cat]
259,0    1       11     0.006514627   325  D  RM 109117696 + 8 [cat]
259,0    1       12     0.006591933     0  C  RM 109117696 + 8 [0]
259,0    1       13     0.006624544   325  Q  RM 109117704 + 8 [cat]
259,0    1       14     0.006625538   325  G  RM 109117704 + 8 [cat]
259,0    1       15     0.006627567   325  D  RM 109117704 + 8 [cat]
259,0    1       16     0.006688973     0  C  RM 109117704 + 8 [0]
259,0    1       17     0.006764838   325  Q   R 109314048 + 32 [cat]
259,0    1       18     0.006766035   325  G   R 109314048 + 32 [cat]
259,0    1       19     0.006768078   325 UT   N [cat] 1
259,0    1       20     0.006768755   325  I   R 109314048 + 32 [cat]
259,0    1       21     0.006773426   325  D   R 109314048 + 32 [cat]
259,0    1       22     0.006854480     0  C   R 109314048 + 32 [0]

Я нашел блочный доступ (+8 (512 * 8 = 4 КБ)) для чтения инода.

Беглый взгляд на то, как blockdev --flushbufs работает в коде ядра, показывает, что он очищает суперблок.

Почему диск io не может читать иноды только с drop_cache?

В книге ULK говорится, что иноды или суперблоки кэшируются в буферном кеше. В книге ULK говорится, что inode и суперблоки кэшируются в буфер-кеш. Это причина этого?

Спасибо

0
задан 10 September 2019 в 14:29

0 ответов

Другие вопросы по тегам:

Похожие вопросы: