Как я могу отслеживать вызов memcpy() в ядре Linux?

Я пытаюсь отследить какую-то грязную страницу в кеше страниц в Android 5.1.1 с ядром 3.4. Мое устройство — Nexus 7 2013 года с процессором Qualcomm Snapdragon S4 Pro APQ8064.

Я знаю, что процесс может (1) записывать в кеш страниц из своего буфера или (2) он может использовать Mmap для сопоставления кеша страниц непосредственно со своим виртуальным адресным пространством. В (1) некоторая функция будет вызываться как generic_perform_write. Но в (2) использует ли процесс memcpy() для записи в кеш страницы?

Более того, в исходном коде ядра есть много определений «memcpy», что действительно сбивает с толку. Как я могу отслеживать, когда процесс записывает в кэш страниц с помощью Mmap вместо использования своего буфера. И как я могу классифицировать многие memcpy, определенные в исходном коде ядра?

Еще один вопрос: когда я просматривал функцию обратной записи, я обнаружил какой-то файл, который записывается обратно на диск, имеет номер инода как 0. Меня это тоже очень смущает. Я думаю, что номер inode должен начинаться с 1. Спасибо за любую помощь.


person Hao Wang    schedule 21.07.2016    source источник


Ответы (1)


Лучший способ — это профилирование, а memcpy полностью зависит от архитектуры. И к вашей проблеме вы можете проверить mm/mmap.c----->mmap_pgoff API.

person Kalu    schedule 23.07.2016
comment
Спасибо. Но в конце концов я обнаружил, что копирование должно выполняться в iov_iter_copy_from_user_atomic. Но я все еще не понимаю, почему я получаю номер инода как 0. - person Hao Wang; 26.07.2016