load_LDT_nolock jumped up in the profiles in test4-mm6

From: John Levon
Date: Sun Sep 07 2003 - 16:52:16 EST



I'm running wine under test4-mm6. A new entry has appeared on oprofile's
vmlinux output :

c01133e0 183433 1.1259 13868 1.8282 load_LDT_nolock

(that's 1.12% of CPU time and 1.8% icache misses). It didn't even register a
sample in Linus' kernel.

Annotation :

278 :void load_LDT_nolock(mm_context_t *pc, int cpu)
279 12064 0.0523 3304 0.3166 :{ /* load_LDT_nolock total: 245997 1.0662 18382 1.7615 */
280 629 0.0027 222 0.0213 : struct page **pages = pc->ldt_pages;
281 1108 0.0048 327 0.0313 : int count = pc->size;
282 : int nr_pages, i;
283 :
284 646 0.0028 203 0.0195 : if (likely(!count)) {
285 45 2.0e-04 8 7.7e-04 : pages = &default_ldt_page;
286 622 0.0027 175 0.0168 : count = 5;
287 : }
288 1344 0.0058 475 0.0455 : nr_pages = (count*LDT_ENTRY_SIZE + PAGE_SIZE-1) / PAGE_SIZE;
289 :
290 69520 0.3013 4288 0.4109 : for (i = 0; i < nr_pages; i++) {
291 : __kunmap_atomic_type(KM_LDT_PAGE0 - i);
292 : __kmap_atomic(pages[i], KM_LDT_PAGE0 - i);
293 : }
294 : set_ldt_desc(cpu, (void *)__kmap_atomic_vaddr(KM_LDT_PAGE0), count);
295 1 4.3e-06 0 0.0e+00 : load_LDT_desc();
296 43320 0.1878 1041 0.0998 :}


and for the __kmap_atomic :

61 : /*
62 : * Performance optimization - do not flush if the new
63 : * pte is the same as the old one:
64 : */
65 69716 0.3022 2601 0.2492 : if (pte_val(*(kmap_pte-idx)) == pte_val(mk_pte(page, kmap_prot)))
66 : return (void *) vaddr;
67 :#endif
68 309 0.0013 29 0.0028 : set_pte(kmap_pte-idx, mk_pte(page, kmap_prot));
69 1568 0.0068 59 0.0057 : __flush_tlb_one(vaddr);
70 :

Obviously, I do not have any of the high mem options on at all.

Is there a fix for the overhead ?

regards
john
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/