diff --git a/kernel/devobj.c b/kernel/devobj.c index e4dad383..70a23e2f 100644 --- a/kernel/devobj.c +++ b/kernel/devobj.c @@ -231,6 +231,9 @@ static int devobj_get_page(struct memobj *memobj, off_t off, int p2align, uintpt memobj_lock(&obj->memobj); pfn = obj->pfn_table[ix]; +#ifdef PROFILE_ENABLE + profile_event_add(PROFILE_page_fault_dev_file, PAGE_SIZE); +#endif // PROFILE_ENABLE if (!(pfn & PFN_VALID)) { memobj_unlock(&obj->memobj); diff --git a/kernel/fileobj.c b/kernel/fileobj.c index 3c0ac50c..79c28ea1 100644 --- a/kernel/fileobj.c +++ b/kernel/fileobj.c @@ -487,6 +487,10 @@ static int fileobj_get_page(struct memobj *memobj, off_t off, return -ENOMEM; } +#ifdef PROFILE_ENABLE + profile_event_add(PROFILE_page_fault_file, PAGE_SIZE); +#endif // PROFILE_ENABLE + mcs_rwlock_writer_lock_noirq(&obj->page_hash_locks[hash], &mcs_node); page = __fileobj_page_hash_lookup(obj, hash, off); diff --git a/kernel/include/profile.h b/kernel/include/profile.h index d2ee8ab2..cdd33875 100644 --- a/kernel/include/profile.h +++ b/kernel/include/profile.h @@ -34,6 +34,8 @@ struct profile_event { enum profile_event_type { PROFILE_page_fault = PROFILE_EVENT_MIN, PROFILE_page_fault_anon_clr, + PROFILE_page_fault_file, + PROFILE_page_fault_dev_file, PROFILE_page_fault_file_clr, PROFILE_mpol_alloc_missed, PROFILE_mmap_anon_contig_phys, diff --git a/kernel/profile.c b/kernel/profile.c index 7853b2c0..aba2f985 100644 --- a/kernel/profile.c +++ b/kernel/profile.c @@ -59,6 +59,8 @@ char *profile_event_names[] = { "page_fault", "page_fault_anon_clr_mem", + "page_fault_file", + "page_fault_dev_file", "page_fault_file_clr_mem", "mpol_alloc_missed", "mmap_anon_contig_phys",