Предположим, мы не говорим о записи, только о чтении страниц.
В чем причина выбрать решение, при котором ты выделяешь самостоятельно 2G оперативы, поддерживаешь там LRU страниц, что-то ещё и таскаешь туда страницы при необходимости с диска через pread(), копируя данные лишний раз в юзерспейс. А не просто за-mmap-ить весь 100-гиговый файл и ходить туда как в память, а про LRU и всё такое пускай думает ядро?
Автор LMDB гнул пальцы, что его решение изящно из-за выбора второго варианта: типа код движка проще, думать про страницы не надо, меньше копирований и т.п.
Но при этом конечно мы не контролируем что делает ядро. Например, не каждый догадается вызвать madvice(MDV_RANDOM) после mmap, чтобы ядро перестало зря префетчить страницы. Или например с mmap мы начинаем мучать VM-подсистему, оно там что-то активно делает с TLB и никто не уверен что это не вредно.
В общем интересно вот это всё.
За выбором своего buffer pool в InnoDB стояло скорее всего требование уметь менять страницы, при этом не раздражая ядро (не вынуждая его записывать их обратно в файл), причем измененные страницы в innodb сначала должны попасть в double write buffer на диск, а не сразу на своё место. Но казалось бы, пока мы не начали менять страницы, почему не mmap. В общем интересно какие ужасы в этом плане в поведении ядра напугали чуваков в InnoDB, о которых я не знаю.