Kern Sibbald <k...@sibbald.com> wrote on 2010/07/24 20:46:24: > On Saturday 24 July 2010 18:43:17 Joakim Tjernlund wrote: > > Kern Sibbald <k...@sibbald.com> wrote on 2010/07/24 17:56:46: > > > On Saturday 24 July 2010 17:32:58 Joakim Tjernlund wrote: > > > > Kern Sibbald <k...@sibbald.com> wrote on 2010/07/24 16:46:58: > > > > > On Saturday 24 July 2010 16:22:54 Joakim Tjernlund wrote: > > > > > > Kern Sibbald <k...@sibbald.com> wrote on 2010/07/24 14:21:46: > > > > > > > On Saturday 24 July 2010 14:01:59 Joakim Tjernlund wrote: > > > > > > > > Joakim Tjernlund <joakim.tjernl...@transmode.se> wrote on > > > > > > > > 2010/07/20 > > > > > > > > > > > > > > 20:02:53: > > > > > > > > > From: Joakim Tjernlund <joakim.tjernl...@transmode.se> > > > > > > > > > To: bacula-devel@lists.sourceforge.net > > > > > > > > > Cc: Joakim Tjernlund <joakim.tjernl...@transmode.se> > > > > > > > > > Date: 2010/07/20 20:24 > > > > > > > > > Subject: [Bacula-devel] [PATCH 1/2] Initial crc32 > > > > > > > > > optimization. > > > > > > > > > > > > > > > > > > This is a strait port of the Linux kernel crc32 optimization > > > > > > > > > I did a while ago. This impl. is several times faster than > > > > > > > > > the one it replaces. Adapted to bacula usage. > > > > > > > > > --- > > > > > > > > > > > > > > > > > > I have not tested this yet as I went/is on vacation but I > > > > > > > > > figured perhaps someone else is interrested enough to do that > > > > > > > > > :) > > > > > > > > > > > > > > > > > > bacula/src/lib/crc32.c | 386 > > > > > > > > > ++++++++++++++++++++++++++++++++++++++++-------- 1 files > > > > > > > > > changed, 325 insertions(+), 61 deletions(-) > > > > > > > > > > > > > > > > So it has been a few days and I was hoping for one or two > > > > > > > > comments by now. > > > > > > > > > > > > > > I have been terribly busy with *big* problems and past due > > > > > > > deadlines. > > > > > > > > > > > > > > > One thing I have noticed is that Bacula seems to rely on > > > > > > > > dynamic endian detection instead of detecting endian at > > > > > > > > configure/compile time. > > > > > > > > > > > > > > Yes. > > > > > > > > > > > > OK. > > > > > > > > > > > > > > Is this so and does it need to stay this way? > > > > > > > > > > > > > > I am not sure. A Mac developer was trying to create a single > > > > > > > binary that would run on multiple architectures, which is a good > > > > > > > idea if it will work. I don't know whether he actually uses it > > > > > > > or not. > > > > > > > > > > > > ehh, how can a single binary run on multiple archs? > > > > > > If all platforms use autconf I think we can let autoconf > > > > > > detect the hosts endian, see AC_C_BIGENDIAN > > > > > > > > > > > > We need to figure this one out before I can move on. If it needs > > > > > > to be dynamic then I must add an init crc32 table routine that > > > > > > runs "tole" on the crc32 table. Where should this init routine > > > > > > be called from? > > > > > > > > > > For the moment, to keep your life simple, I suggest you assume that > > > > > the dynamic endian detection is not critical. If it is we can find > > > > > out when it is necessary, and deal with it by either calling your > > > > > routine or another one or by generating your tables in the two endian > > > > > manners in each execution or something. > > > > > > > > > > Hopefully, you can proceed without that blocking you and we deal with > > > > > it later. > > > > > > > > OK, lets leave it for now. > > > > > > > > > > > > Currently the new crc32 code needs compile time detection of > > > > > > > > endianess and I like to keep it that way. Furthermore I suspect > > > > > > > > I won't be able to do much more Bacula work as vacation ends in > > > > > > > > one week and work at my dayjob is piling up. > > > > > > > > > > > > > > The first thing to do is to fill out an FLA and send it in. See > > > > > > > www.bacula.org -> FLA License > > > > > > > > > > > > I rather not, lets just call this "a few lines of code" which won't > > > > > > require a FLA. As you can see I have not claimed any CopyRight in > > > > > > the patch I sent. > > > > > > > > > > If you release it into the public domain or put a 3 clause BSD > > > > > copyright on it or LGPL or something like that I will not need the > > > > > FLA, but I need either public domain (explicit) or some simply > > > > > copyright to not require the FLA. > > > > > > > > I see, how about GPLv2 then, same as Linux ? The I could just import > > > > test code and table code from there. > > > > > > Unfortunately, Bacula's code is not compatible with other people's code > > > (Linux) licensed under GPLv2. If you are the author of the code, then > > > you should be able to use any license you want. There are a number of > > > choices to get it into Bacula: > > > > > > 1. Some BSD type license > > > 2. Put it into the public domain > > > 3. Put it under the Bacula license and sign an FLA > > > > > > If it is not your code, I need to see the original copyright to know how > > > to be able to include it, but if it is not your code, then it is unlikely > > > we can use it. > > > > It is my code, as you can see there is nothing left of the original code > > after applying my patch. > > Earlier you mentioned LGPL, is that OK? > > > > > > > > > Then the next step is to ensure that your new code and the old > > > > > > > code can be run in unit test and can read files for CRC from > > > > > > > STDIN. Then we can compare the > > > > > > > > > > > > Which unit tests? I cannot find any(note that I have never touched > > > > > > Bacula code until now so I might have missed it) > > > > > > > > > > Most my little routines like that have a #define TEST_PROGRAM at the > > > > > end that create a main(), ... and when you compile it into a binary, > > > > > it tests itself, in some very primitive way. It looks like this one > > > > > doesn't have such a routine. Take a look at src/lib/edit.c for a > > > > > really simple case, or alist.c, or scan.c ... > > > > > > > > > > Actually, the code in src/lib/md5.c may be very close to what you > > > > > want to change to do what I ask. > > > > > > > > OK, will have a look. > > > > > > > > > > > results of the old code with the new code and the speed. Based > > > > > > > on those results we can see if we need to dynamically detect > > > > > > > which algorithm to use, and if yours is not identical, and is > > > > > > > faster, then we would need to modify the Volume format to account > > > > > > > for this and do the dynamic detection based on the volume format. > > > > > > > All future versions of Bacula *must* be able to correctly read > > > > > > > older Volume versions. > > > > > > > > > > > > Not sure I follow you here but it seems like you thing that the new > > > > > > crc32 impl. is incompatible with the current one? This is not so, > > > > > > the end result, the calculated crc32, is the same(barring any impl. > > > > > > bugs) as the old one. > > > > > > > > > > OK, I didn't re-read your previous email, but it seems to me you said > > > > > you were not sure. In any case, before I can replace the current > > > > > algorithm, I must > > > > > > > > I am not sure I didn't made a mistake in porting the code from Linux > > > > into Bacula. The general idea has been proven for some time. > > > > > > Unfortunately, the way the GPL works, you cannot port code written by > > > someone else from Linux to Bacula. The licenses are both Open Source GPL > > > but not compatible. > > > > As stated above, it is my code that I have submitted to Linux. > > > > > If you wrote the code in the Linux kernel that you are porting, then you > > > have the choices to license it as I indicate above ... > > > > Yes, I know. > > > > > > > prove to myself (or much faster would be you prove to me) by seeing > > > > > the output that it is the same. I suggest something like the md5.c > > > > > or sha1.c programs where it reads a file and creates the hash -- or > > > > > in your case the CRC. > > > > > > > > > > > There won't be any need to test which one to use, this impl. is > > > > > > much faster than the current one for all archs(unless you want to > > > > > > crc one byte at a time which the Bacula bcrc32 isn't designed for) > > > > > > > > > > I am all for much faster code. The current CRC takes a good deal of > > > > > time, and I recently added the ability to disable it, but I would > > > > > really like something faster so that no one disables it :-) > > > > > > > > Yes, I noticed this 10 years ago when we started to use the JFFS2 file > > > > system in Linux. JFFS2 crc32 all its data and it took time. At the time > > > > the Linux crc32 impl. was like yours. I then optimized it significantly > > > > and sent it in and all was well. Recently I did another optimization > > > > pass and it was twice as fast on x86 than the previous one. > > > > > > If the original Linux version was like mine, then it was derived from > > > "public domain code" and as long as you made the vast majority of the > > > modifications, and you so desire, the code would still be "public > > > domain", so you just have to explicitly put in the code that your changes > > > to the RFC 2083 algoritm are public domain, then there is no license > > > issue. > > > > There are many impl. of crc32 like similar to yours with different > > licences. Here is what Linux says > > * Oct 15, 2000 Matt Domsch <matt_dom...@dell.com> > > * Nicer crc32 functions/docs submitted by li...@horizon.com. Thanks! > > * Code was from the public domain, copyright abandoned. Code was > > * subsequently included in the kernel, thus was re-licensed under the > > * GNU GPL v2. > > Unless they totally re-wrote it, they cannot change the license only the > author can do that unless he explicitly gives you the right to copyright it. > However, that is not my affair. > > So, if you want to move forward, I need to have a submission from you with it > licensed under the LGPL, and if you want it in right away, I need to "see" > that it produces the same results, otherwise it will wait until I get around > to writing a test program for my code and for your new code.
OK, I will give it a go, lets see where it gets us. I am travelling a few days as of tmw so it will be a few days before I come back. Jocke ------------------------------------------------------------------------------ This SF.net email is sponsored by Sprint What will you do first with EVO, the first 4G phone? Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first _______________________________________________ Bacula-devel mailing list Bacula-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/bacula-devel