Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id ; Sat, 2 Nov 2002 06:57:43 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id ; Sat, 2 Nov 2002 06:57:43 -0500 Received: from 167.imtp.Ilyichevsk.Odessa.UA ([195.66.192.167]:60173 "EHLO Port.imtp.ilyichevsk.odessa.ua") by vger.kernel.org with ESMTP id ; Sat, 2 Nov 2002 06:57:35 -0500 Message-Id: <200211021159.gA2Bx6p24452@Port.imtp.ilyichevsk.odessa.ua> From: Denis Vlasenko Reply-To: vda@port.imtp.ilyichevsk.odessa.ua To: linux-kernel@vger.kernel.org Subject: [PATCH] csum and csum_copy routines with boot-time selection .D Date: Sat, 2 Nov 2002 14:51:08 -0200 X-Mailer: KMail [version 1.3.2] MIME-Version: 1.0 Content-Type: Multipart/Mixed; boundary="------------Boundary-00=_85KYWVCAFQFMKHLOH3TT" Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 41288 Lines: 638 --------------Boundary-00=_85KYWVCAFQFMKHLOH3TT Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 8bit Here is a kernel patch which replaces compile-time selection of csum and csum_copy routines with boot-time selection. This allows kernel to use fastest routines _for given CPU_, regardless of copmile-time CPU seletion! You can compile for 486 and yet use faster P4 optimized code Theory of operation: inside csum_partial() I check buffer size and if it is large enough, I call optimized routine. * Rigorous testsuite catches maybe 95% of all possible bugs. It checks misaligned, zero, very small, odd sized buffers etc. It compares results with known-good ones. If bug is caught, testsuite prints verbose debug info. This helps to understand and fix bug quickly. * Testsuite is combined with benchmarking tool. * Code is split into 'driver' and 'optimized' routines. Driver routine checks and handles alignment issues and corner cases. This reduces possibility of subtle bugs and makes optimized routines simpler and easier to code/understand/bugcheck. * Driver's and optimized routines' source files are the same for kernel and testsuite, this reduces chances of cut'n'paste and similar silly bugs. * Optimized routines are called only if block is large enough (>128 bytes). This avoids MMX/SSE register save/restore overhead for small blocks. In other words, you never get slower copy than with old kernels (speed is the same for small blocks) but large blocks will be handled much faster. Some thoughts: +/* Set this to value bigger than cache(s) */ +#define bufshift 20 /* 10=1kb,20=1Mb etc */ +#define chunksz (4*1024) How to make this picked according to cache amount (I mean reliably even for future CPUs)? + char *buffer = (char *) __get_free_pages(GFP_KERNEL, + (bufshift-PAGE_SHIFT)); hmmm... using __xx func... what is 'official' way to do it? +#define ROUND(x) \ +SRC( movq x(%esi), %mm0 ); \ + adcl x(%esi), %eax ; \ + adcl x+4(%esi), %eax ; \ +DST( movntq %mm0, x(%edi) ); +// we don't need SRC() around 2nd and 3rd commands +// (exception, if any, would be catched by 1st one) +// (FIXME: can races against interrupts bite us?) So, can page disappear under us here or not? Currently code is very verbose at boot time and runs too much benchmark repetitions for debugging purposes. I don't know of any bugs in the code, but they can be there. No warranties. I gave it a some testing, it didn't eat my disk and didn't drink my coffee :) I write this while running patched kernel on a fully NFS mounted filesystem, so it must be usable ;) My dmesg snippet shown below. Patch and test suite attached (bzipped). -- vda dmesg ===== Linux version 2.4.20-pre11csum_t (root@localhost) (gcc version 3.2) #5 SMP Sat Nov 2 11:53:37 GMT+2 2002 .... .... IP-Config: Got DHCP answer from 255.255.255.255, my address is 172.16.42.177 IP-Config: Complete: device=eth0, addr=172.16.42.177, mask=255.255.255.0, gw=172.16.42.98, host=(none), domain=, nis-domain=(none), bootserver=255.255.255.255, rootserver=172.16.42.75, rootpath= NET4: Unix domain sockets 1.0/SMP for Linux NET4.0. Measuring network checksumming speed allocated 256 pages count = 2 count = 2 count = 2 count = 3 count = 3 count = 3 count = 6 count = 6 count = 6 count = 11 count = 11 count = 11 count = 21 count = 21 count = 21 test run will last 16 ticks count = 54 count = 54 count = 54 basic : 345.600 MB/sec count = 29 count = 29 count = 29 simple : 185.600 MB/sec unsupported caps: 63 func 3Dnow! skipped: not supported by CPU unsupported caps: 54 func SSE/MMX+ skipped: not supported by CPU count = 108 count = 105 count = 107 SSE/MMX+ : 691.200 MB/sec csum: using csum function: SSE/MMX+ count = 21 count = 21 count = 21 basic : 134.400 MB/sec count = 17 count = 17 count = 17 simple : 108.800 MB/sec unsupported caps: 54 func SSE/MMX+ skipped: not supported by CPU count = 39 count = 39 count = 39 SSE/MMX+ : 249.600 MB/sec count = 39 count = 39 count = 39 SSE : 249.600 MB/sec csum: using csum_copy function: SSE/MMX+ freed 256 pages Looking up port of RPC 100003/2 on 172.16.42.75 Looking up port of RPC 100005/1 on 172.16.42.75 VFS: Mounted root (nfs filesystem). Mounted devfs on /dev Freeing unused kernel memory: 140k freed --------------Boundary-00=_85KYWVCAFQFMKHLOH3TT Content-Type: application/x-bzip2; name="linux-2.4.20-pre11csumD.patch.bz2" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="linux-2.4.20-pre11csumD.patch.bz2" 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 k/c= --------------Boundary-00=_85KYWVCAFQFMKHLOH3TT Content-Type: application/x-bzip2; name="timing_csum_copy.D.tar.bz2" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="timing_csum_copy.D.tar.bz2" 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 --------------Boundary-00=_85KYWVCAFQFMKHLOH3TT-- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/