|
From: Diego 'Flameeyes' Pettenò <flameeyes <at> gmail.com>
Subject: Copy-on-write pages statistics Newsgroups: gmane.comp.video.ffmpeg.devel Date: 2008-01-13 01:49:46 GMT (1 year, 24 weeks, 6 days, 13 hours and 45 minutes ago) So, since Mike asked me to see if I could write a script to make automated (or semi-automated, I suppose) the detection for tables that might be hardcoded, or need to be made constant, I've written a simple script, still rough for now, to get copy-on-write statistics out of ELF object files. The script reads the object files given at the command line, and check for the symbols that are present in .data.*, .data.rel.* and .bss sections. You can call them variables, as the functions would be in .text, and the constants in .rodata; .data.rel.ro would also contain constants from a C standpoint, but they are de-facto variables because of relocations. To get the script (and the Ruby extension it uses to parse ELF files), just clone my repository at git://flameeyes.is-a-geek.org/ruby-elf.git . Yes it's in Ruby, sorry but I already had the ELF parser there, and it's quite complete too, so I preferred using that even if it's probably slower than doing the whole thing in C. Note that this only works on ELF files, it's a limitation which is hard to get rid of unless someone wants to reimplement the logic using C and libbfd (from GNU binutils). To use this, run cowstats.rb --statistics libavcodec/*.o (for example). You might add the --total option to get some nice total sizes for the various sections. If you want to get details on a particular file, just run cowstats.rb libavcodec/h263.o, and it will tell you which symbols fall into the three considered categories. (and a bit of a nitpickery here, do you think that --statistics should be the default while --detail should be used for get detailed info?) Tomorrow (if the fever allows me), I'll see to write an ar parser in Ruby so that it can also check the object files inside static libraries without having to manually extract them, it should be interesting. I'm attaching the output of the run on my (partially patched) checkout of libavcodec, the results aren't great, but in comparison libvorbis (which is far from being as big as FFmpeg) has 54KB of writeable variables... File name | .data size | .bss size | .data.rel.* size enterprise/libavcodec/cavs_parser.o 0 0 64 enterprise/libavcodec/utils.o 0 32 0 enterprise/libavcodec/h264_parser.o 0 0 64 enterprise/libavcodec/ra144.o 0 0 96 enterprise/libavcodec/dpcm.o 0 0 384 enterprise/libavcodec/pngenc.o 24 0 96 enterprise/libavcodec/mpeg4video_parser.o 0 0 64 enterprise/libavcodec/flicvideo.o 0 0 96 enterprise/libavcodec/adpcm.o 0 0 2688 enterprise/libavcodec/dvbsub_parser.o 0 0 64 enterprise/libavcodec/dvdsubdec.o 0 0 96 enterprise/libavcodec/flacenc.o 0 0 96 enterprise/libavcodec/tta.o 0 0 96 enterprise/libavcodec/cinepak.o 0 0 96 enterprise/libavcodec/wmadec.o 0 0 192 enterprise/libavcodec/pnm_parser.o 0 0 64 enterprise/libavcodec/vorbis_enc.o 177 0 96 enterprise/libavcodec/msmpeg4.o 0 61436 0 enterprise/libavcodec/dvbsub.o 0 0 96 enterprise/libavcodec/idcinvideo.o 0 0 96 enterprise/libavcodec/dump_extradata_bsf.o 0 0 40 enterprise/libavcodec/remove_extradata_bsf.o 0 0 40 enterprise/libavcodec/zmbvenc.o 8 0 96 enterprise/libavcodec/fraps.o 0 0 96 enterprise/libavcodec/aac_parser.o 0 0 64 enterprise/libavcodec/truemotion2.o 0 0 96 enterprise/libavcodec/bmpenc.o 8 0 96 enterprise/libavcodec/vp3.o 0 148 192 enterprise/libavcodec/ljpegenc.o 0 0 96 enterprise/libavcodec/h264.o 0 724 192 enterprise/libavcodec/sgidec.o 0 0 96 enterprise/libavcodec/wavpack.o 0 0 96 enterprise/libavcodec/rawenc.o 0 0 96 enterprise/libavcodec/dsputil.o 0 4484 0 enterprise/libavcodec/txd.o 0 0 96 enterprise/libavcodec/apedec.o 0 0 96 enterprise/libavcodec/zmbv.o 0 0 96 enterprise/libavcodec/dvdsub_parser.o 0 0 64 enterprise/libavcodec/mpegaudio_parser.o 0 0 64 enterprise/libavcodec/lclenc.o 0 0 96 enterprise/libavcodec/mpegvideo_enc.o 80 45065 960 enterprise/libavcodec/vp6.o 0 0 288 enterprise/libavcodec/mpegvideo.o 0 0 8 enterprise/libavcodec/vb.o 0 0 96 enterprise/libavcodec/mpegaudioenc.o 0 1634 96 enterprise/libavcodec/roqvideodec.o 0 0 96 enterprise/libavcodec/ac3enc.o 0 0 96 enterprise/libavcodec/allcodecs.o 0 4 0 enterprise/libavcodec/kmvc.o 0 0 96 enterprise/libavcodec/noise_bsf.o 0 0 40 enterprise/libavcodec/pcx.o 0 0 96 enterprise/libavcodec/cscd.o 0 0 96 enterprise/libavcodec/smacker.o 0 0 192 enterprise/libavcodec/nuv.o 0 0 96 enterprise/libavcodec/tiff.o 0 0 96 enterprise/libavcodec/mjpegenc.o 12 0 96 enterprise/libavcodec/indeo3.o 0 0 96 enterprise/libavcodec/pcm.o 0 0 3552 enterprise/libavcodec/adxenc.o 0 0 96 enterprise/libavcodec/svq1dec.o 8 384 96 enterprise/libavcodec/tiffenc.o 40 0 96 enterprise/libavcodec/dv.o 16 272068 192 enterprise/libavcodec/loco.o 0 0 96 enterprise/libavcodec/imgconvert.o 0 1028 0 enterprise/libavcodec/interplayvideo.o 0 132 96 enterprise/libavcodec/dnxhddec.o 0 0 96 enterprise/libavcodec/wnv1.o 0 24 96 enterprise/libavcodec/mp3_header_decompress_bsf.o 0 0 40 enterprise/libavcodec/pngdec.o 0 0 96 enterprise/libavcodec/imc.o 0 0 96 enterprise/libavcodec/ffv1.o 28 0 192 enterprise/libavcodec/ratecontrol.o 0 0 216 enterprise/libavcodec/c93.o 0 0 96 enterprise/libavcodec/wmv2dec.o 0 0 96 enterprise/libavcodec/jpeglsenc.o 20 0 96 enterprise/libavcodec/h263dec.o 0 0 768 enterprise/libavcodec/mpegvideo_parser.o 0 0 64 enterprise/libavcodec/mpc.o 0 2048 0 enterprise/libavcodec/roqaudioenc.o 0 16129 96 enterprise/libavcodec/vorbis_dec.o 0 0 96 enterprise/libavcodec/nellymoserdec.o 0 512 96 enterprise/libavcodec/shorten.o 0 0 96 enterprise/libavcodec/4xm.o 0 192 96 enterprise/libavcodec/mace.o 0 0 192 enterprise/libavcodec/cljr.o 0 0 96 enterprise/libavcodec/snow.o 0 8864 192 enterprise/libavcodec/qtrle.o 0 0 96 enterprise/libavcodec/bmp.o 0 0 96 enterprise/libavcodec/dvbsubdec.o 0 1120 96 enterprise/libavcodec/vc1.o 0 4 192 enterprise/libavcodec/flashsv.o 8 0 96 enterprise/libavcodec/mpeg12enc.o 20 57613 192 enterprise/libavcodec/dca.o 0 5432 96 enterprise/libavcodec/cyuv.o 0 0 96 enterprise/libavcodec/asv1.o 16 124 384 enterprise/libavcodec/vmnc.o 0 0 96 enterprise/libavcodec/wmv2enc.o 8 0 96 enterprise/libavcodec/mjpega_dump_header_bsf.o 0 0 40 enterprise/libavcodec/aasc.o 0 0 96 enterprise/libavcodec/ulti.o 0 0 96 enterprise/libavcodec/mpc7.o 0 412 96 enterprise/libavcodec/vc1_parser.o 0 0 64 enterprise/libavcodec/rawdec.o 0 0 96 enterprise/libavcodec/dxa.o 0 0 96 enterprise/libavcodec/h261enc.o 8 4 456 enterprise/libavcodec/gif.o 8 0 96 enterprise/libavcodec/tiertexseqv.o 0 0 96 enterprise/libavcodec/xan.o 0 0 96 enterprise/libavcodec/rv10.o 0 52 192 enterprise/libavcodec/cavsdec.o 0 0 96 enterprise/libavcodec/smc.o 0 0 96 enterprise/libavcodec/h264_mp4toannexb_bsf.o 0 0 40 enterprise/libavcodec/lcldec.o 0 0 192 enterprise/libavcodec/vmdav.o 0 0 192 enterprise/libavcodec/ac3_parser.o 0 0 64 enterprise/libavcodec/sunrast.o 0 0 96 enterprise/libavcodec/mpegaudiodec.o 180 204006 384 enterprise/libavcodec/ac3dec.o 0 4548 96 enterprise/libavcodec/msrle.o 0 0 96 enterprise/libavcodec/qdrw.o 0 0 96 enterprise/libavcodec/dnxhdenc.o 8 0 96 enterprise/libavcodec/dvdsubenc.o 0 0 96 enterprise/libavcodec/g726.o 0 0 192 enterprise/libavcodec/wmaenc.o 0 0 192 enterprise/libavcodec/cook.o 0 0 96 enterprise/libavcodec/rpza.o 0 0 96 enterprise/libavcodec/qpeg.o 0 0 96 enterprise/libavcodec/mjpegdec.o 0 0 192 enterprise/libavcodec/adxdec.o 0 0 96 enterprise/libavcodec/xsubdec.o 0 0 96 enterprise/libavcodec/intrax8.o 0 1344 0 enterprise/libavcodec/sp5xdec.o 0 0 192 enterprise/libavcodec/ws-snd1.o 0 0 96 enterprise/libavcodec/mmvideo.o 0 0 96 enterprise/libavcodec/dsicinav.o 0 0 192 enterprise/libavcodec/alac.o 0 0 96 enterprise/libavcodec/mp3_header_compress_bsf.o 0 0 40 enterprise/libavcodec/vqavideo.o 0 0 96 enterprise/libavcodec/truemotion1.o 0 0 96 enterprise/libavcodec/qdm2.o 0 37262 96 enterprise/libavcodec/sgienc.o 20 0 96 enterprise/libavcodec/jpeglsdec.o 0 0 96 enterprise/libavcodec/ptx.o 0 0 96 enterprise/libavcodec/huffyuv.o 28 0 384 enterprise/libavcodec/gifdec.o 0 0 96 enterprise/libavcodec/msvideo1.o 0 0 96 enterprise/libavcodec/h263.o 0 242848 1800 enterprise/libavcodec/truespeech.o 0 0 96 enterprise/libavcodec/avs.o 0 0 96 enterprise/libavcodec/h263_parser.o 0 0 64 enterprise/libavcodec/h261_parser.o 0 0 64 enterprise/libavcodec/mjpegbdec.o 0 0 96 enterprise/libavcodec/mpeg12.o 0 172 384 enterprise/libavcodec/bitstream_filter.o 0 8 0 enterprise/libavcodec/opt.o 32 0 32 enterprise/libavcodec/vp5.o 0 0 96 enterprise/libavcodec/qtrleenc.o 8 0 96 enterprise/libavcodec/dca_parser.o 0 0 64 enterprise/libavcodec/targaenc.o 16 0 96 enterprise/libavcodec/roqvideoenc.o 24 0 96 enterprise/libavcodec/flashsvenc.o 8 0 96 enterprise/libavcodec/atrac3.o 0 9212 96 enterprise/libavcodec/ra288.o 0 0 96 enterprise/libavcodec/ac3.o 0 304 0 enterprise/libavcodec/parser.o 0 8 0 enterprise/libavcodec/bethsoftvideo.o 0 0 96 enterprise/libavcodec/tscc.o 0 0 96 enterprise/libavcodec/mpc8.o 0 508 96 enterprise/libavcodec/pnmenc.o 56 0 480 enterprise/libavcodec/flac.o 0 0 96 enterprise/libavcodec/xl.o 0 0 96 enterprise/libavcodec/sonic.o 0 0 288 enterprise/libavcodec/indeo2.o 0 24 96 enterprise/libavcodec/8bps.o 0 0 96 enterprise/libavcodec/targa.o 0 0 96 enterprise/libavcodec/h261dec.o 0 100 456 enterprise/libavcodec/mjpeg_parser.o 0 0 64 enterprise/libavcodec/mlp_parser.o 0 4100 64 enterprise/libavcodec/vcr1.o 0 0 96 enterprise/libavcodec/imx_dump_header_bsf.o 0 0 40 enterprise/libavcodec/svq1enc.o 8 0 96 Totals: 877 bytes of writable variables. 984113 bytes of non-initialised variables. 29368 bytes of variables needing runtime relocation. Total 1014358 bytes of variables in copy-on-write sections -- Diego "Flameeyes" Pettenò http://farragut.flameeyes.is-a-geek.org/ _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel <at> mplayerhq.hu http://lists.mplayerhq.hu/mailman/listinfo/ffmpeg-devel |
|
|