public inbox for gcc-bugs@sourceware.org help / color / mirror / Atom feed
From: "rguenth at gcc dot gnu.org" <gcc-bugzilla@gcc.gnu.org> To: gcc-bugs@gcc.gnu.org Subject: [Bug middle-end/114563] ggc_internal_alloc is slow Date: Wed, 03 Apr 2024 08:44:51 +0000 [thread overview] Message-ID: <bug-114563-4-DT4a0UiX25@http.gcc.gnu.org/bugzilla/> (raw) In-Reply-To: <bug-114563-4@http.gcc.gnu.org/bugzilla/> https://gcc.gnu.org/bugzilla/show_bug.cgi?id=114563 Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org --- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> --- Note this is likely because of release_pages keeping a large freelist when using madvise. After r14-9767 this improved to 5.15% 35482 cc1plus cc1plus [.] ggc_internal_alloc I've tried a quick hack to use the 'prev' field to implement a skip-list, skipping to the next page entry with a different size. That works reasonably well but it also shows the freelist is heavily fragmented. N: M P Q 100001: 98767 19662 17321 200001: 176918 68336 27167 300001: 228676 164683 27185 that's stats after N alloc_page which M times finds a free page to re-use, in that process P times using the skip-list to skip at least one entry and Q times following the ->next link directly. It does get alloc_page from the profile. It might be worth keeping the list sorted in ascending ->bytes order with this, making pagesize allocations O(1) and other sizes O(constant). Of course using N buckets would be the straight-forward thing but then release_pages would be complicated, esp. malloc page groups I guess. But as said, this is likely a symptom of the MADVISE path keeping too many page entries for the testcase, so another attack vector is to more aggressively release them. I don't know how much fragmented they are, we don't seem to try sorting them before unmapping the >= free_unit chunks.
next prev parent reply other threads:[~2024-04-03 8:44 UTC|newest] Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top 2024-04-02 10:28 [Bug middle-end/114563] New: " rguenth at gcc dot gnu.org 2024-04-02 10:29 ` [Bug middle-end/114563] " rguenth at gcc dot gnu.org 2024-04-03 8:44 ` rguenth at gcc dot gnu.org [this message] 2024-04-03 8:49 ` rguenth at gcc dot gnu.org 2024-04-03 9:32 ` rguenth at gcc dot gnu.org 2024-04-03 9:50 ` rguenth at gcc dot gnu.org
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=bug-114563-4-DT4a0UiX25@http.gcc.gnu.org/bugzilla/ \ --to=gcc-bugzilla@gcc.gnu.org \ --cc=gcc-bugs@gcc.gnu.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).