Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cCH5g-0000cz-Ak for pgsql-hackers@arkaria.postgresql.org; Thu, 01 Dec 2016 02:27:16 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1cCH5f-0006yC-O3 for pgsql-hackers@arkaria.postgresql.org; Thu, 01 Dec 2016 02:27:15 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1cCH5e-0006xv-My for pgsql-hackers@postgresql.org; Thu, 01 Dec 2016 02:27:15 +0000 Received: from mail-pg0-x22e.google.com ([2607:f8b0:400e:c05::22e]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84_2) (envelope-from ) id 1cCH5b-0008IH-3g for pgsql-hackers@postgresql.org; Thu, 01 Dec 2016 02:27:13 +0000 Received: by mail-pg0-x22e.google.com with SMTP id x23so88906326pgx.1 for ; Wed, 30 Nov 2016 18:27:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=2ndquadrant-com.20150623.gappssmtp.com; s=20150623; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language; bh=VeJquPgee1wxIlhMvA3Oxyz5GKpganlcviOReM67IWc=; b=uDWjoMmKlHLoOgoyAiVzs6uwMLm3RSSWY8upZpOMuCrxwMO+RYNMnVWBmHYrla7X0X EvVrA3CymXNGCjXaCqhjliDvo3UKXi0eL9cfCRZ2wLDvIN8EQaOxiCcYhvaOhBo3GNiA jWbJRz9dZJ8y8ZD182VuuNGDnMshjkHG2DU/Ltd0EIsu2AZtgrETWumDuLgE8K+okrVu 0gD7MLdyqXTYytYApqeXYyUfsTOy+Xt5S+bB0U77QbQaG3KvsIw9QGcWqCgf0OwCaRz4 MywQ3G5IGMhhM8wTPgsi/o0ExS05DohxlkNaPkEHxxkMkdX9tatx8iJbd/zsvPcn2C7Z w70A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language; bh=VeJquPgee1wxIlhMvA3Oxyz5GKpganlcviOReM67IWc=; b=QUvIuF0u6g80ncbRxE+lZ0lBnUJ3HiYoQayY/Z4FG2ntFAE9ty3jM4uA5Iw8DHLgl6 1hlqAO3FaIC9Zx9NeHBecY81XQJtaCeT1UHX5/7WpiEMM5oxOuZeuGO1qXj5ciAJ8rqq VMp1B+eATSGX8G0v+X4xGwX3APJqjM4kq5aTh0O/k8+0K4Qcq0F5g1TkKAkDhemh7Occ Z9lCcZmJKt1tPKcIMidXYQMHO0W3bIBDaOujOQIr/x82ckI42CBX8tu+kJsgHD16qBUV pSyeB0shS/Gs3KiYtCoMM0wO97ACZiIe0jZzVb92hIyR5cQNZPtUVaXjvVQ+UI0aljPg pJnQ== X-Gm-Message-State: AKaTC03bRbm/he9HIG4wkn4Jdk51rfCl5LWIq/t+rnr6yUYBhRsUSkrBO/nNFvTigdsjj28icu48Me9ZpsZsvhZTYo16YOLP0uJKM5nowE6QgvdUtdNIYyF8LWPufaX4kdpPQipE/RD98G5QNzargMITibqmW+tLkWf9tPXoZnzLeWZYFRFumwy1AE+490lPxDRL68HJxiB2 X-Received: by 10.98.148.26 with SMTP id m26mr35977225pfe.17.1480559229750; Wed, 30 Nov 2016 18:27:09 -0800 (PST) Received: from [10.137.2.17] (p32183-ipbffx02marunouchi.tokyo.ocn.ne.jp. [220.106.13.183]) by smtp.gmail.com with ESMTPSA id q2sm87975296pga.8.2016.11.30.18.27.07 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Wed, 30 Nov 2016 18:27:09 -0800 (PST) Subject: Re: PATCH: two slab-like memory allocators To: Andres Freund , Petr Jelinek Cc: Robert Haas , John Gorman , pgsql-hackers References: <9818b54a-fcb6-f018-0b16-96d6a1d1da27@2ndquadrant.com> <34a6d4ea-7f3d-a62c-fff1-7a9108c078d7@2ndquadrant.com> <4f176a6c-c197-165d-dee4-5de8f279f1f4@2ndquadrant.com> <20161112191257.3a4n6kzegvu637qn@alap3.anarazel.de> <20161127204740.dr3swudwsbafjuof@alap3.anarazel.de> <20161127220214.v5fnwccwtxwq5jih@alap3.anarazel.de> From: Tomas Vondra Message-ID: <40888631-2761-6eaa-e76f-3fdf7a09bd03@2ndquadrant.com> Date: Thu, 1 Dec 2016 03:26:56 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:51.0) Gecko/20100101 Thunderbird/51.0a2 MIME-Version: 1.0 In-Reply-To: <20161127220214.v5fnwccwtxwq5jih@alap3.anarazel.de> Content-Type: multipart/mixed; boundary="------------AC0252FA12E5C92D49C9FFF4" Content-Language: cs X-Pg-Spam-Score: -1.9 (-) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-hackers Precedence: bulk Sender: pgsql-hackers-owner@postgresql.org This is a multi-part message in MIME format. --------------AC0252FA12E5C92D49C9FFF4 Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Dne 11/27/2016 v 11:02 PM Andres Freund napsal(a): > On 2016-11-27 22:21:49 +0100, Petr Jelinek wrote: >> On 27/11/16 21:47, Andres Freund wrote: >>> Hi, >>> >>>>> +typedef struct SlabBlockData *SlabBlock; /* forward reference */ >>>>> +typedef struct SlabChunkData *SlabChunk; >>>>> >>>>> Can we please not continue hiding pointers behind typedefs? It's a bad >>>>> pattern, and that it's fairly widely used isn't a good excuse to >>>>> introduce further usages of it. >>>>> >>>> >>>> Why is it a bad pattern? >>> >>> It hides what is passed by reference, and what by value, and it makes it >>> a guessing game whether you need -> or . since you don't know whether >>> it's a pointer or the actual object. All to save a * in parameter and >>> variable declaration?... >>> >> >> FWIW I don't like that pattern either although it's used in many >> parts of our code-base. > > But relatively few new ones, most of it is pretty old. > I do agree it's not particularly pretty pattern, but in this case it's fairly isolated in the mmgr sources, and I quite value the consistency in this part of the code (i.e. that aset.c, slab.c and generation.c all use the same approach). So I haven't changed this. The attached v7 fixes the off-by-one error in slab.c, causing failures in test_decoding isolation tests, and renames Gen to Generation, as proposed by Petr. regards Tomas --------------AC0252FA12E5C92D49C9FFF4 Content-Type: application/x-compressed-tar; name="slab-allocators-v7.tgz" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="slab-allocators-v7.tgz" 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 LpRD1bHKo5hesPMjx4ErsH2hhpmURgNKQpSmNKlA2eHkUy9NX5rOmHtw7qf+ B57WpnAwG9dTloitT75qbbMzP5iGcjiKYQursubRUbeGdxRMGBHFw1Dc/9sV +0BdWOD8Sbh+QGQ/gPGDNZTaJrsTQxgdpex99iTsAJE+X51xV0Jq8CTP2Fpi tjn9pX8r24bpmG21DY0ttg3n+S9sG6bDttM2NLbUNjS21TY0ttg2NLbUNjS2 1zY0ttc2NLbXNjS21zZ8GYmvaBumE7fWNjS21zY0ituGKdvbaxsa22wbGlts GxrbbBsaW20bGttsGxqvbxumXrCltqGxtbahsdW2obHFtmG2l/2etqEmstX6 bK9slI0/pfeBdwJV8ET10c78hUUIAV3GAcUNIgOLyVc1iAw61hhrO0PGb2Vj 45OHUdwZWkZkaWfI+AKiqt7BTOiizpCWYrOWEImyYUvI2ETqJsk11xJaL2ZT y1g2qBdkvKIXpAR4ZS/IyPeClou1RKhlvaANZVOzs17QUnuu6AWRK1NxvsVe kLHNXpCxzV6QsY1eUHqc2V4vyNheL8jYWi/I+Mpe0D3UDQt9IGOjPpCRy5Sb NYAoRAsbQMaKBpCRbwBhEC02gF6ThosaQEYJ+VtoABlLGkBGvgFklL6sX32x AWS8aACprLd5C+hFm6cQY2etvKz7OEddq2PxQb3eFe3GfrP9EgNVSGDW4ykc QjeBmmabGfB/SyGg0ptHM81dXH+6vb2C/evk5sNFRbdfTDyUgfW8mQ1Ljs9+ +8K0GRt0P4pSKPuDKoFSaV0lcDwz3iYbc0p2o635WG2GOHrTzXA5O6v3FcXR RoF8/DpXxQKN5YfDpfOL088f+h+pmVlj5Va9U++Uy78L/4sA7FoE2SzdD/1w C4jvF2sU478hZDqtzgL+u91s7P8//vu/40H4b251WkfdQzhUWa1Wx+HWwWGX H7SPDg84bx3aA9E6POT7R4d/MP57v/u2tV+A/24h/hv9lGV+ugTxDcWXK9XB dM/1h/DShc/8EA6LVoIFDgGx2SHivzcCi88/1kLHkUENHV+cedjYL0R/z+O9 Pd8RtBHQixTvvYqT+ZkrpumZTbawZF5v8/oa5ScSFr4AnE4vipk9wiUPFkHq h+3OIki9e/TVGHWl/RX49E3cw3rtjBQPzQ/blnNYr9ucO3bjoBgPvQnNl7eA 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 HW/2t6JlI79s2O0x39rHQYdf+/aox3JdSa1+FJ9Fl3Lszs5da/FI7PX7Hbzg dTN9aXUpLLEgcoTsPJCiAiM/jn84Fd9LQ1vqCj89F9iLoiW1nUXce98u70pp vY8TcujLvxHde7C4uJCbi9+xFSW5mwcHF1sX/bjXG15E/d39rfJurqqr2OlV pWEItrf3O1t9sQG/92AMeMW9pbLfYVnZTe4IzD9Nz7UdXri4mFkX5QqT/dyF fkZYRqofdqxcDpPUL6Uy2cPrVOidCQl6MIpNrm06ic29DJ19gZs4nNZ0zFHd AJVVqkwds5AmO3zP9XDAVTqVFYHWYj8f0dGjTwjnYoWGw80j8Iigz4P9BFk6 HhPIJsHfAIo7RETk/PQpeusRhNru+SFefrDexb5RdTs9fgY47/JPVLK7a7mB RaXS5wgEL+vLD+Vl9hVn54GLcnh+fplevo2Hb+bZGh9vncsuBGDH81E8TOGY 6nycTw95UQhqJjrrR0n+4XH3iTm+QCxvwL6rkjE+HLU3J/3LvAT2t/sHBzu7 vV68P9rdHFZImkIFxXlfKAKTfXNnE+QN/NrchMkup2icTT3kPkt8VAIfCTIN MFhS+5zdr1EhYFwIgbBd0tTsDVGRCj77K0IvgeojQOQJCMseppMJwPOM4Kw7 Wow538pCWJLG/iIxsG135exMplF2fVfDtmFVGJ9KWv97OML9z0WCgbPjFCOM 4YhYLq+uWN/q7fZ219f/1Pw0P81P89P8/GF//hudavxgAJABAA== --------------AC0252FA12E5C92D49C9FFF4 Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers --------------AC0252FA12E5C92D49C9FFF4--