Кэширование ableton на системном диске. Низкая производительность диска при включенном кэшировании записи

27.03.2019 Мониторы

Кеширование диска позволит системе файлы, к которым было обращение наиболее часто — заносить в специальную область ОЗУ — кэш.

Он заполняется только тогда, когда есть свободная память, которая при том еще и простаивает.

Вот и зачем проставить свободной оперативной памяти? Незачем — вот так и пошло еще со времен Windows 7, кушает она ОЗУ сразу после загрузки и старается скушать всю =)

На форумах было много споров по этому поводу, мол куда исчезает память, как с этим бороться и так далее. Очень много материала в интернете можно найти по поводу отключения кэша. И все, кто упорно ищет способ решить эту якобы проблему, приходит к выводу, что отключить кэш полностью на самом деле нельзя. Лично я вам вообще советую не заморачиваться над такой проблемой, так как если какой-то программе нужна оперативная память, а система взяла ее под кэш, то это будет мгновенно исправлено — Windows отдаст столько памяти, сколько нужно. А кэш удалит, если необходимо — то удалит почти весь, «отдавши» при этом оперативную память.

Поэтому все продумано и до нас, может Windows и может быть с «глюками», но не до такой степени же =)

Я советую включать кэш дисков в Windows и ставить галочку, чтобы кэш записи не очищался. Но все таки лучше эту опцию включать тогда, когда у вас есть дополнительный источник питания, или просто когда вы уверены что ваша Windows «зависнет», так как все же есть шанс что вы потеряете какие-то данные. Но на самом деле риск такой очень невелик.

Так вот, чтобы включить этот кэш, заходим в мой компьютер (вернее уже Этот компьютер ) и нажимаем правой кнопкой по диску и выбираем Свойства :


Переходим на вкладку Оборудование , выбираем диск и нажимаем Свойства :

Появится окно, в котором нужно нажать на Изменить параметры :

И вот теперь, на вкладке Политика установите галочки. Если хотите чтобы кэш работал, что говорится, на «полную катушку» — то ставьте две галочки. Если без очистки буфера, то оставляйте только первую. Но помните, что если у вас на компьютере важные данные, а дополнительного источника света (другим словом ИБП) у вас нет — то решайте сами, ставить галочку вторую или нет.

Кэшированием записей на устройстве хранения называется использование высокоскоростной энергозависимой памяти для накопления команд записи, отправляемых на устройства хранения данных, и их кэширования до тех пор, пока их не обработает более медленный носитель (либо физические диски, либо недорогая флэш-память). Для большинства устройств, использующих кэширование записей, требуется непрерывная подача электропитания.

Для управления кэшированием записей на диске откройте Панель управления - Диспетчер устройств .

В разделе Дисковые устройства дважды щелкните нужный диск.

Перейдите на вкладку Политики

Быстрое удаление

Это значение обычно является оптимальным выбором для устройств, которые может понадобиться часто отключать от системы, таких как USB-устройства флэш-памяти, SD, MMC, Compact Flash или аналогичные карты памяти и другие внешние подключаемые устройства хранения.

Если выбран параметр Быстрое удаление , то Windows управляет командами, передаваемыми устройству, используя метод, называемый сквозным кэшированием . При сквозном кэшировании устройство работает с командами записи, как если бы кэш отсутствовал. Кэш может обеспечить небольшой выигрыш в быстродействии, но акцент ставится на обеспечение максимальной безопасности данных путем перехвата команд, передаваемых основному устройству хранения. Основное преимущество состоит в предоставлении возможности быстро удалять устройство хранения без риска потери данных. Например, при случайном извлечении флэш-диска из своего порта вероятность потери данных, записываемых на него, значительно уменьшается.

Оптимальная производительность

Этот вариант обычно является оптимальным для устройств, которые должны обеспечить максимально возможное быстродействие; для устройств, редко удаляемых из системы. Если выбрано это значение и устройство отключается от системы до того, как на него записываются все данные (например, при удалении USB-устройства флэш-памяти), то данные могут быть потеряны.

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

Запись кэша на диск

По умолчанию Windows использует запись кэша на диск. Это означает, что система будет периодически отдавать устройству хранения команду на передачу основному устройству хранения всех данных, хранящихся в кэше. Выбор параметра отключает эти периодические команды на передачу данных. Не все устройства поддерживают все эти возможности.

Если первостепенной задачей является высокая скорость передачи данных, следует включить оба параметра: в разделе Политика удаления выберите пункт Оптимальная производительность , а в разделе Политика кэширования записей выберите пункт Разрешить кэширование записей для этого устройства (если оборудование системы и устройство хранения поддерживают эти функции).

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

Большинство ориентированных на потребителя устройств хранения, например USB-устройства флэш-памяти, карты памяти SD или MMC или внешние диски, не позволяет изменять параметры кэширования для устройства. Внутренние жесткие диски с интерфейсами SATA или SAS, поставляемые с Windows, обычно позволяют изменять эти параметры (зависит от изготовителя устройства). Чтобы понять возможности кэширования, предоставляемые конкретным устройством, и определить, какие параметры лучше всего соответствуют вашим потребностям, обратитесь к документации, предоставляемой изготовителем.

Дополнительные сведения о предотвращении потери данных

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

Также следует осторожно удалять съемные устройства хранения, такие как USB-устройства флэш-памяти, карточки памяти SD, MMC или Compact Flash, внешние диски. При использовании параметра Безопасное удаление Windows сможет защитить данные пользователя в большинстве сценариев. Но определенные драйверы или приложения могут не соответствовать модели Windows, что может привести к потере данных при удалении подобных устройств. По возможности перед удалением из системы любого внешнего устройства хранения следует вызвать приложение «Безопасное удаление».

Источники: справочная документация Windows.

Доброго времени суток, друзья. Сегодня, как Вы уже поняли, мы поговорим о том как ускорить диск компьютера , будь то SSD , HDD или какой-нибудь еще.

Но сначала пару общих слов.

Вообще, я, за годы использования компьютерных комплексов различного уровня (о как сказанул! :)), всё больше склоняюсь к тому, что прогресс кое-чего не учел, а точнее создал, так сказать, "бутылочное горлышко" в производительности, ведь сами посудите - за последние несколько лет развивалось всё, кроме жестких дисков и никто не торопился ускорить диск компьютера хоть как-то.

Росли частоты, архитектура, кэш и , вышла, так сказать, турбо-частотная и всякие супер-навороченные (у которых так же распухали в ширь все параметры, отвечающие за производительность) и лишь жесткие диски всего лишь наращивали свои объемы (и снижали энергопотребление), что в общем-то не давало выигрыша в плане скорости работы системы в комплексе.

Ситуация стала исправляться с приходом , но последние имеют недоступную для многих цену, а дешевые решения являются довольно спорным подходом, ибо имеют ограниченные сроки работы, малый и объем и вообще, по шустрости, не всегда обыгрывают сходные решения "старого" поколения.

Как ускорить диск компьютера - дефрагментация

Дело в том, что ОС Windows любит всячески использовать жесткий диск для различных фоновых нужд, которые, зачастую, бывают нафиг не нужны рядовому пользователю.

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

Для начала отключим дефрагментацию по расписанию (настройки актуальны для Windows 7 и Windows Vista, т.к в дефрагментации по расписанию нет). Для этого жмем правой кнопкой мышки на любом диске в "Мой компьютер " и выбираем пункт "Свойства ". В появившемся окне открываем вкладку "Сервис ", жмем кнопочки "Выполнить дефрагментацию " и, следом, "Настроить расписание ". Там снимаем галочку "Выполнять по расписанию ".

Отключаем индексацию для быстрого поиска - оптимизируем диск

Просто, думается мне, что не так уж часто Вы этим поиском пользуетесь ибо знаете, что у Вас где лежит, а если так, то для редких запросов подойдет и медленный поиск (не по индексу, а "вживую"), но зато Вы спасете некоторое количество производительности диска, а значит ускорите его и компьютер, ибо система любит индексировать оный, когда подобная настройка включена.

Хотите знать и уметь, больше и сами?

Мы предлагаем Вам обучение по направлениям: компьютеры, программы, администрирование, сервера, сети, сайтостроение, SEO и другое. Узнайте подробности сейчас!

  • Для отключения жмем правой кнопкой мышки на первом диске в "Мой компьютер " и выбираем пункт "Свойства ";
  • В появившемся окне, на вкладке "Общие " нам необходимо снять галочку "Разрешить индексировать содержимое файлов на этом диске в дополнение к свойствам файла " и нажать кнопочку "Применить ";
  • Когда появится запрос на подтверждение изменения атрибутов, необходимо будет выбрать пункт "К диску С:\ (ну или какая будет у Вас буква указана) и ко всем вложенным папкам и файлам" и нажать кнопочку "ОК ". Дальше надо будет дождаться применения атрибутов и проделать тоже самое со всеми дисками в системе. Если вдруг будет возникать окно, уведомляющее, что нужны права Администратора , то жмите кнопку "Продолжить ";
  • Если появится окно о невозможности применения атрибутов, то жмите кнопочку "Пропустить Всё ".

В частности, я бы рекомендовал опытным пользователям полностью отключить восстановление системы, ибо оное тоже любит обращаться к диску при создании новых точек восстановления или мониторинга оных. Например я, считаю систему восстановления вообще бесполезной, тем более, что есть такие мощные вещи, как Acronis, о котором я писал в статье " ".

Ну и напоследок для тех, кто является обладателем RAID 0 на базе интеловских рейд-контроллеров. Я рекомендую скачать последнюю версию Intel Rapid Storage Technology (на момент написания этой статьи версия 10.5.0.1022 ), а затем установить с галочкой "Установка Центра управления Intel " и, запустив панель Intel Rapid (используя иконку в трее), перейти на вкладку "Управление ", где включить для своего RAID 0 , так называемый "Кэш обратной записи ", что существенно прибавит рейду и без того мощной производительности.

На сим, пожалуй, можно завершать нашу небольшую статью.

Послесловие

Вот такие вот пироги о том как ускорить диск компьютера почти любого типа.

Так же, я хотел написать несколько слов о файловых системах - NTFS и FAT32 , размерах кластера оных и прочих небольших хитрых штук из области файловых систем, но, подумав, решил опубликовать сие несколько позже в рамках отдельной статьи.

Если есть какие-то дополнения, комментарии или вопросы, то всегда рад буду ответить на них в комментариях к этой записи.

Кэширование дисков

Очень важной, специфической формой буферизации является кэширование . Этот термин означает использование сравнительно небольшой по объему, но быстродействующей памяти для того, чтобы уменьшить количество обращений к более медленной памяти большого объема.

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

В современных вычислительных системах может использоваться несколько уровней кэширования. В данном курсе не рассматривается аппаратный кэш процессора, позволяющий сократить число обращений к основной памяти за счет использования быстродействующих регистров. К работе ОС более прямое отношение имеет программное кэширование устройств произвольного доступа (дисковых накопителей). В этом случае гипотезу о локальности ссылок можно переформулировать более конкретно: если программа выполнила чтение или запись данных из некоторого блока диска, то весьма вероятно, что в скором будущем последуют еще операции чтения или записи данных из того же блока.

В роли быстродействующей памяти (кэша) здесь выступает массив буферов, размещенный в системной памяти. Каждый буфер состоит из заголовка и блока данных, соответствующего по размеру блоку (сектору) диска. Заголовок буфера содержит адрес блока диска, копия которого в данный момент содержится в буфере, и несколько флагов, характеризующих состояние буфера.

Когда система получает запрос на чтение или запись определенного блока данных диска, она прежде всего проверяет, не содержится ли в данный момент копия этого блока в одном из буферов кэша. Для этого требуется выполнить поиск по заголовкам буферов. Если блок найден в кэше, то обращение к диску выполняться не будет. Вместо этого данные читаются из буфера или, соответственно, записываются в буфер. В случае записи данных следует также в заголовке буфера отметить с помощью специального флага, что буфер стал «грязным », т.е. его содержимое не соответствует данным на диске.

Если требуемый блок диска не найден в кэше, то для него должен быть выделен буфер. Проблема в том, что общее количество буферов кэша ограничено. Чтобы отдать один из них под требуемый блок, надо «вытеснить» из кэша один из блоков, которые там хранились. При этом, если вытесняемый блок «грязный», то он должен быть «очищен», т.е. записан на диск. При вытеснении «чистого» блока никаких операций с диском выполнять не надо.

Какой из блоков, хранящихся в кэше, следует выбрать для вытеснения, чтобы сократить общее количество обращений к диску? Это крайне важный вопрос, и если он будет решаться неправильно, то вся работа системы может затормозиться из-за постоянных обращений к диску.

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

Среди алгоритмов, используемых на практике, лучшим считается алгоритм LRU (Least Recently Used, в вольном переводе «давно не использовавшийся»). Он заключается в следующем: выбирать для вытеснения следует тот блок, к которому дольше всего не было обращений. Здесь как раз используется принцип локальности ссылок: раз обращений давно не было, то, вероятно, их и не будет в ближайшее время.

Как на практике реализуется выбор блока по правилу LRU? Очевидное решение – при каждом обращении к буферу записывать в его заголовке текущее время, а при выборе для вытеснения искать самую раннюю запись – слишком громоздко и медленно. Есть гораздо лучшая возможность.

Все буферы кэша связываются в линейный список. В заголовке каждого буфера хранится ссылка на следующий по порядку списка буфер (фактически хранится индекс этого буфера в массиве буферов). При каждом обращении к блоку данных для чтения или записи выполняется также перемещение соответствующего буфера в конец списка. Это не означает перемещения данных, хранящихся в буфере, изменяются только несколько ссылок в заголовках.

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

На рис. 2‑3 показан массив буферов, связанный в список.

Теперь о «грязных» буферах. В каких случаях должна выполняться их «очистка», т.е. запись блока данных из кэш-буфера на диск? Можно назвать три таких случая.

· Выбор блока для вытеснения из кэша.

· Закрытие файла, к которому относятся «грязные» блоки. Общепринято, что при закрытии файла должно выполняться его сохранение на диске.

· Операция принудительной очистки всех буферов либо только буферов, относящихся к определенному файлу. Подобная операция может выполняться для повышения надежности хранения данных, как страховка от возможных сбоев. В ОС UNIX, например, очистка всех буферов традиционно выполняется каждые 30 с.

Следует признать, что кэширование операций записи на диск, в отличие от кэширования чтения, всегда создает определенную опасность потери данных. В случае случайного сбоя системы, отключения питания и т.п. может оказаться, что важная информация, которую следовало записать на диск, застряла в грязных буферах кэша и была поэтому потеряна. Это неизбежная плата за значительное повышение производительности системы. Программы, требующие высокой надежности работы с данными (например, банковские программы), обычно записывают данные прямо на диск. При этом кэш либо не используется вообще, либо в кэш-буфер заносится копия данных, которая может пригодиться при последующих операциях чтения.



«Узким местом» кэширования дисков является поиск требуемого блока данных в кэше. Как было описано выше, для этого система просматривает заголовки буферов. Если кэш состоит из нескольких сотен буферов, время поиска будет ощутимо. Один из возможных приемов ускорения поиска, используемый в UNIX, показан на рис. 2‑4.

В UNIX каждый кэш-буфер может входить одновременно в два линейных списка. Один из них, называемый «списком свободных блоков», это знакомый нам LRU-список, используемый для определения блока, подлежащего вытеснению. Слово «свободный» не значит «пустой»; в данном случае это слово означает блок, не занятый в текущий момент в операции чтения/записи, выполняемой каким-нибудь процессом. Другой список называется «хеш-цепочкой» и используется для ускорения поиска нужного блока.

При записи в буфер данных, соответствующих некоторому блоку диска, номер хеш-цепочки, в которую будет помещен этот буфер, определяется как остаток от деления номера блока на N – количество хеш-цепочек. Для наглядности на рисунке принято значение N = 10. Таким образом, блоки с номерами 120, 40, 90 попадают в цепочку 0, блоки 91, 1, 71 – в цепочку 1 и т.д. Когда система ищет в кэше блок с определенным номером, она прежде всего по номеру блока определяет, в какой из хеш-цепочек этот блок должен находиться. Если блока нет в этой цепочке, то его вообще нет в кэше. Таким способом удается сократить поиск в лучшем случае в N раз (это если все цепочки окажутся одинаковой длины).

Перемещение буфера из одной хеш-цепочки в другую, как и его перемещение в конец списка свободных блоков, не требует перезаписи всего блока данных в памяти и выполняется путем изменения ссылок в заголовках блоков.

Еще одна особенность кэширования дисков в UNIX состоит в том, что при обнаружении в начале списка свободных блоков «грязных» буферов система запускает процессы их очистки, но не дожидается завершения этих процессов, а выбирает для вытеснения первый по списку чистый блок. После завершения очистки блоки возвращаются в начало списка свободных блоков, оставаясь первыми кандидатами на вытеснение.

Очень важной, специфической формой буферизации является кэширование . Этот термин означает использование сравнительно небольшой по объему, но быстродействующей памяти для того, чтобы уменьшить количество обращений к более медленной памяти большого объема.

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

В современных вычислительных системах может использоваться несколько уровней кэширования. В данном курсе не рассматривается аппаратный кэш процессора, позволяющий сократить число обращений к основной памяти за счет использования быстродействующих регистров. К работе ОС более прямое отношение имеет программное кэширование устройств произвольного доступа (дисковых накопителей). В этом случае гипотезу о локальности ссылок можно переформулировать более конкретно: если программа выполнила чтение или запись данных из некоторого блока диска, то весьма вероятно, что в скором будущем последуют еще операции чтения или записи данных из того же блока.

В роли быстродействующей памяти (кэша) здесь выступает массив буферов, размещенный в системной памяти. Каждый буфер состоит из заголовка и блока данных, соответствующего по размеру блоку (сектору) диска. Заголовок буфера содержит адрес блока диска, копия которого в данный момент содержится в буфере, и несколько флагов, характеризующих состояние буфера.

Когда система получает запрос на чтение или запись определенного блока данных диска, она прежде всего проверяет, не содержится ли в данный момент копия этого блока в одном из буферов кэша. Для этого требуется выполнить поиск по заголовкам буферов. Если блок найден в кэше, то обращение к диску выполняться не будет. Вместо этого данные читаются из буфера или, соответственно, записываются в буфер. В случае записи данных следует также в заголовке буфера отметить с помощью специального флага, что буфер стал «грязным », т.е. его содержимое не соответствует данным на диске.

Если требуемый блок диска не найден в кэше, то для него должен быть выделен буфер. Проблема в том, что общее количество буферов кэша ограничено. Чтобы отдать один из них под требуемый блок, надо «вытеснить» из кэша один из блоков, которые там хранились. При этом, если вытесняемый блок «грязный», то он должен быть «очищен», т.е. записан на диск. При вытеснении «чистого» блока никаких операций с диском выполнять не надо.


Какой из блоков, хранящихся в кэше, следует выбрать для вытеснения, чтобы сократить общее количество обращений к диску? Это крайне важный вопрос, и если он будет решаться неправильно, то вся работа системы может затормозиться из-за постоянных обращений к диску.

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

Среди алгоритмов, используемых на практике, лучшим считается алгоритм LRU (Least Recently Used, в вольном переводе «давно не использовавшийся»). Он заключается в следующем: выбирать для вытеснения следует тот блок, к которому дольше всего не было обращений. Здесь как раз используется принцип локальности ссылок: раз обращений давно не было, то, вероятно, их и не будет в ближайшее время.

Как на практике реализуется выбор блока по правилу LRU? Очевидное решение – при каждом обращении к буферу записывать в его заголовке текущее время, а при выборе для вытеснения искать самую раннюю запись – слишком громоздко и медленно. Есть гораздо лучшая возможность.

Все буферы кэша связываются в линейный список. В заголовке каждого буфера хранится ссылка на следующий по порядку списка буфер (фактически хранится индекс этого буфера в массиве буферов). При каждом обращении к блоку данных для чтения или записи выполняется также перемещение соответствующего буфера в конец списка. Это не означает перемещения данных, хранящихся в буфере, изменяются только несколько ссылок в заголовках.

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

На рис. 2‑3 показан массив буферов, связанный в список.

Теперь о «грязных» буферах. В каких случаях должна выполняться их «очистка», т.е. запись блока данных из кэш-буфера на диск? Можно назвать три таких случая.

· Выбор блока для вытеснения из кэша.

· Закрытие файла, к которому относятся «грязные» блоки. Общепринято, что при закрытии файла должно выполняться его сохранение на диске.

· Операция принудительной очистки всех буферов либо только буферов, относящихся к определенному файлу. Подобная операция может выполняться для повышения надежности хранения данных, как страховка от возможных сбоев. В ОС UNIX, например, очистка всех буферов традиционно выполняется каждые 30 с.

Следует признать, что кэширование операций записи на диск, в отличие от кэширования чтения, всегда создает определенную опасность потери данных. В случае случайного сбоя системы, отключения питания и т.п. может оказаться, что важная информация, которую следовало записать на диск, застряла в грязных буферах кэша и была поэтому потеряна. Это неизбежная плата за значительное повышение производительности системы. Программы, требующие высокой надежности работы с данными (например, банковские программы), обычно записывают данные прямо на диск. При этом кэш либо не используется вообще, либо в кэш-буфер заносится копия данных, которая может пригодиться при последующих операциях чтения.

«Узким местом» кэширования дисков является поиск требуемого блока данных в кэше. Как было описано выше, для этого система просматривает заголовки буферов. Если кэш состоит из нескольких сотен буферов, время поиска будет ощутимо. Один из возможных приемов ускорения поиска, используемый в UNIX, показан на рис. 2‑4.

В UNIX каждый кэш-буфер может входить одновременно в два линейных списка. Один из них, называемый «списком свободных блоков», это знакомый нам LRU-список, используемый для определения блока, подлежащего вытеснению. Слово «свободный» не значит «пустой»; в данном случае это слово означает блок, не занятый в текущий момент в операции чтения/записи, выполняемой каким-нибудь процессом. Другой список называется «хеш-цепочкой» и используется для ускорения поиска нужного блока.

При записи в буфер данных, соответствующих некоторому блоку диска, номер хеш-цепочки, в которую будет помещен этот буфер, определяется как остаток от деления номера блока на N – количество хеш-цепочек. Для наглядности на рисунке принято значение N = 10. Таким образом, блоки с номерами 120, 40, 90 попадают в цепочку 0, блоки 91, 1, 71 – в цепочку 1 и т.д. Когда система ищет в кэше блок с определенным номером, она прежде всего по номеру блока определяет, в какой из хеш-цепочек этот блок должен находиться. Если блока нет в этой цепочке, то его вообще нет в кэше. Таким способом удается сократить поиск в лучшем случае в N раз (это если все цепочки окажутся одинаковой длины).

Перемещение буфера из одной хеш-цепочки в другую, как и его перемещение в конец списка свободных блоков, не требует перезаписи всего блока данных в памяти и выполняется путем изменения ссылок в заголовках блоков.

Еще одна особенность кэширования дисков в UNIX состоит в том, что при обнаружении в начале списка свободных блоков «грязных» буферов система запускает процессы их очистки, но не дожидается завершения этих процессов, а выбирает для вытеснения первый по списку чистый блок. После завершения очистки блоки возвращаются в начало списка свободных блоков, оставаясь первыми кандидатами на вытеснение.