From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from localhost (localhost [127.0.0.1]) by turing.freelists.org (Avenir Technologies Mail Multiplex) with ESMTP id 33A9F2E606 for ; Sat, 4 May 2019 02:53:39 -0400 (EDT) Received: from turing.freelists.org ([127.0.0.1]) by localhost (turing.freelists.org [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id tndtDxN8EtoH for ; Sat, 4 May 2019 02:53:39 -0400 (EDT) Received: from smtp39.i.mail.ru (smtp39.i.mail.ru [94.100.177.99]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by turing.freelists.org (Avenir Technologies Mail Multiplex) with ESMTPS id DE79C2E5CA for ; Sat, 4 May 2019 02:53:38 -0400 (EDT) Date: Sat, 4 May 2019 09:53:36 +0300 From: Konstantin Osipov Subject: [tarantool-patches] Re: [PATCH 1/1] small: introduce static allocator Message-ID: <20190504065336.GC16696@atlas> References: <50ba091077c074c4eecc1ee63f53d2f4f245bd51.1556466730.git.v.shpilevoy@tarantool.org> <20190503212635.GA16185@atlas> <3ae3f8b3-fb07-5925-27d7-168e857b9d62@tarantool.org> <20190503213613.GA16696@atlas> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: Sender: tarantool-patches-bounce@freelists.org Errors-to: tarantool-patches-bounce@freelists.org Reply-To: tarantool-patches@freelists.org List-Help: List-Unsubscribe: List-software: Ecartis version 1.0.0 List-Id: tarantool-patches List-Subscribe: List-Owner: List-post: List-Archive: To: Vladislav Shpilevoy Cc: tarantool-patches@freelists.org * Vladislav Shpilevoy [19/05/04 09:38]: > >>> > >>> Shouldn't you align the address or provide an aligned alloc along > >>> with the basic one? > >> > >> I thought about a function like static_aligned_alloc just like we > >> have for region, but was not sure if we need it now. There are no > >> code uses old tt_static_buf for data needed alignment. I hoped we > >> could implement it on demand. > >> > >> But if you think we should implement it now, I can do that. > >> Should I? > > > > Previously tt_static_buf allocations were always aligned, since > > the next alloc would always allocate at position 0 in the buffer. > > Now you provide a general purpose alloc more or less, which can > > start at any position in the buffer. I would simple ensure that > > static_alloc() is intptr_t aligned. We can add an aligned alloc > > later. > If we align reserve() or alloc() by default, we would break the > pattern, when we do big reserve of maximal size and then lots of > small allocs of exact sizes. Works when we do not know how many > bytes a big complex object will occupy. > > We use that for mpstream with obuf, ibuf, region, and somewhere in > SQL for pure region without mpstream. All our allocators guarantee > now, that if you succeed at a big reserve(), you can consume this > memory in multiple allocs, without gaps. > > Additionally it contradicts with region API (the only allocator, > providing aligned allocations) - it has separate reserve + alloc, and > aligned_reserve + aligned_alloc. On this argument... to use static alloc in mpstream, not aligning the return value is not enough. You actually need something a batch alloc API, something like: - static_alloc_begin_batch() - resets the buffer and sets the position to 0, - static_alloc_alloc_batch() - alloc memory, but return error if allocation would wrap around, since we need to make sure all allocation in a batch stay valid - static_alloc_end_batch() - finish allocating memory within a batch Otherwise, how do you guarantee that a subsequent alloc used by mpstream doesn't wrap the static buffer around and begins overwriting it? -- Konstantin Osipov, Moscow, Russia, +7 903 626 22 32