Ответ 1
Ошибки страниц включают страницы кода.
perf stat
включает служебные данные запуска.
IDK детали того, как perf
начинает подсчет, но, по-видимому, он должен запрограммировать счетчики производительности в режиме ядра, поэтому они подсчитывают, пока CPU переключается обратно в пользовательский режим (остановка для многих циклов, особенно на ядре с защитой Meltdown, которая делает недействительными TLB).
Я полагаю, что большинство команд 47,654
, которые были записаны, были кодом ядра. Возможно, включая обработчик ошибок страницы!
Я думаю, что ваш процесс никогда не идет user- > kernel- > user, весь процесс - это kernel- > user- > kernel (startup, syscall
для вызова sys_exit
, а затем никогда не возвращается в пользовательское пространство), поэтому никогда не было случая, когда TLB были бы горячими, но, возможно, при запуске внутри ядра после системного вызова sys_exit
. И все же пропуски TLB не являются ошибками страниц, но это объясняет много остановленных циклов.
Сам пользовательский > переход ядра объясняет около 150 остановленных циклов, BTW. syscall
быстрее, чем пропустить кеш (за исключением того, что он не конвейерный, и фактически сбрасывает весь конвейер, то есть уровень привилегий не переименовывается.)