Я знаю, что это старая версия, но она осталась без ответа.
По существу:
- ОС использует отдельные адресные пространства для каждого процесса.
- Для извлечения информации из любого другого адресного пространства требуется системный вызов или ошибка страницы.** (см. ниже)
- СУБД - это процесс с собственным адресным пространством.
- Пул буферов операционной системы, который описывает Stonebraker, находится в адресном пространстве ядра.
Итак ... чтобы получить данные из адресного пространства ядра в адресное пространство СУБД, системный вызов или ошибка страницы неизбежны.
Вы правы, что доступ к данным из диспетчера пула буферов ОС стоит не дороже обычного вызова read ().(На самом деле, сделано с обычным вызовом чтения.) Однако Стоунбрейкер не говорит об этом.Он специально обсуждает потребности СУБД в кешировании: после данные были прочитаны с диска и присутствуют в ОЗУ.
По сути, он говорит, что кеш буферного пула ОС слишком медленныйдля использования СУБД, поскольку она хранится в другом адресном пространстве.Он предлагает использовать локальный кеш в том же процессе (и, следовательно, то же адресное пространство), что может дать вам значительное ускорение для приложений, таких как СУБД, которые сильно бьют по кешу, потому что это устранит эти издержки системного вызова.
Вот точный абзац, где он обсуждает использование локального кэша в том же процессе:
Однако многие СУБД, включая INGRES [20] и System R [4], предпочитают ставитьУправляемый пул буферов СУБД в пространстве пользователя для уменьшения накладных расходов.Следовательно, каждая из этих систем столкнулась с проблемой создания собственного диспетчера буферного пула для повышения производительности.
Он также упоминает многоядерные проблемы в приведенной выше выдержке.Подобные эффекты применимы и здесь, потому что если вы можете иметь только один кеш на ядро, вы сможете избежать замедления из-за сбросов кеша ЦП, когда несколько ЦП читают и записывают одни и те же данные.
** Кстати, я полагаю, что статья Стоунбрейкера 1981 года на самом деле предварительная.Он упоминает это как будущую работу.«Тенденция к предоставлению файловой системы как части общей виртуальной памяти (например, Pilot [16]) может обеспечить решение этой проблемы».