Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751373AbdIKTZT (ORCPT ); Mon, 11 Sep 2017 15:25:19 -0400 Received: from mx0b-00082601.pphosted.com ([67.231.153.30]:55851 "EHLO mx0a-00082601.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1751238AbdIKTZQ (ORCPT ); Mon, 11 Sep 2017 15:25:16 -0400 Subject: [GIT PULL v2] zstd support (lib, btrfs, squashfs, nocrypto) From: Chris Mason To: Linus Torvalds , Linux Kernel Mailing List , linux-btrfs , Herbert Xu , Nick Terrell , Phillip Lougher , Sean Purcell CC: David Sterba References: Message-ID: <459700c1-4fb9-1e66-bc9a-b2322119e8e4@fb.com> Date: Mon, 11 Sep 2017 15:24:48 -0400 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.2.1 MIME-Version: 1.0 In-Reply-To: Content-Type: text/plain; charset="utf-8" Content-Language: en-US Content-Transfer-Encoding: 7bit X-Originating-IP: [2620:10d:c091:180::1:a2b2] X-ClientProxiedBy: YTOPR0101CA0007.CANPRD01.PROD.OUTLOOK.COM (52.132.42.148) To BN6PR15MB1651.namprd15.prod.outlook.com (10.175.131.144) X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: bf0ab0b1-3b3d-4519-228a-08d4f94ac969 X-Microsoft-Antispam: UriScan:;BCL:0;PCL:0;RULEID:(300000500095)(300135000095)(300000501095)(300135300095)(22001)(300000502095)(300135100095)(2017030254152)(300000503095)(300135400095)(2017052603199)(201703131423075)(201703031133081)(201702281549075)(300000504095)(300135200095)(300000505095)(300135600095)(300000506095)(300135500095);SRVR:BN6PR15MB1651; X-Microsoft-Exchange-Diagnostics: 1;BN6PR15MB1651;3:sZfViF15YzHNVJ7FfMtoGT5QYZg4QidzmK0PgoQWgBYtWBjs8Kh0nuuQ54rTuZCsUqSGDXpCzp8LgnmsCTqB3VUQ0y+LQaQ8dxeQS5gwcqB7WpVWI9Y/NwVzc2nPM0l4CP4tREP5OKU7Q7ruy7PRakQbyZzCHcvOxnZa3eHFxUguyGs3zZU1/deEgb/OhZvtr5y57V/iCfBZFccoFf2DWatQKj0jPceod2BwmE2nKb3dnUqGI9mK0C/BId7BPtHU;25:6idMc66sPOq6fYRZBEDnkMV6snitB7dLczXWFMeZHSJawCve3MgpReSlOZuznAh/2TpSsXDUwo3kPexZS7muDp/CuV/Os+BVyTPxW9koFybC+Q2ZfmsKg7Rb/ZipBI06H4AMMYTh6GUx9YfagdVC7JJFAR5Tx+APX0f9DdWounjfUu4KVRIr3D70F4mAxX0cl5C4uZ6mZb1VZtTpGYczjzV+4FvzdzhP6+Z6gwvfGnZoiZVcyAFa7qcIQHnt8ny7GQmw0nu/7XLNUmZ9Hy+cZqQOTYRzPBRL5w7KT8NMgIPMhwbfBFmVoh2uywyj/X2pKjcm3677cHT4hHDEO3qAwQ==;31:nKWBq/ZcSlSulmuzL1PEO0VXG1oWR7jldWoHndObQE4MOqkV3dqXOMjDwpgK/hnWdZ9z8Nr4MyB6LfbmWbTyNnC8LuFA2BpCSk27IDQueptSC8/AqxBzQIpGchzl3GnYBwbGFlO8m7FU+gBcDkML9agCvRWGBvaxXc8uAEfy6EimiGMQQeZ+kF/5NJ5S2LwVcff5FkNPujIrITFpxTkJ8Y0UAYfydXBXAG3oZC1tfh8= X-MS-TrafficTypeDiagnostic: BN6PR15MB1651: X-Microsoft-Exchange-Diagnostics: 1;BN6PR15MB1651;20:dzX2zIHotu5aFoAzmnWxQn/733TExGGDtc43wgskUf8qj2IMVrLNbpDPcClXpnCpnrbkRQfkeBavW9diD3WSp6bsaS3a4pDBsCwvpdXmAEL4gfgTSXxh/iqmIGD+1OsdhMhfOlDYoiIJui96wCFZ8ANiDxwqkBuNDyYeqGnTHcICzNK5F/xdGITuFtV9fRf9mmlfB092qePWYJNNIJNOulmJaIGFlpF219gmwKodx2V57L4FMcwy24P6hbSDGrRU+UbDrWPaeruwD4FlDW4GrJM766h+Xm8Dbtzzmszrdv99WBdQfCvUMgoah2cWwIF5G1JT4OUC+ixIhZuX7Sv/m2YgRdtLvtuUZMAoCcmyVim57ff4dKpa8BPOs26sPQUCoQ0qI8piWQdoA0eQkftLSJRoc5nvRWFwkXDje4nrofg9Xpjq5IJ7+ErPJCcRah25Orc8fKfdZWh5sH1jllhdJy2/jUbolBllehZwaTOGzkO34GXTny+RTg+3PnxWnGGj;4:AbjxFVR7yhH8kspvFwJCX12g7OL4Q/uOkLpaBwMe6MJnmig6hnO/N46WkoiI8VJy/j6jsZp5GXi4V8Tjkap6WpWr0m0CHkYJruQKZkWaxojdFH+TLW314GGpk0ZsM3xwY0yE0JZJ84OD1nere+eTCm1fhEKqvVh2O7ClUwS5d3vymXiRb7k/oDCbM/o5JzNYWOp/GZYSj/y3lHxFEdSjB5oQS1GOADPtoPsMpDlLMbTiDuto5u0unNksn6knGd22s1p9qMEYXBNnE0gXanYj5pbSWtgsyN5ckNfFVbB/Y1Q= X-Exchange-Antispam-Report-Test: UriScan:(84791874153150); X-Microsoft-Antispam-PRVS: X-Exchange-Antispam-Report-CFA-Test: BCL:0;PCL:0;RULEID:(100000700101)(100105000095)(100000701101)(100105300095)(100000702101)(100105100095)(6040450)(2401047)(8121501046)(5005006)(3002001)(100000703101)(100105400095)(93006095)(93001095)(10201501046)(6041248)(20161123558100)(20161123562025)(20161123555025)(20161123560025)(201703131423075)(201702281528075)(201703061421075)(201703061406153)(20161123564025)(6072148)(201708071742011)(100000704101)(100105200095)(100000705101)(100105500095);SRVR:BN6PR15MB1651;BCL:0;PCL:0;RULEID:(100000800101)(100110000095)(100000801101)(100110300095)(100000802101)(100110100095)(100000803101)(100110400095)(100000804101)(100110200095)(100000805101)(100110500095);SRVR:BN6PR15MB1651; X-Forefront-PRVS: 04270EF89C X-Forefront-Antispam-Report: SFV:NSPM;SFS:(10019020)(6009001)(189002)(199003)(76176999)(50986999)(101416001)(2906002)(53936002)(230700001)(36756003)(64126003)(68736007)(33646002)(1706002)(105586002)(6116002)(106356001)(50466002)(31686004)(42186005)(4326008)(478600001)(54356999)(25786009)(8936002)(189998001)(47776003)(7736002)(81166006)(86362001)(97736004)(23676002)(65826007)(81156014)(5660300001)(65956001)(6666003)(65806001)(8676002)(2950100002)(83506001)(31696002)(6486002)(4001350100001)(305945005)(42262002)(217873001);DIR:OUT;SFP:1102;SCL:1;SRVR:BN6PR15MB1651;H:[IPv6:2620:10d:c0a1:1110:8000::2082];FPR:;SPF:None;PTR:InfoNoRecords;MX:1;A:1;LANG:en; X-Microsoft-Exchange-Diagnostics: =?utf-8?B?MTtCTjZQUjE1TUIxNjUxOzIzOjc3OEFBNTRJNkpEUGZFdXJPWjJqQkY4bmZk?= =?utf-8?B?N3ZXYm5FdUxpU2FQZy8vUVNONXRSMWRpb0V0SU1BR243cFY1b2dUcVA3RC9n?= =?utf-8?B?dUZIekdtb2RENVZKUFNLM1ByekJYWXpsRUk0WU5YbGdDNUJYSXJRVklPMUJ1?= =?utf-8?B?eGgveFRHaldMWFlpeVIxSFBhK0tmVThTODkrNEpqZGxiQ0pLcHJTMnIwVGNI?= =?utf-8?B?T2NuYXVwemt4RmczZGRxeGJLMlJBb1JjdTVweGNMc3F2YlE4TmNpNmxFMU5a?= =?utf-8?B?RDYySDI0M0JaQXpHUjFrZXFzUXpYNUI0Mnl1TnBHb0xucTlydi9ublBic2xI?= =?utf-8?B?YjR5Y2FFWVZGaGhEUlRkenZQdkt5QVNkcUl6TFVlV1Y2Rk1FQWIrdVRHb2NT?= =?utf-8?B?T1Zzb0JjbjdobXRyNFkwVFZ2bVJEb1d5SjBGSEpVYmFOMkVQZmo4d3dmUjdm?= =?utf-8?B?V0hhSkZ5dTk5MjRzTEFjTk93Z1RmMm40QXJTTEE1OW1VUG5zL3pSVE5yN3I5?= =?utf-8?B?Z3QyRkpKUHpUODY3TnhpU1QzZFRNSUxnV1A0SWNUdFd4WjBnaWZIcEJXUEtI?= =?utf-8?B?UndKWG9rOWgyRlZMaUxuZkk0UGlSY3BNVVNCZ1I0TTRTU25waGVwUDlYUlNj?= =?utf-8?B?d2VTYzZidWVXVVNTUHJmMzJvVUdiTk1EdTd0UFhobDBpdG1uMkZYTVJaKys5?= =?utf-8?B?dW4yQW5kVjcvUytxSjlEcVNDN0hFRnUvT0QrQnlxclQ2aXBRcW85U3B2VGhG?= =?utf-8?B?U1diZ201cDE2Smk5dEwrSjI5bkwvVlYyYVhZUU1LdCtPdjJDYlVHN1ExN3cx?= =?utf-8?B?YzhndXRxNVFrVSs4Y0FiSmRZa08ydVlRa3NnanRpR1VVMkkxS2lnSWpkUHJU?= =?utf-8?B?MzF1N0ZHR2ExbGczSWFHYlUxdDJ2clVLTUFPcm91Y0pORDZSeE96SFluOXY3?= =?utf-8?B?SXB1ODBzQlVHOEdGUmtDR2NFZzl5NGttZHRHNVQvRU1ZeFlBM2dlRDl6Yjdl?= =?utf-8?B?NDZLUnl3S2FQVldkSno2bGNjY1VLcm5lbXlQMVltVWtsWnREM3RLQnRKV0R3?= =?utf-8?B?SXdCcUxtNDN2RWtmcUQ1NjNyKy9BZ1dQUWx3S2VrSXBkZjVSbEdjTEpYVXYz?= =?utf-8?B?bDl5K1kycVNRcTZ5TXVxc282YkIrZkNHSUdPekF3ZEJBdWZKZmN4Y1dWL3pZ?= =?utf-8?B?ZmtHeXpNNjRFbkx2d2pHcVBFYXpzZGNHRG91TXZJZWxybHZJdkFrQmtVZFNv?= =?utf-8?B?eU9BZ3JVS2VXeXpDS0IzUk5LYnFxQjFsL1prc1lIbVNmOTdGWHpaYzgrYlZD?= =?utf-8?B?WW0ySHp1R2NSVXozcnJ2aHgxMlNVMUFyaS84QUNTeEVRK0ZwYlZ6TEZxL3Vu?= =?utf-8?B?ckkwUWREbUFIdElpaE9WdDVzUkJKdVlwSzNTb1RONzY4aUc4ZzFDT2hocFZN?= =?utf-8?B?S2hPblN0cWFjaVBtdDQwRUNERGk2bDJ6MWVoaGRPR3VFeHo4b3EyRGxBT0x0?= =?utf-8?Q?cG0vvSorLFJIkiyp61XrP4oh3SFMjMaxXCjjEPK4hfanE1?= X-Microsoft-Exchange-Diagnostics: 1;BN6PR15MB1651;6:KuED+L6ORIMoGYrOZlKSc+JoeX8zK61ja3u24szSojx5Ig6+3iLHGqQkuQkrV88M4sAQ+c1BpUwjVsoD0bNv9yJ+bQI+WnqL+YvUt6xxXbQ1EGKNZ8thJwd8AwzFI+j1U2e5v/BKo8SrpdZGnth58Sv7fEPKFYh4be1IPjzfCJ0j9nZ8uNhjkR6wh09aMoWzFxIxeDkDheo/Swb1Jh8u6GU5MgQPyNptGSG05Vmuco/1OMxHy6DtST/frd9+6hcPB2GZn+IE/o67dwx//g4T7lO9fo+CVMmLiHxgCPGCM0mEn5b7cXIdBhrw50CYcGd+IVSrcgtgA4/ewqQeXgOy5w==;5:xqlizC0QlM8ePZC4rSnv97az0zW4VjjI+xGw3t60T50PpeQUU+XyZYxK/YdSZt8mN5TlflZAg4s66hgb09N5+xOiOBR3fWTr5FzeK81EfYNrcgKMvbv0E6EjzgN/5ig12hznyuoD8f4JbeNyZuRoWA==;24:s85VQvwYESvQ3vcv0a0btqv369bqoX9UDKPzAwGMicA0JviD781ZIAyUirG2fgflc3WHu+1lUYFtZBeU5Jj/MpWs5BMRKVPNKQal5Sd8h6Q=;7:JnHf0GS4VV+hyjSNgbOUut3Rdgt2WSYnsvt41glb57Z+1wQmhQcZLkop22uS7NIoqAnSyZnSOHMdxMw9qnH3jHgBtLjPDrmKyWrlxpEEmzh+9JmAvpNm/Du3WhOT0ZbjvmaRsKNAnhNH2EQ6W7613+3GFQBIRYAXeskpvrOAJ6OTtZ1LKBBADFCcPb7MNgtk29uQh7AUDp5calqJu8FMHOp61oliqyS+YsKoEav6JmE= SpamDiagnosticOutput: 1:99 SpamDiagnosticMetadata: NSPM X-Microsoft-Exchange-Diagnostics: 1;BN6PR15MB1651;20:TcyAtvj4y4Em0ZPah8fJBI7eRqVJtrGx23HvPj69uyiSWY8f5Lfc6Ceya+mPFq2tp+WpIyAA/zutkxtREHTwK/oFFv4kX1vVuudgK1ZcN93lnZ9GRJV2FjorSueslGaIxfWr7RlhW51JVon9RlpTIlI72gq26+WGDnnubam1yGs= X-MS-Exchange-CrossTenant-OriginalArrivalTime: 11 Sep 2017 19:24:55.5745 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 8ae927fe-1255-47a7-a2af-5f3a069daaa2 X-MS-Exchange-Transport-CrossTenantHeadersStamped: BN6PR15MB1651 X-OriginatorOrg: fb.com X-Proofpoint-Spam-Reason: safe X-FB-Internal: Safe X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2017-09-11_07:,, signatures=0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 6215 Lines: 139 Hi Linus, Nick Terrell's patch series to add zstd support to the kernel has been floating around for a while. After talking with Dave Sterba, Herbert and Phillip, we decided to send the whole thing in as one pull request. Herbert had asked about the crypto patch when we discussed the pull, but I didn't realize he really meant not-right-now. I've rebased it out of this branch, and none of the other patches depended on it. I have things in my zstd-minimal branch: git://git.kernel.org/pub/scm/linux/kernel/git/mason/linux-btrfs.git zstd-minimal There's a trivial conflict with the main btrfs pull from last week. Dave's pull deletes BTRFS_COMPRESS_LAST in fs/btrfs/compression.h, and I've put the sample resolution in a branch named zstd-4.14-merge. zstd is a big win in speed over zlib and in compression ratio over lzo, and the compression team here at FB has gotten great results using it in production. Nick will continue to update the kernel side with new improvements from the open source zstd userland code. Nick has a number of benchmarks for the main zstd code in his lib/zstd commit: ============ I ran the benchmarks on a Ubuntu 14.04 VM with 2 cores and 4 GiB of RAM. The VM is running on a MacBook Pro with a 3.1 GHz Intel Core i7 processor, 16 GB of RAM, and a SSD. I benchmarked using `silesia.tar` [3], which is 211,988,480 B large. Run the following commands for the benchmark: sudo modprobe zstd_compress_test sudo mknod zstd_compress_test c 245 0 sudo cp silesia.tar zstd_compress_test The time is reported by the time of the userland `cp`. The MB/s is computed with 1,536,217,008 B / time(buffer size, hash) which includes the time to copy from userland. The Adjusted MB/s is computed with 1,536,217,088 B / (time(buffer size, hash) - time(buffer size, none)). The memory reported is the amount of memory the compressor requests. | Method | Size (B) | Time (s) | Ratio | MB/s | Adj MB/s | Mem (MB) | |----------|----------|----------|-------|---------|----------|----------| | none | 11988480 | 0.100 | 1 | 2119.88 | - | - | | zstd -1 | 73645762 | 1.044 | 2.878 | 203.05 | 224.56 | 1.23 | | zstd -3 | 66988878 | 1.761 | 3.165 | 120.38 | 127.63 | 2.47 | | zstd -5 | 65001259 | 2.563 | 3.261 | 82.71 | 86.07 | 2.86 | | zstd -10 | 60165346 | 13.242 | 3.523 | 16.01 | 16.13 | 13.22 | | zstd -15 | 58009756 | 47.601 | 3.654 | 4.45 | 4.46 | 21.61 | | zstd -19 | 54014593 | 102.835 | 3.925 | 2.06 | 2.06 | 60.15 | | zlib -1 | 77260026 | 2.895 | 2.744 | 73.23 | 75.85 | 0.27 | | zlib -3 | 72972206 | 4.116 | 2.905 | 51.50 | 52.79 | 0.27 | | zlib -6 | 68190360 | 9.633 | 3.109 | 22.01 | 22.24 | 0.27 | | zlib -9 | 67613382 | 22.554 | 3.135 | 9.40 | 9.44 | 0.27 | I benchmarked zstd decompression using the same method on the same machine. The benchmark file is located in the upstream zstd repo under `contrib/linux-kernel/zstd_decompress_test.c` [4]. The memory reported is the amount of memory required to decompress data compressed with the given compression level. If you know the maximum size of your input, you can reduce the memory usage of decompression irrespective of the compression level. | Method | Time (s) | MB/s | Adjusted MB/s | Memory (MB) | |----------|----------|---------|---------------|-------------| | none | 0.025 | 8479.54 | - | - | | zstd -1 | 0.358 | 592.15 | 636.60 | 0.84 | | zstd -3 | 0.396 | 535.32 | 571.40 | 1.46 | | zstd -5 | 0.396 | 535.32 | 571.40 | 1.46 | | zstd -10 | 0.374 | 566.81 | 607.42 | 2.51 | | zstd -15 | 0.379 | 559.34 | 598.84 | 4.61 | | zstd -19 | 0.412 | 514.54 | 547.77 | 8.80 | | zlib -1 | 0.940 | 225.52 | 231.68 | 0.04 | | zlib -3 | 0.883 | 240.08 | 247.07 | 0.04 | | zlib -6 | 0.844 | 251.17 | 258.84 | 0.04 | | zlib -9 | 0.837 | 253.27 | 287.64 | 0.04 | ======================= I ran a long series of tests and benchmarks on the btrfs side and the gains are very similar to the core benchmarks Nick ran. Nick Terrell (3) commits (+14222/-12): btrfs: Add zstd support (+468/-12) lib: Add zstd modules (+13014/-0) lib: Add xxhash module (+740/-0) Sean Purcell (1) commits (+178/-0): squashfs: Add zstd support Total: (4) commits (+14400/-12) fs/btrfs/Kconfig | 2 + fs/btrfs/Makefile | 2 +- fs/btrfs/compression.c | 1 + fs/btrfs/compression.h | 6 +- fs/btrfs/ctree.h | 1 + fs/btrfs/disk-io.c | 2 + fs/btrfs/ioctl.c | 6 +- fs/btrfs/props.c | 6 + fs/btrfs/super.c | 12 +- fs/btrfs/sysfs.c | 2 + fs/btrfs/zstd.c | 432 ++++++ fs/squashfs/Kconfig | 14 + fs/squashfs/Makefile | 1 + fs/squashfs/decompressor.c | 7 + fs/squashfs/decompressor.h | 4 + fs/squashfs/squashfs_fs.h | 1 + fs/squashfs/zstd_wrapper.c | 151 ++ include/linux/xxhash.h | 236 +++ include/linux/zstd.h | 1157 +++++++++++++++ include/uapi/linux/btrfs.h | 8 +- lib/Kconfig | 11 + lib/Makefile | 3 + lib/xxhash.c | 500 +++++++ lib/zstd/Makefile | 18 + lib/zstd/bitstream.h | 374 +++++ lib/zstd/compress.c | 3484 ++++++++++++++++++++++++++++++++++++++++++++ lib/zstd/decompress.c | 2528 ++++++++++++++++++++++++++++++++ lib/zstd/entropy_common.c | 243 +++ lib/zstd/error_private.h | 53 + lib/zstd/fse.h | 575 ++++++++ lib/zstd/fse_compress.c | 795 ++++++++++ lib/zstd/fse_decompress.c | 332 +++++ lib/zstd/huf.h | 212 +++ lib/zstd/huf_compress.c | 770 ++++++++++ lib/zstd/huf_decompress.c | 960 ++++++++++++ lib/zstd/mem.h | 151 ++ lib/zstd/zstd_common.c | 75 + lib/zstd/zstd_internal.h | 263 ++++ lib/zstd/zstd_opt.h | 1014 +++++++++++++ 39 files changed, 14400 insertions(+), 12 deletions(-)