From: Eric Wong <e@80x24.org> To: meta@public-inbox.org Subject: [PATCH] ds: tmpio: avoid Perl target cache Date: Wed, 6 Oct 2021 11:50:42 +0000 [thread overview] Message-ID: <20211006115042.21222-1-e@80x24.org> (raw) The use of `substr' here an argument to `print' was causing Perl to internally cache its target buffer. Since `syswrite()' already offers a buffer offset arg and length limits, just use `syswrite' directly. We were using autoflush anyways, so the lack of buffering was of no concern performance-wise. The target buffer could get to roughly ~10MB under some loads, but it was usually a cold path and using memory which cannot be released nor reused in other places. note: IO::Handle::write uses `substr' internally, too; so nothing would be gained using IO::Handle:write. --- lib/PublicInbox/DS.pm | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/lib/PublicInbox/DS.pm b/lib/PublicInbox/DS.pm index debb777a..9cca02d7 100644 --- a/lib/PublicInbox/DS.pm +++ b/lib/PublicInbox/DS.pm @@ -494,16 +494,15 @@ sub drop { $self->close; } -# n.b.: use ->write/->read for this buffer to allow compatibility with -# PerlIO::mmap or PerlIO::scalar if needed sub tmpio ($$$) { my ($self, $bref, $off) = @_; my $fh = tmpfile('wbuf', $self->{sock}, O_APPEND) or return drop($self, "tmpfile $!"); $fh->autoflush(1); my $len = length($$bref) - $off; - print $fh substr($$bref, $off, $len) or + my $n = syswrite($fh, $$bref, $len, $off) // return drop($self, "write ($len): $!"); + $n == $len or return drop($self, "wrote $n < $len bytes"); [ $fh, 0 ] # [1] = offset, [2] = length, not set by us }
reply other threads:[~2021-10-06 11:50 UTC|newest] Thread overview: [no followups] expand[flat|nested] mbox.gz Atom feed
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 List information: https://public-inbox.org/README * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20211006115042.21222-1-e@80x24.org \ --to=e@80x24.org \ --cc=meta@public-inbox.org \ --subject='Re: [PATCH] ds: tmpio: avoid Perl target cache' \ /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: link
Code repositories for project(s) associated with this inbox: https://80x24.org/public-inbox.git 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).