This is the mail archive of the mailing list for the newlib project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: [PATCH newlib]New configuration option disable io vector buffer in Newlib

> -----Original Message-----
> From: [] On
> Behalf Of Howland Craig D (Craig)
> Sent: Tuesday, March 26, 2013 9:25 PM
> To:
> Subject: RE: [PATCH newlib]New configuration option disable io vector
> in Newlib
> > From: []
> On Behalf Of Bin Cheng
> > Sent: Tuesday, March 26, 2013 6:14 AM
> >
> > Hi,
> > Stream IO functions in Newlib construct structures like __suio/__siov,
> then
> > call function __sfvwrite_r to do the buffered IO. From the view of MCU
> > programs, this layer code of vector buffer occupies large amount flash
> and
> > is generally unnecessary. So here this patch introduces a new
> configuration
> > time option "--disable-newlib-fvwrite-in-streamio" allowing user to
> disable
> > io vector buffer in Newlib, thus reduces foot-print of stream-io and
> > formatted IO.
> > ... It has also been applied in the release of "GNU Tools for ARM
> Embedded
> > Processors" and used in many projects I believe.
> >
> > Is it OK or any suggestions?
> Can you provide numbers of how much size savings were realized?
> Is there also a run-time efficiency gain because a layer has been removed?
> I suggest that an explanation of this new option with its benefits and
> drawbacks be added somewhere.  (Does it rate mention in HOWTO?)  It's easy
> envision that a new user comes to take Newlib 3 months from now, and would
> even know that this option existed.  And even if they were to read
> the "disable iov in streamio" description would mean little or nothing to
> people.

Thanks for suggestions. As for the changes:
For code size, this patch reduces about 2+KB text section with below command
line for a simple formatted IO program:
$ arm-none-eabi-gcc -mthumb -mcpu=cortex-m0 -Os -ffcuntion-sections
-fdata-sections -Wl,--gc-sections -lc -lnosys -lc main.c -o main.exe

The library itself is build with "-Os -ffunction-sections -fdata-sections".

For performance, I measured a formatted IO test which calls lots of
"snprintf" and runs for about 10Secs. Turns out this patch can improve
performance about 5~6%, but I won't claim how good the patch is because it's
just one use-case.

As for how-to document, I am not sure how to handle it. There are a bunch of
"--disable/enable-*" options, but neither HOWTO nor README mentions them.
Maybe we could re-factor the document and find a place to describe these
options in detail. 


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]