From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailserv2.iuinc.com (IDENT:qmailr@mailserv2.iuinc.com [206.245.164.55]) by puffin.external.hp.com (8.9.3/8.9.3) with SMTP id IAA07633 for ; Tue, 22 Aug 2000 08:39:52 -0600 Received: from user32-46.jakinternet.co.uk (HELO rhirst.linuxcare.com) (@212.41.32.46) by mailserv2.iuinc.com with SMTP; 22 Aug 2000 14:39:19 -0000 Received: by rhirst.linuxcare.com (Postfix, from userid 501) id 85B6AB005; Tue, 22 Aug 2000 15:38:03 +0100 (BST) Date: Tue, 22 Aug 2000 15:38:03 +0100 From: Richard Hirst To: parisc-linux@thepuffingroup.com Message-ID: <20000822153803.U4060@linuxcare.com> Mime-Version: 1.0 Content-Type: text/plain; charset=us-ascii Subject: [parisc-linux] 2.4.0-test6 lack of speed List-ID: I put some printk's in pgalloc.h: __flush_dcache_range: addr 0xc7e23000, size 4096 __flush_icache_range: addr 0xc7e23000, size 4096 __flush_icache_range: addr 0xc7e23000, size 4096 __flush_dcache_range: addr 0xc7da5000, size 4096 __flush_icache_range: addr 0xc7da5000, size 4096 __flush_dcache_range: addr 0x000bdc8c, size 4096 __flush_icache_range: addr 0x000bdc8c, size 4096 __flush_dcache_range: addr 0x40000000, size 4096 __flush_icache_range: addr 0x40000000, size 4096 __flush_dcache_range: addr 0xc7dc8000, size 4096 __flush_icache_range: addr 0xc7dc8000, size 4096 __flush_dcache_range: addr 0xc7dc8000, size 4096 __flush_icache_range: addr 0xc7dc8000, size 4096 __flush_icache_range: addr 0xc7dc8000, size 4096 __flush_dcache_range: addr 0x00001000, size 770048 __flush_icache_range: addr 0x00001000, size 770048 __flush_dcache_range: addr 0x000bd000, size 24576 __flush_icache_range: addr 0x000bd000, size 24576 __flush_dcache_range: addr 0x000c3000, size 102400 __flush_icache_range: addr 0x000c3000, size 102400 __flush_dcache_range: addr 0x2001f000, size 268308480 __flush_icache_range: addr 0x2001f000, size 268308480 __flush_dcache_range: addr 0x40100000, size 32768 __flush_icache_range: addr 0x40100000, size 32768 __flush_dcache_range: addr 0x40108000, size 1015808 __flush_icache_range: addr 0x40108000, size 1015808 __flush_dcache_range: addr 0x20022fac, size 4096 __flush_icache_range: addr 0x20022fac, size 4096 __flush_dcache_range: addr 0x00003594, size 2 __flush_dcache_range: addr 0xc7f986c8, size 2 > __flush_dcache_range: addr 0x2002300c, size 4096 __flush_icache_range: addr 0x2002300c, size 4096 Those two flushes of 268 Meg each take a while to run. There also appears to be a mix of virtual and physical addresses being passed to __flush_[id]cache_range(), which must be wrong. I believe they should be passed virtual addresses. pgtable.h is interesting as well: /* * cache_push() semantics: Write back any dirty cache data in the given area, * and invalidate the range in the instruction cache. It needs not (but may) * invalidate those entries also in the data cache. The range is defined by a * _physical_ address. */ #define cache_push(paddr, len) \ flush_cache_range(&init_mm, virt_to_phys(paddr), len) #define cache_push_v(vaddr, len) \ flush_cache_range(&init_mm, vaddr, len) I guess that virt_to_phys() should be a phys_to_virt().... Richard