anonymous@RULINUX.NET~# Last login: 2024-11-21 16:16:32
Регистрация Вход Новости | Разметка | Пользователи | Галерея | Форум | Статьи | Неподтвержденное | Трекер | Правила форума | F.A.Q. | Ссылки | Поиск
[#] [Добавить метку] [Редактировать]
Скрыть

А как вы копируете файлы в этом вашем линупсе?

Проблема:

Ну вот, например, дохлое вычислительное устройство под OWRT. Периодически копирует крупные файлы, размер которых совместим с объёмом ОЗУ, а часто и превышает его.

Ну вот, копирует оно это своё файло с раздела sda1 в бэкапное место на sdb1 - чё происходит?

Файловая система читает файл с sda1, кешируя прочитанное в памяти. Одновременно пишет на sdb1, ещё раз кешируя в памяти те же байты (файл-то другой уже).

А кеш - он бесплатный, но не безразмерный. Все эти наши копирования байтов, которые нам никогда больше не потребуются, зачем-то сохраняются в кеше, эффективно вымывая оттуда все нужные данные, которые были закешированы для других, более полезных целей. Соответственно растёт пейджинг, kswapd начинает жрать ЦПУ, всё тормозит и т.д. И никакое ionice этого не исправит.

Какие средства нам для решения предоставляет этот ваш хвалёный линупс? Да никаких:

Есть функция posix_fadvise, которая позволяет сказать системе, например POSIX_FADV_SEQUENTIAL что означает что мы собираемся читать-писать файл последовательно. Надеюсь системные утилиты это и так всегда говорят (по крайней мере cp этот параметр выставляет - видно в strace), но к кешу это не имеет отношения.

У posix_fadvise есть ещё одно заклинание - POSIX_FADV_DONTNEED. Это уже ближе к телу. Но есть проблема - его почему-то утилиты копирования не выставляют, а надо выставлять прочитав каждую страницу данных. Есть костыль, который перехватывает вызовы fopen программы и при закрытии файлового дескриптора объявляет все данные файла как POSIX_FADV_DONTNEED что, кстати, не всегда приводит к немедленному результату - под федорой у меня исходный файл остался закешированным после копирования, а под опенврт - оба файла остались в кеше, и целевой и исходный. Проверяется это программой cachestats, которая входит в состав костыля.

Ну и, наконец, хит сезона - POSIX_FADV_NOREUSE! Это ещё один флаг для posix_fadvise, который какбэ призван дать программам возможность сразу честно признаться в том, что они собираются лишь однократно потрогать байты из файла и больше они им не потребуются.

Вот как описывает ман этот самый POSIX_FADV_NOREUSE:

POSIX_FADV_NOREUSE     The specified data will be accessed only once.

In kernels before 2.6.18, POSIX_FADV_NOREUSE had the same semantics as POSIX_FADV_WILLNEED. This was probably a bug; since kernel 2.6.18, this flag is a no-op.


Это же просто охуенно: "this flag is a no-op"!

Так как копировать файлы в этом вашем линупсе не ставя всю систему раком?

anonymous(*) (2018-03-31 13:27:29)
Отредактировано anonymous по причине "не указана"
Mozilla/5.0 (X11; Fedora; Linux x86_64; rv:59.0) Gecko/20100101 Firefox/59.0

[Ответить на это сообщение]
Этот тред читают 1 пользователь:
Анонимных: 1
Зарегистрированных: 0




(c) 2010-2020 LOR-NG Developers Group
Powered by TimeMachine

Valid HTML 4.01 Transitional Правильный CSS!