Я знаю, что это не прямой ответ, но я бы сказал, отступите немного и, возможно, не делайте этого.
Даже если у вас есть API для просмотра текущего использования физической памяти, этого недостаточно для выбора идеального размера кэша. Это будет зависеть от ваших типичных и будущих рабочих нагрузок как для программы, так и для машины (и от общей системы всех клиентов, на которых запущена эта программа + сервер (ы), которые они запрашивают), от поведения кэширования платформы, от того, должна ли система быть настроена. для пропускной способности или задержки, и так далее. В условиях нехватки памяти вы будете конкурировать за память с другими оппортунистическими кешами, включая дисковый кеш ОС. С одной стороны, вы хотите оказать на них некоторое давление, чтобы вытеснить другие низкозначные данные. С другой стороны, если вы испытываете жадность при большом количестве памяти, вы будете влиять на поведение других адаптивных кэшей.
И с умозрительным кэшированием / предварительной выборкой функция значения LRU является странной: вы (будем надеяться) сначала выберете наиболее вероятные для вызова данные, а менее вероятные - позже, поэтому данные LRU в вашей предварительной выборке Кэш может быть менее ценным, чем старые данные. Это может привести к неправильному поведению в общесистемном наборе кэшей из-за искусственного «разогрева» менее часто используемых данных.
Представляется маловероятным, что ваша программа сможет выбрать размер кэша лучше, чем простой фиксированный размер, возможно, масштабированный в зависимости от размера общей физической памяти на машине. И есть очень мало шансов, что он сможет победить системного администратора, который знает типичную рабочую нагрузку машины и ее цели производительности.
Использование адаптивной стратегии определения размера кэша означает, что использование ресурсов вашей программы будет переменным и непредсказуемым. (Что касается как памяти, так и запросов ввода-вывода и сервера, используемых для заполнения этого кэша предварительной выборки.) Для многих серверных ситуаций это не хорошо. (Особенно на серверах HPC или DB, как это может показаться, или в среде с высокой загрузкой / высокой пропускной способностью.) Согласованность, конфигурируемость и доступность часто важнее, чем максимальное использование ресурсов. А местность ссылок обычно быстро падает, так что вы, вероятно, получите очень убывающую отдачу с большими размерами кэша. Если это будет использоваться на стороне сервера, по крайней мере, оставьте опцию для явного контроля размеров кэша и, вероятно, сделайте эту опцию по умолчанию, если не только, опцией.