2012-02-09 7 views
1

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

Это режим по умолчанию для Redis (и единственный режим, который идет вперёд, я считаю, что VM устарела в 2.6), оставляя ОС обработать пейджинг (если необходимо). Я правильно понимаю, что при загрузке/запуске потребуется некоторое время, чтобы получить «горячий». При работе с 1-гигабайтным операционным узлом с набором данных 16 гб Redis пытается загрузить все это в виртуальную память при загрузке, и, следовательно, 90% + сразу выгружается, и только после некоторого хорошего количества операций выполняется вышеуказанное утверждение?

ответ

3

Redis VM уже устарел в Redis 2.4 и удален в Redis 2.6. Это тупик: не используйте его.

Я думаю, вы вводите в заблуждение блокирующую виртуальную машину с подкачкой ОС. Это две разные вещи.

OS paging - это режим по умолчанию Redis, когда Redis VM не настроен вообще (независимо от режима блокировки). ОС будет заменять память Redis, если она не подходит для физической памяти. Цикл событий может быть заморожен в любое время. Когда это происходит, производительность является ужасной, потому что ни одна из внутренних структур данных Redis не предназначена для этого (нет местоположения, системы пейджинга).

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

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

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

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

За исключением случаев, когда у вас экстремальная локальность в ваших данных, или если вам все равно не хватает задержек, использование 1 ГБ ОЗУ для 16-гигабайтного набора данных с помощью Redis VM является научно-фантастической ИМО.

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

Redis как магазин в магазине отлично. Но если вам нужно хранить что-то большее, чем ОЗУ, не используйте его. Другие (дисковые) магазины будут работать намного лучше.