Student Application: Eleanor Chen
Name: Eleanor Chen
Contact/Email:
E-mail: chenyueg@gmail.com
- IRC: Destine (Freenode/OFTC)
Background:
- I am a senior student at Beijing Foreign Studies University in China, and I have been using Linux distributions for more than six years. I think I will make the best applicant because of the following reasons:
- I have some experience in Debian packaging and Multi-Arch. I also maintain a few packages now.
- I am familiar with sbuild, pbuilder, reprepro, and rebuildd.
- I am also familiar with git, git-buildpackage, hg, and Grub2.
- I have some experience with MIPS routers with OpenWRT, and I cross compiled some ROMs and other small applications for myself.
- I am a senior student at Beijing Foreign Studies University in China, and I have been using Linux distributions for more than six years. I think I will make the best applicant because of the following reasons:
Project title
- MIPS N32/N64 ABI Port
Project details
- MIPS is one of the most elegant designs in CPU industry, and there are quite a lot different usages in its family. This project attempts to create a new MIPS N32/N64 ABI port for Debian. Different from O32 (used by existing mips/mipsel port), N32 is an address model that has most 64-bit capabilities but uses 32-bit data structures to save space and process time, it is quite similar to the ongoing x32 port for x86 platform. At the same time, N64 is a full 64-bit address model which is comparable to x86_64 on x86. There is consensus that N32/N64 ABI would give capable devices better performance, while O32 ABI should be kept for devices that is only 32-bit capable. Since Multiarch support is almost available in Debian, we are able to apply the state-of-art technology to help us on both bootstrapping and future usages. Users can run N64 kernel with mixed N32/N64 userland to take advantage of both the performance and the large memory as needed.
Synopsis
- Create N32/N64 ports of Debian
Benefits to Debian
- Existing mips/mipsel ports are using the old/slow O32 ABI to keep compatible with most devices, and this project will enable modern MIPS devices to take advantage of better performance and larger memory space.
Deliverables
- Cross toolchains on at least amd64 for mips64 and mips64el systems.
- Running sbuild instances with mips64 and mips64el chroots (build-essential), resolve outstanding porting issues getting in the way of satisfying build-essential.
- Do a try build of the archive, attempting to meet the requirement of uploading to debian-ports.org. This could be limited by the performance of available developer box thus not guaranteed to cover 100%.
- A performance comparison of O32, N32 and N64 ABIs.
- If time and resource permits, also create similar setups for N32 ABIs.
- For the question from mentor:
A very basic idea of comparing performance between different ABIs is to run some tests and compare the time consumed by different copies of the same program on the same hardware. For the task given on the project requirements, amd64 and x32’s main difference is the shortened length of symbols to 32bit. I choose to run optipng against PNG images of the largest package in the archive - ns3-doc - to see if there is any significant time difference. There is 21589 PNG files in its build tree, and the selected command is optipng -preserve -quiet -fix -o 5 $pngfile as in the package’s debian/rules. Its maintainer said running those optimizations costs hours on a 24-core Xeon server on tmpfs. Fortunately my college’s NOC provided me access to a similar machine so that I can do the analysis in a not-so-long period of time. The result is an average of running the task for each ABI:
amd64: make -f optipng.mk -j 24 219711.05s user 107.83s system 2392% cpu 2:33:06.53 total
x32: make -f optipng.mk -j 24 223893.00s user 100.13s system 2391% cpu 2:36:04.32 total
- The difference is not obvious, and even amd64 costs less time. But there is an obvious reason that GCC has no optimization for x32 so far, while amd64 is well optimized. For MIPS architectures, n32 is much better optimized comparing with x32’s current status, so I believe it would make a difference.
Project schedule
- May 27 - June 16: Read relevant documentations, determine GCC default settings to use.
- May 17 - July 29:
- Create a set of cross-toolchain on amd64 using Multi-Arch crossbuild.
- Cross-compile native chroots until build-essential is satisfied.
- Write mid-term work summary.
- Aug 1 - Aug 31:
- Check and build kernel modules for porter boxes if needed.
- Native recompile of build-essential chroot packages for twice.
- Native try build of the archive.
- Sept 1 - Sept 15:
- Submit remaining bugs/patches.
- Deal with oversights that aren't handled yet.
- Plan/Prepare for submission to debian-ports.org.
- Sept 16 - July 25:
- Deal with any issue that aren't finished yet.
- Write final summary.
Exams and other commitments
- I have an intern job for about 16 hours per week.
Why Debian?
- Debian project is one of the largest open source community in the world, and the value of such a community is far beyond its product, the rock-solid Debian operating system. I would like to get closer to the project and participate this diverse community.
Are you applying for other projects in SoC?
- No.