Как ограничить кеш, используемый при копировании, чтобы оставалась доступная память для другого кеша?

Базовая ситуация:

Я копирую некоторые NTFS-диски в openSuSE. Каждый по 2 Тб. Когда я это делаю, система работает медленно.

Мои предположения:

Думаю, это связано с кэшированием. Linux решает отказаться от полезного кеша (, например. раздувание kde4, диски виртуальных машин, бинарники LibreOffice, бинарники Thunderbird и т. д. )и вместо этого заполняют всю доступную память (всего 24 ГБ )материалом с копирующих дисков, который будет прочитан только один раз, затем записан и больше никогда не использовал. Таким образом, каждый раз, когда я использую эти приложения (или kde4 ), диск нужно снова прочитать, а чтение раздутого диска снова приводит к зависанию / икоте.

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

Поскольку это USB, диск и контроллер диска не являются узким местом, поэтому использование ionice не делает его быстрее.

Я полагаю, что дело в кеше, а не просто в том, что материнская плата работает слишком медленно, потому что, если я остановлю все копирование, некоторое время все равно будет работать с перебоями, пока все не будет повторно кешировано. И если я перезапущу копирование, пройдет минута, прежде чем оно снова станет прерывистым. Но кроме того, я могу ограничить его примерно 40 МБ/с, и он снова будет работать быстрее (не потому, что в нем кэшируются нужные данные, а потому, что шины материнской платы имеют большую дополнительную пропускную способность для системных дисков ). Я могу полностью принять потерю производительности из-за того, что возможности ввода-вывода моей материнской платы полностью используются (, которые используются на 100%, что означает 0% потраченной энергии, что делает меня счастливым ), но я не могу согласиться с тем, что этот механизм кэширования работает так ужасно. в этом конкретном случае использования.

# free
             total       used       free     shared    buffers     cached
Mem:      24731556   24531876     199680          0    8834056   12998916
-/+ buffers/cache:    2698904   22032652
Swap:      4194300      24764    4169536

Я пробовал то же самое на Ubuntu, но вместо этого это приводило к полному зависанию системы. ;)

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

Вопрос:

Есть ли какой-нибудь способ указать этим операциям копирования, чтобы они ограничивали использование памяти, чтобы некоторые важные данные оставались в кэше, и, следовательно, любые замедления были результатом нормального использования диска, а не повторного чтения одних и тех же часто используемых файлов? Например, есть ли настройка максимальной памяти для каждого процесса/пользователя/файловой системы, которую можно использовать в качестве кеша/буфера?

20
задан Peter 11 April 2012 в 12:19
поделиться