Re: Suggestions?

"Brian F. G. Bidulock" <[email protected]> Thu, 27 Oct 2005 17:14:13 -0600
Newsgroups gmane.linux.kernel.streams
Organization http://www.openss7.org/
Message-ID <[email protected]>
Bill,

If you look at the sizes of LiS modules:


   text	   data	    bss	    dec	    hex	filename
   1512	    424	      0	   1936	    790	LiS/streams_bufmod.ko
   2668	    436	      4	   3108	    c24	LiS/streams_echo.ko
 198403	   4640	 609680	 812723	  c66b3	LiS/streams.ko
    341	    320	      0	    661	    295	LiS/streams_liskmod.ko
   3014	    416	     40	   3470	    d8e	LiS/streams_mtdrv.ko
   4666	    516	      8	   5190	   1446	LiS/streams_mux.ko
   1734	    424	      0	   2158	    86e	LiS/streams_nullmod.ko
   1899	    436	      4	   2339	    923	LiS/streams_nuls.ko
   1308	    416	      0	   1724	    6bc	LiS/streams_pipemod.ko
    657	    608	      0	   1265	    4f1	LiS/streams_relay3.ko
   2814	    424	      0	   3238	    ca6	LiS/streams_testmod.ko
 219016	   9060	 609736	 837812	  cc8b4	(TOTALS)

You will see that the static character device tables allocated by
LiS swallow up a whopping 609680 bytes.  It wouldn't be so bad but
LiS uses less than a 10th of this space.

Even if you drop all the loadable modules (you probably don't need
them from your description), you still stuck with close to a meg of
streams.ko module.

Linux Fast-STREAMS is a little different:

   text	   data	    bss	    dec	    hex	filename
  14658	   1712	     24	  16394	   400a	streams/specfs.ko
   1466	    496	      0	   1962	    7aa	streams/streams_bufmod.ko
   2308	    940	      0	   3248	    cb0	streams/streams_clone.ko
    915	    464	      0	   1379	    563	streams/streams_connld.ko
   2615	    548	      4	   3167	    c5f	streams/streams_echo.ko
   1300	    684	      0	   1984	    7c0	streams/streams_fifo.ko
  44763	   5948	   1408	  52119	   cb97	streams/streams.ko
   6698	    548	     32	   7278	   1c6e	streams/streams_log.ko
   3160	    548	      4	   3712	    e80	streams/streams_loop.ko
   3900	    644	      8	   4552	   11c8	streams/streams_mux.ko
   1414	    812	      0	   2226	    8b2	streams/streams_nsdev.ko
   1278	    496	      0	   1774	    6ee	streams/streams_nullmod.ko
   2294	    548	      4	   2846	    b1e	streams/streams_nuls.ko
   1139	    548	      0	   1687	    697	streams/streams_pipe.ko
   1072	    464	      0	   1536	    600	streams/streams_pipemod.ko
   2749	    708	     40	   3497	    da9	streams/streams_sad.ko
   2342	    496	      0	   2838	    b16	streams/streams_sc.ko
   1136	    548	      0	   1684	    694	streams/streams_sfx.ko
   2224	    548	      4	   2776	    ad8	streams/streams_spx.ko
  63079	    624	      4	  63707	   f8db	streams/streams_sth.ko
   2184	    496	      0	   2680	    a78	streams/streams_testmod.ko
 162694	  18820	   1532	 183046	  2cb06	(TOTALS)

Here you only need specfs, streams and streams_sth (if you need a
Stream Head).  That's 132220 bytes.  And that is compiled -O3.

If you configure --with-k-optimize=size you get:


   text	   data	    bss	    dec	    hex	filename
  10803	   1712	     24	  12539	   30fb	specfs.ko
  34095	   5948	   1408	  41451	   a1eb	streams.ko
  47026	    624	      4	  47654	   ba26	streams_sth.ko
  91924	   8284	   1436	 101644	  18d0c	(TOTALS)

For a whopping 30% reduction to just over 100k.

You can configure openss7 release of LiS with --with-k-optimize=size
but it can't get around the bss.  These are the LiS results on
Mandriva LE2005 with openss7 LiS-2.18.1.tar.gz compiled with the
same -Os flag:

   text	   data	    bss	    dec	    hex	filename
 153665	   4640	 609680	 767985	  bb7f1	streams.ko
 153665	   4640	 609680	 767985	  bb7f1	(TOTALS)

So, even if you could get around the monster bss, Linux Fast-STREAMS
is 67% smaller, and, oh, it runs over 3 times faster. passes over
600 POSIX test cases where LiS fails on 200 of them, ...

Recommendation: use Linux Fast-STREAMS -- your size will drop
dramatically, speed will increase significantly, and compilance will
meet expectations.

--brian


On Thu, 27 Oct 2005, [email protected] wrote:

> I am not sure if what I am asking is practical or not. I am writing a
> STREAMS stack for a protocol over a serial connection. Tha catch is
> that it is an embedded application and I need the object (streams.o) to
> be as small as I can get it. The whole file system is on flash. 
> 
> How can I best reduce the size of the file. I am not using clone or
> multi or loopback (maybe on loopback). I am doing straight put() &
> putq() up and down. 
> 
> What modules is it posssible to leave out?
> 
> Thanks,
> Bill!
> 
> 
> _______________________________________________
> Linux-streams mailing list
> [email protected]
> http://gsyc.escet.urjc.es/mailman/listinfo/linux-streams

-- 
Brian F. G. Bidulock    ¦ The reasonable man adapts himself to the ¦
[email protected]    ¦ world; the unreasonable one persists in  ¦
http://www.openss7.org/ ¦ trying  to adapt the  world  to himself. ¦
                        ¦ Therefore  all  progress  depends on the ¦
                        ¦ unreasonable man. -- George Bernard Shaw ¦