Как добиться низкого потребления памяти?
Я хочу знать, какую технику используют антивирусные программы для сканирования диска или файлов и поддержания низкого потребления памяти. Они также не влияют на активность пользователя.
Я ищу подход, с помощью которого мы можем добиться сканирования диска с низким потреблением памяти.
6 ответов
Они не Каждый известный мне сканер использует много памяти и влияет на производительность.
Я согласен с большинством людей, что антивирусное программное обеспечение никогда не имело низкое потребление памяти или процессора. Тем не менее, вот несколько идей из головы:
- Проверять только файлы, которые открывает пользователь, только тогда, когда он их открывает.
- Сканируйте только рискованные файлы - например, исполняемые файлы или скрипты, а не все файлы.
- Сканирование обычно выполняется путем хэширования файла и обработки хеш-кода с известными вирусными хешами. Чтобы минимизировать использование памяти, вы можете просто сохранить известные хэши на диске и искать их при необходимости, но это будет очень медленно. Самым быстрым способом было бы сохранить их все в оперативной памяти и запретить ОС менять их, но для этого потребовалось бы много памяти. Компромисс может быть достигнут несколькими уровнями хеш-кэшей, например:
- Кэш 1-го уровня содержит 24-битные хэши в качестве битовой маски. Это занимает около 16 МБ ОЗУ и может быть полностью сохранено в ОЗУ (что запрещает ОС менять его). Проверить это можно очень быстро.
- Кэш 2-го уровня содержит полные 128-битные или более хэши и хранится на диске. Только в случае попадания в кэш первого уровня проверяется кэш второго уровня. Поскольку хэш-пространство кэша 1-го уровня мало, вероятно, получится много ложных срабатываний, поэтому необходимо проверить кэш второго уровня.
- Кэшируйте результаты последних, скажем, 1000 отсканированных файлов. Таким образом, вам не нужно делать все хеширование и проверять снова и снова файлы, которые часто используются.
NOD32 занимает довольно мало места, но все еще занимает 10-20 МБ памяти.
Имейте в виду, что AV должен делать по большей части, чтобы найти исполняемые части каждого файла на наличие вредоносных байтов. Традиционный вирус обычно меньше 1000 байт, идентифицируемые шаблоны могут быть только 50 байтами. Таким образом, для защиты AV от шаблонов вирусов размером 100 КБ требуется только база данных шаблонов размером 50*100 КБ =5 МБ.
Я думаю, что вы переоцениваете эффективность этих инструментов сканирования. Я видел, как они обычно берут огромные куски памяти и время от времени нагружают процессор. Они также угоняют ваш стартап, чтобы убедиться, что они запускаются первыми, что задерживает ваш стартап.
Вы должны изучить файлы, отображенные в памяти. Они позволяют обрабатывать огромные файлы без одновременной загрузки всего файла в память.
Сканирование NTFS MFT напрямую, выяснение структур файловой системы NTFS (доступны реализации с открытым исходным кодом). Это лучший способ написать наиболее эффективный код, сделайте это сами.
Я считаю, что антивирус использует низкоуровневые драйверы устройств и агрессивные кеши памяти для ускорения так называемого безударного доступа. Мой AV (Norton) никогда не сканирует, если заставка не активна.
Проблема в том, что оборудование ваших пользователей все еще дешевое. Жесткие диски, по большей части, печально известны своей медлительностью. Попросите пользователей обновить твердотельный накопитель, если производительность слишком низкая. Кроме того, диски для ноутбуков еще медленнее.