LINUX.ORG.RU

Как узнать, сколько незаписанных данных в файловом кэше?


0

2

При демонтировании флешки, на которую я сбросил несколько гигов, довольно долго сбрасываются данных из кэша, причем непонятно, сколько еще осталось. В /sys/block/sdb/inflight можно посмотреть только количество IO-запросов в очереди, они постоянно скачут в районе 150 и, видимо, имеют мало отношения к количеству данных.

Как бы мне посмотреть, сколько еще осталось именно данных?

★★★★★

FS на флешке не указана, OS - не указана.

Повторите вопрос, предварительно обдумав его

Led ★★★☆☆
()
Ответ на: комментарий от Led
Debian squeeze,
2.6.32-5-amd64 #1 SMP Wed Jan 12 03:40:32 UTC 2011 x86_64 GNU/Linux

На флешке FAT32. Копирую 10 Гб на флешку, mc показывает, что копирует со скоростью в 70 Мб. Копирование завершается, я выключаю mc, демонтирую флешку. umount завершается через очень-очень большой промежуток времени. По всей видимости, во время процедуры демонтирования сбрасывается всё, что записалось в кэш. Вопрос в том, как в произвольный момент времени узнать, сколько еще осталось данных, не сброшенных на флешку. (в дальнейшем это поможет оценить сколько ещё ждать перед тем, как флешку можно будет вынуть). В /sys есть параметр inflight, из которого можно узнать, сколько в очереди блочного устройства запросов на ввод-вывод. Этот параметр мне не подходит, мне нужно количество данных, а не запросов на ввод-вывод.

И еще, Led, поясните пожалуйста, какое отношение к вопросу имеет тип файловой системы на флешке и OS?

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от anon_666

>Монтируйте с -o flush

+1. Для FAT рекомендуется именно так

Led ★★★☆☆
()
Ответ на: комментарий от i-rinat

>поясните пожалуйста, какое отношение к вопросу имеет тип файловой системы на флешке и OS?

Уже ответили. Праметр 'flush' есть только для FAT и только в Linux

Led ★★★☆☆
()
Ответ на: комментарий от anon_666

> grep -i dirty /proc/meminfo

Спасибо, именно это я и искал. В общем, моя проблема решена. А не знаете, как по отдельным устройствам (sda, sdb, sdc, ...) получать такую же информацию?

Монтируйте с -o flush, дабы оно сбрасывало кэш сразу во время записи.

Так уже. Но flush сбрасывает когда кэш кончится либо когда файл закрывается. В системе с 6 Гб файлы в 1.5 Гб мигом улетают в кэш. И сбрасывается он уже при закрытии файла.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от Led

Нет

Зачем вы вводите людей в заблуждение? Открываем исходники ядра, идём в fs/fat/. Выясняем, что при наличии в опциях монтирования «flush» устанавливается флаг opts.flush. Ищем "(->|\.)flush". Выясняется, что флаг используется в функциях fat_file_release и fat_flush_inodes. На первую ссылается структура file_operations на действие «release» (вызывается при закрытии файла). Вторая, хоть и экспортируется, но нигде за пределами fs/fat не используется, зато её вызывают функции:

msdos_create
msdos_rmdir
msdos_mkdir
msdos_unlink
msdos_rename
fat_file_release
fat_truncate_blocks
Все названия говорящие. В коде нет ничего про сброс по таймеру или при отсутствии активности, как в изначальном патче OGAWA Hirofumi.

Итого - наличие опции flush активирует сброс данных при открытии, закрытии, переименовании, удалении файлов и директорий. Инициировать сброс данных может ядро, что оно и делает, когда свободное место под кэш заканчивается. В моём случае этого не происходит и flush инициируется при закрытии файла.

Так что в данном случае вы не правы.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

Вы правы.

Я имел ввиду, что не только «когда кэш кончится либо когда файл закрывается». Про таймауты я и не говорил:)

Led ★★★☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.