/ / Обробляйте пам'ять належним чином за допомогою структури структур - c, пам'яті, управління пам'яттю, пулом

Правильно обмінюйтеся пам'яттю з пулом структур - c, пам'яттю, керуванням пам'яттю, пулом

У мене є програма з трьома пулами структів. Для кожного з них я використовую список використаних структур та ще один для невикористаних структур. Під час виконання програма споживає структури та повертає їх назад до пулу на вимогу. Також є сміттєзбірник для очищення «зомбіних» структур та повернення їх у басейн.

На початку виконання віртуальна пам'ять, як очікувалося, показує близько 10 ГБ * пам'яті, виділеної, і коли програма використовує пул, пам'ять RSS збільшується.

Хоча використані вузли знову в пулі,позначені як невикористані вузли, пам'ять RSS не зменшується. Я очікую цього, тому що ОС не знає про те, що я роблю з пам'яттю, не в змозі помітити, чи я реально їх використовую або керую пулом.

Що я хотів би зробити, це змусити невикористану пам'ять повертатися до віртуальної пам'яті, коли мені захочеться, наприклад, коли пам'ять RSS збільшується вище X ГБ.

Чи є якийсь спосіб відзначити, враховуючи вказівник пам’яті, область пам’яті, щоб помістити його у віртуальну пам’ять? Я знаю, що це відповідальність Операційної системи, але, можливо, є спосіб її застосувати.

Можливо, я не мушу це хвилювати, як ти думаєш?

Заздалегідь спасибі.

  • Примітка 1: Ця програма використовується в обчислювальних системах високої продуктивності, тому "використовується" цей об'єм пам'яті.

Я надаю зображення використання басейну противикористання пам'яті для кількох файлів. Як бачите, раптові падіння використання басейну пов'язані зі збирачем сміття, що я хотів би бачити, чи є ця крапля, відображена у використанні пам'яті.

Структура використання басейнів та використання пам'яті

Відповіді:

1 для відповіді № 1

Це можна робити до тих пір, поки ви розподіляєте свою пам’ять через mmap, а не через malloc. Ви хочете використовувати madvise функція з POSIX_MADV_DONTNEED аргумент

Просто пам’ятайте, щоб запустити madvise POSIX_MADV_WILLNEED перш ніж використовувати їх знову, щоб переконатися, що за ними є фактично пам'ять.

Це насправді не гарантує, що сторінки будуть замінені, але дає ядра сильний натяк на це, коли це встигне.