[U-Boot] Performance problems with gunzip

Hello,
I try to unzip a WinCE kernel with the U-Boot gunzip routine. It is working, but it takes roughly 1min to uncompress a 10MB zip file. I am working with a PXA270 platform. What could be the reason for the worst performance?
Thanks, Andreas

Hi Andreas,
I try to unzip a WinCE kernel with the U-Boot gunzip routine. It is working, but it takes roughly 1min to uncompress a 10MB zip file. I am working with a PXA270 platform. What could be the reason for the worst performance?
Very likely the disabled instruction and data caches. Not that I know for sure, but I'm pretty confident that either both or at least the data cache is not enabled per default.
There was some discussion about enabling them, but the work never got done IIRC.
Cheers Detlev

Hi Detlev,
thanks for the fast response. How do I enable data caches?
Regards, Andreas
-----Ursprüngliche Nachricht----- Von: Detlev Zundel [mailto:dzu@denx.de] Gesendet: Freitag, 22. Januar 2010 15:45 An: A. Geisreiter Cc: u-boot@lists.denx.de Betreff: Re: [U-Boot] Performance problems with gunzip
Hi Andreas,
I try to unzip a WinCE kernel with the U-Boot gunzip routine. It is
working,
but it takes roughly 1min to uncompress a 10MB zip file. I am working with a PXA270 platform. What could be the reason for the
worst
performance?
Very likely the disabled instruction and data caches. Not that I know for sure, but I'm pretty confident that either both or at least the data cache is not enabled per default.
There was some discussion about enabling them, but the work never got done IIRC.
Cheers Detlev

Hi Andreas,
thanks for the fast response. How do I enable data caches?
I fear this is not as easy as flipping a bit in a register. Depending on the platform caches tend to be tied to the MMU, so enabling the caches require setting up correct data structures for the MMU to work. That's the non-trivial work.
Apart from that, there is CONFIG_CMD_CACHE which builds common/cmd_cache.c. I see that at least two PXA250 platforms enable this, so maybe simply try that?
Moreover, a quick qoogle showed that the (non-mainline) Gumstix verdex (PXA270) U-Boot port has a dcache command:
http://docwiki.gumstix.org/index.php/U-Boot
Maybe you can reap the code from their repository. If you do, please post it here ;)
Cheers Detlev

I fear this is not as easy as flipping a bit in a register. Depending on the platform caches tend to be tied to the MMU, so enabling the caches require setting up correct data structures for the MMU to work. That's the non-trivial work.
Not that difficult, either. You just need to fill the top-level page table for 1MB sections (4096 sections = 16k bytes, which must be aligned on a 16k boundary).
Apart from that, there is CONFIG_CMD_CACHE which builds common/cmd_cache.c. I see that at least two PXA250 platforms enable this, so maybe simply try that?
I think it's always disabled on arm, for the mmu reason.
Maybe you can reap the code from their repository. If you do, please post it here ;)
Or I can cook an RFC patch later, after redoing the 8815 patches. I was just considering trying it these days, as I've done the same on another straight-on-iron project and it's not that difficult.
/alessandro

Hi Alessandro,
I fear this is not as easy as flipping a bit in a register. Depending on the platform caches tend to be tied to the MMU, so enabling the caches require setting up correct data structures for the MMU to work. That's the non-trivial work.
Not that difficult, either.
I never said it was difficult, only non-trivial :)
You just need to fill the top-level page table for 1MB sections (4096 sections = 16k bytes, which must be aligned on a 16k boundary).
Apart from that, there is CONFIG_CMD_CACHE which builds common/cmd_cache.c. I see that at least two PXA250 platforms enable this, so maybe simply try that?
I think it's always disabled on arm, for the mmu reason.
Maybe you can reap the code from their repository. If you do, please post it here ;)
Or I can cook an RFC patch later, after redoing the 8815 patches. I was just considering trying it these days, as I've done the same on another straight-on-iron project and it's not that difficult.
I am looking forward to something like this for a long time now and I'm sure other people will value it too, so thanks in advance! Detlev

I never said it was difficult, only non-trivial :)
Not trivial, actually.
I am looking forward to something like this for a long time now and I'm sure other people will value it too, so thanks in advance!
It's still not working, but _I_ am working on it again after the weekend.
/alessandro

Hi Detlev,
thanks for the help. I have tried CONFIG_CMD_CACHE but this doesn't work, because dcache_enable() is not implemented for PXA.
Then I tried to get the U-Boot source code for Gumstix verdex project, but I can't find it. Where can I download this?
Regards, Andreas
-----Ursprüngliche Nachricht----- Von: Detlev Zundel [mailto:dzu@denx.de] Gesendet: Freitag, 22. Januar 2010 16:20 An: A. Geisreiter Cc: u-boot@lists.denx.de Betreff: Re: AW: [U-Boot] Performance problems with gunzip
Hi Andreas,
thanks for the fast response. How do I enable data caches?
I fear this is not as easy as flipping a bit in a register. Depending on the platform caches tend to be tied to the MMU, so enabling the caches require setting up correct data structures for the MMU to work. That's the non-trivial work.
Apart from that, there is CONFIG_CMD_CACHE which builds common/cmd_cache.c. I see that at least two PXA250 platforms enable this, so maybe simply try that?
Moreover, a quick qoogle showed that the (non-mainline) Gumstix verdex (PXA270) U-Boot port has a dcache command:
http://docwiki.gumstix.org/index.php/U-Boot
Maybe you can reap the code from their repository. If you do, please post it here ;)
Cheers Detlev
participants (3)
-
A. Geisreiter
-
Alessandro Rubini
-
Detlev Zundel