Difference between revisions of "To Thumb or Not to Thumb"

From CDOT Wiki
Jump to: navigation, search
 
(37 intermediate revisions by 2 users not shown)
Line 2: Line 2:
  
 
To Thumb? or Not to Thumb?
 
To Thumb? or Not to Thumb?
 +
 +
  
 
== Project Description ==
 
== Project Description ==
  
 
Fedora-ARM does not use thumb. The purpose of this project is to discover whether thumb provides any significant savings in terms of code size, whether programs compiled to thumb execute more quickly or more slowly than non-thumb programs on common ARM processors, whether a thumb compilation takes more or less time than non-thumb, and whether there are any other factors that would influence the decision to support thumb. Ultimately, this project should make a recommendation on the use of the thumb instruction set for the Fedora-ARM secondary architecture.
 
Fedora-ARM does not use thumb. The purpose of this project is to discover whether thumb provides any significant savings in terms of code size, whether programs compiled to thumb execute more quickly or more slowly than non-thumb programs on common ARM processors, whether a thumb compilation takes more or less time than non-thumb, and whether there are any other factors that would influence the decision to support thumb. Ultimately, this project should make a recommendation on the use of the thumb instruction set for the Fedora-ARM secondary architecture.
 +
 +
  
 
== Project Leader(s) ==
 
== Project Leader(s) ==
  
I will be working alone for this project. My name is Tae Hee (Tyler) Lee.
+
I will be working alone for this project.
 +
 
 +
My name is Tae Hee (Tyler) Lee and I'm taking SBR600 course in 2010 Winter Semester.
 +
 
 +
Blog @ http://tyler-taehee-lee.blogspot.com/search/label/SBR600
  
 
thlee3 @ FAS2
 
thlee3 @ FAS2
Line 19: Line 27:
 
thlee3@learn.senecac.on.ca
 
thlee3@learn.senecac.on.ca
  
== Project Details ==
 
  
To be added.
 
  
== Resources ==
+
== What I need to learn ==
 
 
ARM Architecture - http://en.wikipedia.org/wiki/ARM_architecture#Thumb
 
  
Introduction to ARM thumb - http://www.eetimes.com/discussion/other/4024632/Introduction-to-ARM-thumb
+
- rpmbuild
 +
- /usr/lib/rpm/redhat/rpmrc
 +
- /usr/lib/rpm/redhat/macros
 +
- time
 +
- screen
 +
- yumdownloader
 +
- rpm2cpio
  
== What I need to learn ==
 
  
Pretty much everything from the scratch. It seems like this project requires lots of background information such as RISC, CISC, Instruction set, Register set, different versions of ARM architecture versions, armv5tel and newer ( and better) models and etc.
 
  
 
== Project Plan ==
 
== Project Plan ==
  
 
Goals for each release:
 
Goals for each release:
* 0.1
+
* 0.1 Determine whether THUMB gives advantage in file size compared to NON-THUMB.
* 0.2
+
* 0.2 Compare and contrast file sizes between NON-THUMB, THUMB and THUMB2.
* 0.3
+
* 0.3 Compare the performance of software compiled with THUMB and NON-THUMB
 +
 
 +
 
 +
 
 +
== Collaboration with classmates ==
 +
 
 +
I collaborated with [http://zenit.senecac.on.ca/wiki/index.php/User:Mjeamiguel Mark Eamiguel]. We made arrangements so that I used ''cdot-beagleXM-0-3'' during the day time, and he used during the night to avoid interruption on our benchmarks. There was one night our works on that machine became useless since both of us were compiling at the same time which caused performance drop. We also gave each other tips on working with these remote systems, such as using application ''screen'' and command ''who''.
 +
 
 +
 
 +
 
 +
== Test results ==
 +
 
 +
'''Following are the table of file sizes that are produced by ''rpmbuild'' in bytes.'''
 +
 
 +
<br />
 +
<div><b>nled-2.52</b></div><div>Produced RPM: '''nled-2.52-6.fc12.armv5tel.rpm'''</div><div>Directories and files: 2 directories, 1 file</div><div>Binary File: '''usr/bin/nled'''</div>
 +
 
 +
{| cellspacing="2" cellpadding="2" border="1"
 +
|-
 +
|
 +
| align="center" | '''w/o Thumb'''
 +
| align="center" | '''THUMB'''
 +
| align="center" | '''THUMB2'''
 +
| align="center" | '''THUMB / NON-THUMB'''
 +
| align="center" | '''THUMB / THUMB2'''
 +
|-
 +
| '''RPM'''
 +
| align="right" | 20776
 +
| align="right" | 20204
 +
| align="right" | 20328
 +
| align="right" | 0.9724
 +
| align="right" | 0.9939
 +
|-
 +
| '''Directory'''
 +
| align="right" | 50892
 +
| align="right" | 43084
 +
| align="right" | 42684
 +
| align="right" | 0.8465
 +
| align="right" | 1.0093
 +
|-
 +
| '''Binary'''
 +
| align="right" | 38604
 +
| align="right" | 30796
 +
| align="right" | 30396
 +
| align="right" | 0.7977
 +
| align="right" | 1.0131
 +
|}
 +
<br />
 +
<br />
 +
<div><b>wget-1.11.4</b></div><div>Produced RPM: '''wget-1.11.4-5.fc12.armv5tel.rpm'''</div><div>Directories and files: 86 directories, 48 files</div><div>Binary File: '''usr/bin/wget'''</div>
 +
{| cellspacing="2" cellpadding="2" border="1"
 +
|-
 +
|
 +
| align="center" | '''w/o Thumb'''
 +
| align="center" | '''THUMB'''
 +
| align="center" | '''THUMB2'''
 +
| align="center" | '''THUMB / NON-THUMB'''
 +
| align="center" | '''THUMB / THUMB2'''
 +
|-
 +
| '''RPM'''
 +
| align="right" | 422360
 +
| align="right" | 420788
 +
| align="right" | 419852
 +
| align="right" | 0.9962
 +
| align="right" | 1.0022
 +
|-
 +
| '''Directory'''
 +
| align="right" | 1863679
 +
| align="right" | 1811467
 +
| align="right" | 1810431
 +
| align="right" | 0.9719
 +
| align="right" | 1.0006
 +
|-
 +
| '''Binary'''
 +
| align="right" | 226464
 +
| align="right" | 174252
 +
| align="right" | 173216
 +
| align="right" | 0.7694
 +
| align="right" | 1.0060
 +
|}
 +
 
 +
<br />
 +
<br />
 +
 
 +
<div><b>httpd-2.2.13</b></div><div>Produced RPM: '''httpd-2.2.13-4.fc12.armv5tel.rpm'''</div><div>Directories and files: 37 directories, 334 files</div><div>Binary File: '''usr/sbin/httpd'''</div><div>
 +
</div>
 +
 
 +
{| cellspacing="2" cellpadding="2" border="1"
 +
|-
 +
|
 +
| align="center" | '''w/o Thumb'''
 +
| align="center" | '''THUMB'''
 +
| align="center" | '''THUMB2'''
 +
| align="center" | '''THUMB / NON-THUMB'''
 +
| align="center" | '''THUMB / THUMB2'''
 +
|-
 +
| '''RPM'''
 +
| align="right" | 748180
 +
| align="right" | 738632
 +
| align="right" | 736500
 +
| align="right" | 0.9872
 +
| align="right" | 1.0029
 +
|-
 +
| '''Directory'''
 +
| align="right" | 2752985
 +
| align="right" | 2425373
 +
| align="right" | 2408025
 +
| align="right" | 0.8810
 +
| align="right" | 1.0072
 +
|-
 +
| '''Binary'''
 +
| align="right" | 287988
 +
| align="right" | 233660
 +
| align="right" | 229712
 +
| align="right" | 0.8113
 +
| align="right" | 1.0172
 +
|}
 +
 
 +
<br />
 +
<br />
 +
 
 +
<div><b>gimp-2.6.7</b></div><div>Produced RPM: '''gimp-2.6.7-2.fc12.armv5tel.rpm'''</div><div>Directories and files: 206 directories, 1204 files</div><div>Binary File 1: '''usr/bin/gimp-2.6'''</div><div>Binary File 2: '''usr/bin/gimp-console-2.6'''</div><div>
 +
</div>
 +
 
 +
{| cellspacing="2" cellpadding="2" border="1"
 +
|-
 +
|
 +
| align="center" | '''w/o Thumb'''
 +
| align="center" | '''THUMB'''
 +
| align="center" | '''THUMB2'''
 +
| align="center" | '''THUMB / NON-THUMB'''
 +
| align="center" | '''THUMB / THUMB2'''
 +
|-
 +
| '''RPM'''
 +
| align="right" | 12423104
 +
| align="right" | 12431184
 +
| align="right" | 12350600
 +
| align="right" | 1.0006
 +
| align="right" | 1.0065
 +
|-
 +
| '''Directory'''
 +
| align="right" | 45780103
 +
| align="right" | 43891439
 +
| align="right" | 43730427
 +
| align="right" | 0.9587
 +
| align="right" | 1.0037
 +
|-
 +
| '''Binary 1'''
 +
| align="right" | 4284848
 +
| align="right" | 3450936
 +
| align="right" | 3371440
 +
| align="right" | 0.8054
 +
| align="right" | 1.0236
 +
|-
 +
| '''Binary 2'''
 +
| align="right" | 2131228
 +
| align="right" | 1688860
 +
| align="right" | 1656092
 +
| align="right" | 0.7924
 +
| align="right" | 1.0198
 +
|}
 +
 
 +
<br />
 +
<br />
 +
 
 +
<div><b>abiword-2.8.1</b></div><div>Produced RPM: '''libabiword-2.8.1-1.fc12.armv5tel.rpm'''</div><div>Directories and files: 39 directories, 617 files</div><div>Binary File: '''usr/lib/libabiword-2.8'''</div><div>
 +
</div>
 +
 
 +
{| cellspacing="2" cellpadding="2" border="1"
 +
|-
 +
|
 +
| align="center" | '''w/o Thumb'''
 +
| align="center" | '''THUMB'''
 +
| align="center" | '''THUMB2'''
 +
| align="center" | '''THUMB / NON-THUMB'''
 +
| align="center" | '''THUMB / THUMB2'''
 +
|-
 +
| '''RPM'''
 +
| align="right" | 5561088
 +
| align="right" | 4779800
 +
| align="right" | 4742828
 +
| align="right" | 0.8595
 +
| align="right" | 1.0078
 +
|-
 +
| '''Directory'''
 +
| align="right" | 21295155
 +
| align="right" | 17055836
 +
| align="right" | 16987340
 +
| align="right" | 0.8009
 +
| align="right" | 1.0040
 +
|-
 +
| '''Binary'''
 +
| align="right" | 5806908
 +
| align="right" | 3450936
 +
| align="right" | 3371440
 +
| align="right" | 0.5943
 +
| align="right" | 1.0236
 +
|}
 +
 
 +
<br />
 +
<br />
 +
 
 +
<div><b>tar-1.22</b></div><div>Produced RPM: '''tar-1.22-8.fc12.armv5tel.rpm'''</div><div>Directories and files: 79 directories, 49 files</div><div>Binary File: '''bin/tar'''</div><div>
 +
</div>
 +
 
 +
{| cellspacing="2" cellpadding="2" border="1"
 +
|-
 +
|
 +
| align="center" | '''w/o Thumb'''
 +
| align="center" | '''THUMB'''
 +
| align="center" | '''THUMB2'''
 +
| align="center" | '''THUMB / NON-THUMB'''
 +
| align="center" | '''THUMB / THUMB2'''
 +
|-
 +
| '''RPM'''
 +
| align="right" | 744340
 +
| align="right" | 742784
 +
| align="right" | 742180
 +
| align="right" | 0.9979
 +
| align="right" | 1.0008
 +
|-
 +
| '''Directory'''
 +
| align="right" | 2737195
 +
| align="right" | 2681159
 +
| align="right" | 2675975
 +
| align="right" | 0.9795
 +
| align="right" | 1.0019
 +
|-
 +
| '''Binary'''
 +
| align="right" | 251844
 +
| align="right" | 195808
 +
| align="right" | 190624
 +
| align="right" | 0.7775
 +
| align="right" | 1.0272
 +
|}
 +
 
 +
<br />
 +
<br />
 +
 
 +
<div><b>cpio-2.10</b></div><div>Produced RPM: '''cpio-2.10-5.fc12.armv5tel.rpm'''</div><div>Directories and files: 49 directories, 30 files</div><div>Binary File: '''bin/cpio'''</div>
 +
 
 +
{| cellspacing="2" cellpadding="2" border="1"
 +
|-
 +
|
 +
| align="center" | '''w/o Thumb'''
 +
| align="center" | '''THUMB'''
 +
| align="center" | '''THUMB / NON-THUMB'''
 +
|-
 +
| '''RPM'''
 +
| align="right" | 189908
 +
| align="right" | 189276
 +
| align="right" | 0.9967
 +
|-
 +
| '''Directory'''
 +
| align="right" | 842194
 +
| align="right" | 816194
 +
| align="right" | 0.9691
 +
|-
 +
| '''Binary'''
 +
| align="right" | 117064
 +
| align="right" | 91064
 +
| align="right" | 0.7779
 +
|}
 +
 
 +
<br />
 +
<br />
 +
 
 +
<div><b>gzip-1.3.12</b></div><div>Produced RPM: '''gzip-1.3.12-15.fc12.armv5tel.rpm'''</div><div>Directories and files: 9 directories, 33 files</div><div>Binary File: '''bin/gzip'''</div>
 +
 
 +
{| cellspacing="2" cellpadding="2" border="1"
 +
|-
 +
|
 +
| align="center" | '''w/o Thumb'''
 +
| align="center" | '''THUMB'''
 +
| align="center" | '''THUMB / NON-THUMB'''
 +
|-
 +
| '''RPM'''
 +
| align="right" | 116560
 +
| align="right" | 115736
 +
| align="right" | 0.9929
 +
|-
 +
| '''Directory'''
 +
| align="right" | 263922
 +
| align="right" | 252086
 +
| align="right" | 0.9551
 +
|-
 +
| '''Binary'''
 +
| align="right" | 61708
 +
| align="right" | 49872
 +
| align="right" | 0.8082
 +
|}
 +
 
 +
<br />
 +
<br />
 +
 
 +
<div><b>bzip2-1.0.5</b></div><div>Produced RPM: '''bzip2-1.0.5-6.fc12.armv5tel.rpm'''</div><div>Directories and files: 7 directories, 21 files</div><div>Binary File: '''/usr/bin/bzip2'''</div>
 +
 
 +
{| cellspacing="2" cellpadding="2" border="1"
 +
|-
 +
|
 +
| align="center" | '''w/o Thumb'''
 +
| align="center" | '''THUMB'''
 +
| align="center" | '''THUMB / NON-THUMB'''
 +
|-
 +
| '''RPM'''
 +
| align="right" | 49476
 +
| align="right" | 49232
 +
| align="right" | 0.9951
 +
|-
 +
| '''Directory'''
 +
| align="right" | 109233
 +
| align="right" | 103449
 +
| align="right" | 0.9470
 +
|-
 +
| '''Binary'''
 +
| align="right" | 33024
 +
| align="right" | 28076
 +
| align="right" | 0.8502
 +
|}
 +
 
 +
 
 +
 
 +
 
 +
'''The following are product of ''time'' command followed by software that are recompiled using ''rpmbuild'' with/without THUMB.'''
 +
 
 +
 
 +
<div>System: '''cdot-guru-4-1'''</div><div>File: '''Extracted openoffice.org-3.1.1-19.34.fc12.src.rpm'''</div><div>Command Used: '''time ./tar -cvf nothumb.tar ~/temp'''</div><div>
 +
</div>
 +
 
 +
{| cellspacing="2" cellpadding="2" border="1"
 +
|-
 +
|
 +
| align="center" | '''w/o Thumb'''
 +
| align="center" | '''THUMB'''
 +
|-
 +
| '''1st Attempt'''
 +
| align="right" | real 0m33.013s<br />user 0m0.090s<br />sys 0m3.800s
 +
| align="right" | real 0m45.746s<br />user 0m0.170s<br />sys 0m3.710s
 +
|-
 +
| '''2nd Attempt'''
 +
| align="right" | real 0m38.410s<br />user 0m0.150s<br />sys 0m3.860s
 +
| align="right" | real 0m40.039s<br />user 0m0.130s<br />sys 0m3.760s
 +
|-
 +
| '''3rd Attempt'''
 +
| align="right" | real 0m37.572s<br />user 0m0.110s<br />sys 0m3.820s
 +
| align="right" | real 0m42.034s<br />user 0m0.140s<br />sys 0m3.820s
 +
|-
 +
| '''4th Attempt'''
 +
| align="right" | real 0m36.934s<br />user 0m0.150s<br />sys 0m3.670s
 +
| align="right" | real 0m43.051s<br />user 0m0.100s<br />sys 0m3.830s
 +
|}
 +
 
 +
 
 +
<br />
 +
<br />
 +
<div>System: '''cdot-guru-4-1'''</div><div>File: '''nothumb.tar'''</div><div>Command Used: '''time ~/tar.mthumb-interwork/bin/tar -xvf nothumb.tar'''</div><div>
 +
</div>
 +
 
 +
{| cellspacing="2" cellpadding="2" border="1"
 +
|-
 +
|
 +
| align="center" | '''w/o Thumb'''
 +
| align="center" | '''THUMB'''
 +
|-
 +
| '''1st Attempt'''
 +
| align="right" | real 0m48.399s<br />user 0m0.170s<br />sys 0m3.560s
 +
| align="right" | real 0m54.197s<br />user 0m0.160s<br />sys 0m3.480s
 +
|-
 +
| '''2nd Attempt'''
 +
| align="right" | real 0m46.306s<br />user 0m0.170s<br />sys 0m3.280s
 +
| align="right" | real 0m48.234s<br />user 0m0.160s<br />sys 0m3.680s
 +
|-
 +
| '''3rd Attempt'''
 +
| align="right" | real 0m45.602s<br />user 0m0.130s<br />sys 0m3.800s
 +
| align="right" | real 0m49.501s<br />user 0m0.150s<br />sys 0m3.490s
 +
|-
 +
| '''4th Attempt'''
 +
| align="right" | real 0m46.546s<br />user 0m0.110s<br />sys 0m3.420s
 +
| align="right" | real 0m52.897s<br />user 0m0.120s<br />sys 0m3.460s
 +
|}
 +
 
 +
<br />
 +
<br />
 +
<div>System: '''cdot-guru-4-1'''</div><div>File: '''gimp.tar (44MB)'''</div><div>Command Used: '''time ./bzip2 ~/gimp.tar'''</div><div>
 +
</div>
 +
 
 +
{| cellspacing="2" cellpadding="2" border="1"
 +
|-
 +
|
 +
| align="center" | '''w/o Thumb'''
 +
| align="center" | '''THUMB'''
 +
|-
 +
| '''1st Attempt'''
 +
| align="right" | real    1m4.616s<br />user    0m59.250s<br />sys    0m0.650s
 +
| align="right" | real    1m1.379s<br />user    0m57.240s<br />sys    0m0.720s
 +
|-
 +
| '''2nd Attempt'''
 +
| align="right" | real    1m4.985s<br />user    1m0.530s<br />sys    0m0.790s
 +
| align="right" | real    0m59.899s<br />user    0m57.190s<br />sys    0m0.600s
 +
|-
 +
| '''3rd Attempt'''
 +
| align="right" | real    1m5.214s<br />user    0m58.050s<br />sys    0m0.620s
 +
| align="right" | real    1m7.306s<br />user    1m0.100s<br />sys    0m0.530s
 +
|-
 +
| '''4th Attempt'''
 +
| align="right" | real    1m4.292s<br />user    0m56.880s<br />sys    0m0.700s
 +
| align="right" | real    1m4.859s<br />user    0m57.690s<br />sys    0m0.770s
 +
|-
 +
| '''5th Attempt'''
 +
| align="right" | real    0m59.811s<br />user    0m57.520s<br />sys    0m0.470s
 +
| align="right" | real    1m1.930s<br />user    0m57.210s<br />sys    0m0.540s
 +
|-
 +
| '''6th Attempt'''
 +
| align="right" | real    1m3.452s<br />user    0m57.040s<br />sys    0m0.590s
 +
| align="right" | real    1m1.532s<br />user    0m57.930s<br />sys    0m0.790s
 +
|-
 +
| '''7th Attempt'''
 +
| align="right" | real    1m0.604s<br />user    0m57.710s<br />sys    0m0.650s
 +
| align="right" | real    1m2.430s<br />user    0m57.420s<br />sys    0m0.730s
 +
|}
 +
 
 +
<br />
 +
<br />
 +
<div>System: '''cdot-guru-4-1'''</div><div>File: '''gimp.tar.bz2'''</div><div>Command Used: '''time ./bzip2 -d ~/gimp.tar.bz2'''</div><div>
 +
</div>
 +
 
 +
{| cellspacing="2" cellpadding="2" border="1"
 +
|-
 +
|
 +
| align="center" | '''w/o Thumb'''
 +
| align="center" | '''THUMB'''
 +
|-
 +
| '''1st Attempt'''
 +
| align="right" | real    0m18.828s<br />user    0m17.430s<br />sys    0m0.820s
 +
| align="right" | real    0m19.662s<br />user    0m17.850s<br />sys    0m0.990s
 +
|-
 +
| '''2nd Attempt'''
 +
| align="right" | real    0m19.549s<br />user    0m17.610s<br />sys    0m1.160s
 +
| align="right" | real    0m19.647s<br />user    0m17.940s<br />sys    0m0.850s
 +
|-
 +
| '''3rd Attempt'''
 +
| align="right" | real    0m19.462s<br />user    0m17.600s<br />sys    0m0.950s
 +
| align="right" | real    0m19.271s<br />user    0m17.620s<br />sys    0m0.870s
 +
|-
 +
| '''4th Attempt'''
 +
| align="right" | real    0m23.303s<br />user    0m17.800s<br />sys    0m0.850s
 +
| align="right" | real    0m22.863s<br />user    0m17.290s<br />sys    0m1.120s
 +
|-
 +
| '''5th Attempt'''
 +
| align="right" | real    0m24.544s<br />user    0m18.120s<br />sys    0m1.060s
 +
| align="right" | real    0m19.155s<br />user    0m17.560s<br />sys    0m1.030s
 +
|-
 +
| '''6th Attempt'''
 +
| align="right" | real    0m19.397s<br />user    0m17.540s<br />sys    0m0.800s
 +
| align="right" | real    0m22.998s<br />user    0m17.400s<br />sys    0m0.970s
 +
|-
 +
| '''7th Attempt'''
 +
| align="right" | real    0m19.462s<br />user    0m17.460s<br />sys    0m1.090s
 +
| align="right" | real    0m19.688s<br />user    0m17.910s<br />sys    0m0.870s
 +
|}
 +
 
 +
<br />
 +
<br />
 +
<div>System: '''cdot-guru-4-1'''</div><div>File: '''gimp.tar'''</div><div>Command Used: '''time ./gzip ~/gimp.tar'''</div><div>
 +
</div>
 +
 
 +
{| cellspacing="2" cellpadding="2" border="1"
 +
|-
 +
|
 +
| align="center" | '''w/o Thumb'''
 +
| align="center" | '''THUMB'''
 +
|-
 +
| '''1st Attempt'''
 +
| align="right" | real    0m32.809s<br />user    0m30.620s<br />sys    0m0.780s
 +
| align="right" | real    0m35.226s<br />user    0m33.390s<br />sys    0m0.770s
 +
|-
 +
| '''2nd Attempt'''
 +
| align="right" | real    0m43.640s<br />user    0m38.300s<br />sys    0m0.790s
 +
| align="right" | real    0m38.300s<br />user    0m34.380s<br />sys    0m0.650s
 +
|-
 +
| '''3rd Attempt'''
 +
| align="right" | real    0m45.471s<br />user    0m33.280s<br />sys    0m0.670s
 +
| align="right" | real    0m42.994s<br />user    0m36.880s<br />sys    0m0.710s
 +
|-
 +
| '''4th Attempt'''
 +
| align="right" | real    0m42.212s<br />user    0m32.690s<br />sys    0m0.510s
 +
| align="right" | real    0m41.896s<br />user    0m34.540s<br />sys    0m0.740s
 +
|-
 +
| '''5th Attempt'''
 +
| align="right" | real    0m43.309s<br />user    0m31.400s<br />sys    0m0.740s
 +
| align="right" | real    0m39.998s<br />user    0m35.240s<br />sys    0m0.840s
 +
|-
 +
| '''6th Attempt'''
 +
| align="right" | real    0m45.217s<br />user    0m31.850s<br />sys    0m0.550s
 +
| align="right" | real    0m39.942s<br />user    0m34.540s<br />sys    0m0.670s
 +
|}
 +
 
 +
<div>
 +
 
 +
<br />
 +
<br />
 +
<div>System: '''cdot-guru-4-1'''</div><div>File: '''gimp.tar.gz'''</div><div>Command Used: '''time ./gzip -d ~/gimp.tar.gz'''</div><div>
 +
</div>
 +
 
 +
{| cellspacing="2" cellpadding="2" border="1"
 +
|-
 +
|
 +
| align="center" | '''w/o Thumb'''
 +
| align="center" | '''THUMB'''
 +
|-
 +
| '''1st Attempt'''
 +
| align="right" | real    0m3.341s<br />user    0m2.520s<br />sys    0m0.750s
 +
| align="right" | real    0m3.688s<br />user    0m3.040s<br />sys    0m0.530s
 +
|-
 +
| '''2nd Attempt'''
 +
| align="right" | real    0m3.702s<br />user    0m2.740s<br />sys    0m0.630s
 +
| align="right" | real    0m4.876s<br />user    0m2.950s<br />sys    0m0.650s
 +
|-
 +
| '''3rd Attempt'''
 +
| align="right" | real    0m3.372s<br />user    0m2.680s<br />sys    0m0.600s
 +
| align="right" | real    0m4.889s<br />user    0m2.970s<br />sys    0m0.580s
 +
|-
 +
| '''4th Attempt'''
 +
| align="right" | real    0m3.512s<br />user    0m2.760s<br />sys    0m0.470s
 +
| align="right" | real    0m4.800s<br />user    0m2.890s<br />sys    0m0.650s
 +
|-
 +
| '''5th Attempt'''
 +
| align="right" | real    0m4.413s<br />user    0m2.800s<br />sys    0m0.470s
 +
| align="right" | real    0m4.016s<br />user    0m2.930s<br />sys    0m0.620s
 +
|-
 +
| '''6th Attempt'''
 +
| align="right" | real    0m3.316s<br />user    0m2.430s<br />sys    0m0.800s
 +
| align="right" | real    0m4.033s<br />user    0m2.960s<br />sys    0m0.640s
 +
|}
 +
 
 +
<br />
 +
<br />
 +
<div>System: '''cdot-guru-4-1'''</div><div>File: '''~/gimp/ (206 directories, 1204 files)'''</div><div>Command Used: '''time find ~/gimp/ -depth -print | ./cpio -ov -O ~/gimp.cpio'''</div><div>
 +
</div>
 +
 
 +
{| cellspacing="2" cellpadding="2" border="1"
 +
|-
 +
|
 +
| align="center" | '''w/o Thumb'''
 +
| align="center" | '''THUMB'''
 +
|-
 +
| '''1st Attempt'''
 +
| align="right" | real    0m7.311s<br />user    0m0.330s<br />sys    0m2.300s
 +
| align="right" | real    0m7.432s<br />user    0m0.290s<br />sys    0m2.480s
 +
|-
 +
| '''2nd Attempt'''
 +
| align="right" | real    0m8.064s<br />user    0m0.300s<br />sys    0m2.460s
 +
| align="right" | real    0m7.574s<br />user    0m0.230s<br />sys    0m2.510s
 +
|-
 +
| '''3rd Attempt'''
 +
| align="right" | real    0m6.415s<br />user    0m0.280s<br />sys    0m2.430s
 +
| align="right" | real    0m6.954s<br />user    0m0.300s<br />sys    0m2.510s
 +
|-
 +
| '''4th Attempt'''
 +
| align="right" | real    0m7.167s<br />user    0m0.250s<br />sys    0m2.500s
 +
| align="right" | real    0m7.129s<br />user    0m0.240s<br />sys    0m2.520s
 +
|-
 +
| '''5th Attempt'''
 +
| align="right" | real    0m8.562s<br />user    0m0.220s<br />sys    0m2.540s
 +
| align="right" | real    0m6.228s<br />user    0m0.290s<br />sys    0m2.500s
 +
|-
 +
| '''6th Attempt'''
 +
| align="right" | real    0m6.851s<br />user    0m0.210s<br />sys    0m2.580s
 +
| align="right" | real    0m7.883s<br />user    0m0.240s<br />sys    0m2.610s
 +
|-
 +
| '''7th Attempt'''
 +
| align="right" | real    0m7.382s<br />user    0m0.290s<br />sys    0m2.420s
 +
| align="right" | real    0m7.855s<br />user    0m0.320s<br />sys    0m2.430s
 +
|}
 +
</div>
 +
 
 +
 
 +
'''From a test performed on 2011-11-12 by CTyler:'''
 +
 
 +
........ -O2.. -g... -g stripped
 +
nonthumb 48576 98132 37900
 +
thumb... 40563 93107 29932
 +
 
 +
 
 +
 
 +
== Project Details ==
 +
 
 +
Based on the benchmarks, in average, THUMB reduced the sizes about,<div>'''2.24%''' for *.rpm files,</div><div>'''7.67%''' for extracted directories, and</div><div>'''22.16%''' for executables, compared to NON-THUMB.</div><div>While it might save some disk space for executable files, it doesn't make a big different for rpm packages since rpm has it's own compressing mechanism.</div>
 +
 
 +
Compared to THUMB2, In average, THUMB produced files that are about,<div>'''0.24%''' for *.rpm files,</div><div>'''0.45%''' for extracted directories, and</div><div>'''1.86%''' for executables, greater than THUMB2.</div><div>I noticed that THUMB produces files that are almost as small as THUMB2's products.</div>
 +
 
 +
Just based on file size comparison, THUMB does an excellent job shrinking the file size.
 +
 
 +
Performance benchmarks showed too much fluctuation in the result to provide a firm answer. At this point, my conclusion is that THUMB does not greatly effect in software's performance, but it varies depending on software.
 +
 
 +
So far I've seen more improvements than decrements from THUMB. As I'm aware of that more benchmarks are required before having an concrete answer, but for now it is safe to say that THUMB for Fedora-ARM is worth further development.
 +
 
 +
 
  
 
== Project News ==
 
== Project News ==
Line 45: Line 650:
  
 
October 14th, 2010 - Major project page update with more information.
 
October 14th, 2010 - Major project page update with more information.
 +
 +
November 5th, 2010 - To Thumb? or Not to Thumb? (v0.1)
 +
 +
November 12th, 2010 - Noticed v0.1 was incorrect. Tried a different approach compiling with make file.
 +
 +
November 15th, 2010 - Figured out '''%optflags''' is located in /usr/lib/rpm/redhat/rpmrc
 +
 +
November 20th, 2010 - Figured out that I was comparing the wrong *.rpm files. Started all over again.
 +
 +
November 27th, 2010 - Correct file size comparison and performance benchmarks updated.
 +
 +
December 7th, 2010 - Presentation regarding v0.3 to Chris Tyler and SBR600 class.
 +
 +
December 14th, 2010 - Project (v0.3) completed.
 +
 +
 +
 +
== Resources ==
 +
 +
ARM Architecture - http://en.wikipedia.org/wiki/ARM_architecture#Thumb
 +
 +
Introduction to ARM thumb - http://www.eetimes.com/discussion/other/4024632/Introduction-to-ARM-thumb

Latest revision as of 21:37, 15 December 2010

Project Name

To Thumb? or Not to Thumb?


Project Description

Fedora-ARM does not use thumb. The purpose of this project is to discover whether thumb provides any significant savings in terms of code size, whether programs compiled to thumb execute more quickly or more slowly than non-thumb programs on common ARM processors, whether a thumb compilation takes more or less time than non-thumb, and whether there are any other factors that would influence the decision to support thumb. Ultimately, this project should make a recommendation on the use of the thumb instruction set for the Fedora-ARM secondary architecture.


Project Leader(s)

I will be working alone for this project.

My name is Tae Hee (Tyler) Lee and I'm taking SBR600 course in 2010 Winter Semester.

Blog @ http://tyler-taehee-lee.blogspot.com/search/label/SBR600

thlee3 @ FAS2

thlee3 @ irc://irc.mozilla.org/seneca

Tyler.lee @ Open Source Seneca Wiki

thlee3@learn.senecac.on.ca


What I need to learn

- rpmbuild
- /usr/lib/rpm/redhat/rpmrc
- /usr/lib/rpm/redhat/macros
- time
- screen
- yumdownloader
- rpm2cpio


Project Plan

Goals for each release:

  • 0.1 Determine whether THUMB gives advantage in file size compared to NON-THUMB.
  • 0.2 Compare and contrast file sizes between NON-THUMB, THUMB and THUMB2.
  • 0.3 Compare the performance of software compiled with THUMB and NON-THUMB


Collaboration with classmates

I collaborated with Mark Eamiguel. We made arrangements so that I used cdot-beagleXM-0-3 during the day time, and he used during the night to avoid interruption on our benchmarks. There was one night our works on that machine became useless since both of us were compiling at the same time which caused performance drop. We also gave each other tips on working with these remote systems, such as using application screen and command who.


Test results

Following are the table of file sizes that are produced by rpmbuild in bytes.


nled-2.52
Produced RPM: nled-2.52-6.fc12.armv5tel.rpm
Directories and files: 2 directories, 1 file
Binary File: usr/bin/nled
w/o Thumb THUMB THUMB2 THUMB / NON-THUMB THUMB / THUMB2
RPM 20776 20204 20328 0.9724 0.9939
Directory 50892 43084 42684 0.8465 1.0093
Binary 38604 30796 30396 0.7977 1.0131



wget-1.11.4
Produced RPM: wget-1.11.4-5.fc12.armv5tel.rpm
Directories and files: 86 directories, 48 files
Binary File: usr/bin/wget
w/o Thumb THUMB THUMB2 THUMB / NON-THUMB THUMB / THUMB2
RPM 422360 420788 419852 0.9962 1.0022
Directory 1863679 1811467 1810431 0.9719 1.0006
Binary 226464 174252 173216 0.7694 1.0060



httpd-2.2.13
Produced RPM: httpd-2.2.13-4.fc12.armv5tel.rpm
Directories and files: 37 directories, 334 files
Binary File: usr/sbin/httpd
w/o Thumb THUMB THUMB2 THUMB / NON-THUMB THUMB / THUMB2
RPM 748180 738632 736500 0.9872 1.0029
Directory 2752985 2425373 2408025 0.8810 1.0072
Binary 287988 233660 229712 0.8113 1.0172



gimp-2.6.7
Produced RPM: gimp-2.6.7-2.fc12.armv5tel.rpm
Directories and files: 206 directories, 1204 files
Binary File 1: usr/bin/gimp-2.6
Binary File 2: usr/bin/gimp-console-2.6
w/o Thumb THUMB THUMB2 THUMB / NON-THUMB THUMB / THUMB2
RPM 12423104 12431184 12350600 1.0006 1.0065
Directory 45780103 43891439 43730427 0.9587 1.0037
Binary 1 4284848 3450936 3371440 0.8054 1.0236
Binary 2 2131228 1688860 1656092 0.7924 1.0198



abiword-2.8.1
Produced RPM: libabiword-2.8.1-1.fc12.armv5tel.rpm
Directories and files: 39 directories, 617 files
Binary File: usr/lib/libabiword-2.8
w/o Thumb THUMB THUMB2 THUMB / NON-THUMB THUMB / THUMB2
RPM 5561088 4779800 4742828 0.8595 1.0078
Directory 21295155 17055836 16987340 0.8009 1.0040
Binary 5806908 3450936 3371440 0.5943 1.0236



tar-1.22
Produced RPM: tar-1.22-8.fc12.armv5tel.rpm
Directories and files: 79 directories, 49 files
Binary File: bin/tar
w/o Thumb THUMB THUMB2 THUMB / NON-THUMB THUMB / THUMB2
RPM 744340 742784 742180 0.9979 1.0008
Directory 2737195 2681159 2675975 0.9795 1.0019
Binary 251844 195808 190624 0.7775 1.0272



cpio-2.10
Produced RPM: cpio-2.10-5.fc12.armv5tel.rpm
Directories and files: 49 directories, 30 files
Binary File: bin/cpio
w/o Thumb THUMB THUMB / NON-THUMB
RPM 189908 189276 0.9967
Directory 842194 816194 0.9691
Binary 117064 91064 0.7779



gzip-1.3.12
Produced RPM: gzip-1.3.12-15.fc12.armv5tel.rpm
Directories and files: 9 directories, 33 files
Binary File: bin/gzip
w/o Thumb THUMB THUMB / NON-THUMB
RPM 116560 115736 0.9929
Directory 263922 252086 0.9551
Binary 61708 49872 0.8082



bzip2-1.0.5
Produced RPM: bzip2-1.0.5-6.fc12.armv5tel.rpm
Directories and files: 7 directories, 21 files
Binary File: /usr/bin/bzip2
w/o Thumb THUMB THUMB / NON-THUMB
RPM 49476 49232 0.9951
Directory 109233 103449 0.9470
Binary 33024 28076 0.8502



The following are product of time command followed by software that are recompiled using rpmbuild with/without THUMB.


System: cdot-guru-4-1
File: Extracted openoffice.org-3.1.1-19.34.fc12.src.rpm
Command Used: time ./tar -cvf nothumb.tar ~/temp
w/o Thumb THUMB
1st Attempt real 0m33.013s
user 0m0.090s
sys 0m3.800s
real 0m45.746s
user 0m0.170s
sys 0m3.710s
2nd Attempt real 0m38.410s
user 0m0.150s
sys 0m3.860s
real 0m40.039s
user 0m0.130s
sys 0m3.760s
3rd Attempt real 0m37.572s
user 0m0.110s
sys 0m3.820s
real 0m42.034s
user 0m0.140s
sys 0m3.820s
4th Attempt real 0m36.934s
user 0m0.150s
sys 0m3.670s
real 0m43.051s
user 0m0.100s
sys 0m3.830s




System: cdot-guru-4-1
File: nothumb.tar
Command Used: time ~/tar.mthumb-interwork/bin/tar -xvf nothumb.tar
w/o Thumb THUMB
1st Attempt real 0m48.399s
user 0m0.170s
sys 0m3.560s
real 0m54.197s
user 0m0.160s
sys 0m3.480s
2nd Attempt real 0m46.306s
user 0m0.170s
sys 0m3.280s
real 0m48.234s
user 0m0.160s
sys 0m3.680s
3rd Attempt real 0m45.602s
user 0m0.130s
sys 0m3.800s
real 0m49.501s
user 0m0.150s
sys 0m3.490s
4th Attempt real 0m46.546s
user 0m0.110s
sys 0m3.420s
real 0m52.897s
user 0m0.120s
sys 0m3.460s



System: cdot-guru-4-1
File: gimp.tar (44MB)
Command Used: time ./bzip2 ~/gimp.tar
w/o Thumb THUMB
1st Attempt real 1m4.616s
user 0m59.250s
sys 0m0.650s
real 1m1.379s
user 0m57.240s
sys 0m0.720s
2nd Attempt real 1m4.985s
user 1m0.530s
sys 0m0.790s
real 0m59.899s
user 0m57.190s
sys 0m0.600s
3rd Attempt real 1m5.214s
user 0m58.050s
sys 0m0.620s
real 1m7.306s
user 1m0.100s
sys 0m0.530s
4th Attempt real 1m4.292s
user 0m56.880s
sys 0m0.700s
real 1m4.859s
user 0m57.690s
sys 0m0.770s
5th Attempt real 0m59.811s
user 0m57.520s
sys 0m0.470s
real 1m1.930s
user 0m57.210s
sys 0m0.540s
6th Attempt real 1m3.452s
user 0m57.040s
sys 0m0.590s
real 1m1.532s
user 0m57.930s
sys 0m0.790s
7th Attempt real 1m0.604s
user 0m57.710s
sys 0m0.650s
real 1m2.430s
user 0m57.420s
sys 0m0.730s



System: cdot-guru-4-1
File: gimp.tar.bz2
Command Used: time ./bzip2 -d ~/gimp.tar.bz2
w/o Thumb THUMB
1st Attempt real 0m18.828s
user 0m17.430s
sys 0m0.820s
real 0m19.662s
user 0m17.850s
sys 0m0.990s
2nd Attempt real 0m19.549s
user 0m17.610s
sys 0m1.160s
real 0m19.647s
user 0m17.940s
sys 0m0.850s
3rd Attempt real 0m19.462s
user 0m17.600s
sys 0m0.950s
real 0m19.271s
user 0m17.620s
sys 0m0.870s
4th Attempt real 0m23.303s
user 0m17.800s
sys 0m0.850s
real 0m22.863s
user 0m17.290s
sys 0m1.120s
5th Attempt real 0m24.544s
user 0m18.120s
sys 0m1.060s
real 0m19.155s
user 0m17.560s
sys 0m1.030s
6th Attempt real 0m19.397s
user 0m17.540s
sys 0m0.800s
real 0m22.998s
user 0m17.400s
sys 0m0.970s
7th Attempt real 0m19.462s
user 0m17.460s
sys 0m1.090s
real 0m19.688s
user 0m17.910s
sys 0m0.870s



System: cdot-guru-4-1
File: gimp.tar
Command Used: time ./gzip ~/gimp.tar
w/o Thumb THUMB
1st Attempt real 0m32.809s
user 0m30.620s
sys 0m0.780s
real 0m35.226s
user 0m33.390s
sys 0m0.770s
2nd Attempt real 0m43.640s
user 0m38.300s
sys 0m0.790s
real 0m38.300s
user 0m34.380s
sys 0m0.650s
3rd Attempt real 0m45.471s
user 0m33.280s
sys 0m0.670s
real 0m42.994s
user 0m36.880s
sys 0m0.710s
4th Attempt real 0m42.212s
user 0m32.690s
sys 0m0.510s
real 0m41.896s
user 0m34.540s
sys 0m0.740s
5th Attempt real 0m43.309s
user 0m31.400s
sys 0m0.740s
real 0m39.998s
user 0m35.240s
sys 0m0.840s
6th Attempt real 0m45.217s
user 0m31.850s
sys 0m0.550s
real 0m39.942s
user 0m34.540s
sys 0m0.670s



System: cdot-guru-4-1
File: gimp.tar.gz
Command Used: time ./gzip -d ~/gimp.tar.gz
w/o Thumb THUMB
1st Attempt real 0m3.341s
user 0m2.520s
sys 0m0.750s
real 0m3.688s
user 0m3.040s
sys 0m0.530s
2nd Attempt real 0m3.702s
user 0m2.740s
sys 0m0.630s
real 0m4.876s
user 0m2.950s
sys 0m0.650s
3rd Attempt real 0m3.372s
user 0m2.680s
sys 0m0.600s
real 0m4.889s
user 0m2.970s
sys 0m0.580s
4th Attempt real 0m3.512s
user 0m2.760s
sys 0m0.470s
real 0m4.800s
user 0m2.890s
sys 0m0.650s
5th Attempt real 0m4.413s
user 0m2.800s
sys 0m0.470s
real 0m4.016s
user 0m2.930s
sys 0m0.620s
6th Attempt real 0m3.316s
user 0m2.430s
sys 0m0.800s
real 0m4.033s
user 0m2.960s
sys 0m0.640s



System: cdot-guru-4-1
File: ~/gimp/ (206 directories, 1204 files)
Command Used: time find ~/gimp/ -depth -print | ./cpio -ov -O ~/gimp.cpio
w/o Thumb THUMB
1st Attempt real 0m7.311s
user 0m0.330s
sys 0m2.300s
real 0m7.432s
user 0m0.290s
sys 0m2.480s
2nd Attempt real 0m8.064s
user 0m0.300s
sys 0m2.460s
real 0m7.574s
user 0m0.230s
sys 0m2.510s
3rd Attempt real 0m6.415s
user 0m0.280s
sys 0m2.430s
real 0m6.954s
user 0m0.300s
sys 0m2.510s
4th Attempt real 0m7.167s
user 0m0.250s
sys 0m2.500s
real 0m7.129s
user 0m0.240s
sys 0m2.520s
5th Attempt real 0m8.562s
user 0m0.220s
sys 0m2.540s
real 0m6.228s
user 0m0.290s
sys 0m2.500s
6th Attempt real 0m6.851s
user 0m0.210s
sys 0m2.580s
real 0m7.883s
user 0m0.240s
sys 0m2.610s
7th Attempt real 0m7.382s
user 0m0.290s
sys 0m2.420s
real 0m7.855s
user 0m0.320s
sys 0m2.430s


From a test performed on 2011-11-12 by CTyler:

........ -O2.. -g... -g stripped
nonthumb 48576 98132 37900
thumb... 40563 93107 29932


Project Details

Based on the benchmarks, in average, THUMB reduced the sizes about,
2.24% for *.rpm files,
7.67% for extracted directories, and
22.16% for executables, compared to NON-THUMB.
While it might save some disk space for executable files, it doesn't make a big different for rpm packages since rpm has it's own compressing mechanism.
Compared to THUMB2, In average, THUMB produced files that are about,
0.24% for *.rpm files,
0.45% for extracted directories, and
1.86% for executables, greater than THUMB2.
I noticed that THUMB produces files that are almost as small as THUMB2's products.

Just based on file size comparison, THUMB does an excellent job shrinking the file size.

Performance benchmarks showed too much fluctuation in the result to provide a firm answer. At this point, my conclusion is that THUMB does not greatly effect in software's performance, but it varies depending on software.

So far I've seen more improvements than decrements from THUMB. As I'm aware of that more benchmarks are required before having an concrete answer, but for now it is safe to say that THUMB for Fedora-ARM is worth further development.


Project News

October 8th, 2010 - Project started

October 14th, 2010 - Major project page update with more information.

November 5th, 2010 - To Thumb? or Not to Thumb? (v0.1)

November 12th, 2010 - Noticed v0.1 was incorrect. Tried a different approach compiling with make file.

November 15th, 2010 - Figured out %optflags is located in /usr/lib/rpm/redhat/rpmrc

November 20th, 2010 - Figured out that I was comparing the wrong *.rpm files. Started all over again.

November 27th, 2010 - Correct file size comparison and performance benchmarks updated.

December 7th, 2010 - Presentation regarding v0.3 to Chris Tyler and SBR600 class.

December 14th, 2010 - Project (v0.3) completed.


Resources

ARM Architecture - http://en.wikipedia.org/wiki/ARM_architecture#Thumb

Introduction to ARM thumb - http://www.eetimes.com/discussion/other/4024632/Introduction-to-ARM-thumb