user/dev discussion of public-inbox itself
 help / color / mirror / code / Atom feed
From: Eric Wong <e@80x24.org>
To: meta@public-inbox.org
Subject: [PATCH 7/7] syscall: get rid of sendfile wrappers for now
Date: Mon, 21 Oct 2019 11:22:29 +0000	[thread overview]
Message-ID: <20191021112229.3029-8-e@80x24.org> (raw)
In-Reply-To: <20191021112229.3029-1-e@80x24.org>

I'm not sure they'll make a measurable difference or will
be worth the effort in the future given the prevalance
of HTTPS and giant socket buffers.

Using Inline::C for this may make more sense in the
future, too, especially if we want to be able to use
GnuTLS.
---
 lib/PublicInbox/Syscall.pm | 75 +-------------------------------------
 1 file changed, 1 insertion(+), 74 deletions(-)

diff --git a/lib/PublicInbox/Syscall.pm b/lib/PublicInbox/Syscall.pm
index d7e15c72..da8a6c86 100644
--- a/lib/PublicInbox/Syscall.pm
+++ b/lib/PublicInbox/Syscall.pm
@@ -21,7 +21,7 @@ use vars qw(@ISA @EXPORT_OK %EXPORT_TAGS $VERSION);
 
 $VERSION     = "0.25";
 @ISA         = qw(Exporter);
-@EXPORT_OK   = qw(sendfile epoll_ctl epoll_create epoll_wait
+@EXPORT_OK   = qw(epoll_ctl epoll_create epoll_wait
                   EPOLLIN EPOLLOUT EPOLLET
                   EPOLL_CTL_ADD EPOLL_CTL_DEL EPOLL_CTL_MOD
                   EPOLLONESHOT EPOLLEXCLUSIVE);
@@ -29,7 +29,6 @@ $VERSION     = "0.25";
                              EPOLLIN EPOLLOUT
                              EPOLL_CTL_ADD EPOLL_CTL_DEL EPOLL_CTL_MOD
                              EPOLLONESHOT EPOLLEXCLUSIVE)],
-                sendfile => [qw(sendfile)],
                 );
 
 use constant EPOLLIN       => 1;
@@ -64,7 +63,6 @@ our (
      $SYS_epoll_create,
      $SYS_epoll_ctl,
      $SYS_epoll_wait,
-     $SYS_sendfile,
      );
 
 our $no_deprecated = 0;
@@ -90,45 +88,37 @@ if ($^O eq "linux") {
         $SYS_epoll_create = 254;
         $SYS_epoll_ctl    = 255;
         $SYS_epoll_wait   = 256;
-        $SYS_sendfile     = 187;  # or 64: 239
     } elsif ($machine eq "x86_64") {
         $SYS_epoll_create = 213;
         $SYS_epoll_ctl    = 233;
         $SYS_epoll_wait   = 232;
-        $SYS_sendfile     =  40;
     } elsif ($machine =~ m/^parisc/) {
         $SYS_epoll_create = 224;
         $SYS_epoll_ctl    = 225;
         $SYS_epoll_wait   = 226;
-        $SYS_sendfile     = 122;  # sys_sendfile64=209
         $u64_mod_8        = 1;
     } elsif ($machine =~ m/^ppc64/) {
         $SYS_epoll_create = 236;
         $SYS_epoll_ctl    = 237;
         $SYS_epoll_wait   = 238;
-        $SYS_sendfile     = 186;  # (sys32_sendfile).  sys32_sendfile64=226  (64 bit processes: sys_sendfile64=186)
         $u64_mod_8        = 1;
     } elsif ($machine eq "ppc") {
         $SYS_epoll_create = 236;
         $SYS_epoll_ctl    = 237;
         $SYS_epoll_wait   = 238;
-        $SYS_sendfile     = 186;  # sys_sendfile64=226
         $u64_mod_8        = 1;
     } elsif ($machine =~ m/^s390/) {
         $SYS_epoll_create = 249;
         $SYS_epoll_ctl    = 250;
         $SYS_epoll_wait   = 251;
-        $SYS_sendfile     = 187;  # sys_sendfile64=223
         $u64_mod_8        = 1;
     } elsif ($machine eq "ia64") {
         $SYS_epoll_create = 1243;
         $SYS_epoll_ctl    = 1244;
         $SYS_epoll_wait   = 1245;
-        $SYS_sendfile     = 1187;
         $u64_mod_8        = 1;
     } elsif ($machine eq "alpha") {
         # natural alignment, ints are 32-bits
-        $SYS_sendfile     = 370;  # (sys_sendfile64)
         $SYS_epoll_create = 407;
         $SYS_epoll_ctl    = 408;
         $SYS_epoll_wait   = 409;
@@ -137,7 +127,6 @@ if ($^O eq "linux") {
         $SYS_epoll_create = 20;  # (sys_epoll_create1)
         $SYS_epoll_ctl    = 21;
         $SYS_epoll_wait   = 22;  # (sys_epoll_pwait)
-        $SYS_sendfile     = 71;  # (sys_sendfile64)
         $u64_mod_8        = 1;
         $no_deprecated    = 1;
     } elsif ($machine =~ m/arm(v\d+)?.*l/) {
@@ -145,16 +134,13 @@ if ($^O eq "linux") {
         $SYS_epoll_create = 250;
         $SYS_epoll_ctl    = 251;
         $SYS_epoll_wait   = 252;
-        $SYS_sendfile     = 187;
         $u64_mod_8        = 1;
     } elsif ($machine =~ m/^mips64/) {
-        $SYS_sendfile     = 5039;
         $SYS_epoll_create = 5207;
         $SYS_epoll_ctl    = 5208;
         $SYS_epoll_wait   = 5209;
         $u64_mod_8        = 1;
     } elsif ($machine =~ m/^mips/) {
-        $SYS_sendfile     = 4207;
         $SYS_epoll_create = 4248;
         $SYS_epoll_ctl    = 4249;
         $SYS_epoll_wait   = 4250;
@@ -180,68 +166,9 @@ if ($^O eq "linux") {
 elsif ($^O eq "freebsd") {
     if ($ENV{FREEBSD_SENDFILE}) {
         # this is still buggy and in development
-        $SYS_sendfile = 393;  # old is 336
     }
 }
 
-############################################################################
-# sendfile functions
-############################################################################
-
-unless ($SYS_sendfile) {
-    _load_syscall();
-    $SYS_sendfile = eval { &SYS_sendfile; } || 0;
-}
-
-sub sendfile_defined { return $SYS_sendfile ? 1 : 0; }
-
-if ($^O eq "linux" && $SYS_sendfile) {
-    *sendfile = \&sendfile_linux;
-} elsif ($^O eq "freebsd" && $SYS_sendfile) {
-    *sendfile = \&sendfile_freebsd;
-} else {
-    *sendfile = \&sendfile_noimpl;
-}
-
-sub sendfile_noimpl {
-    $! = ENOSYS;
-    return -1;
-}
-
-# C: ssize_t sendfile(int out_fd, int in_fd, off_t *offset, size_t count)
-# Perl:  sendfile($write_fd, $read_fd, $max_count) --> $actually_sent
-sub sendfile_linux {
-    return syscall(
-                   $SYS_sendfile,
-                   $_[0] + 0,  # fd
-                   $_[1] + 0,  # fd
-                   0,          # don't keep track of offset.  callers can lseek and keep track.
-                   $_[2] + 0   # count
-                   );
-}
-
-sub sendfile_freebsd {
-    my $offset = POSIX::lseek($_[1]+0, 0, SEEK_CUR) + 0;
-    my $ct = $_[2] + 0;
-    my $sbytes_buf = "\0" x 8;
-    my $rv = syscall(
-                     $SYS_sendfile,
-                     $_[1] + 0,   # fd     (from)
-                     $_[0] + 0,   # socket (to)
-                     $offset,
-                     $ct,
-                     0,           # struct sf_hdtr *hdtr
-                     $sbytes_buf, # off_t *sbytes
-                     0);          # flags
-    return $rv if $rv < 0;
-
-
-    my $set = unpack("L", $sbytes_buf);
-    POSIX::lseek($_[1]+0, SEEK_CUR, $set);
-    return $set;
-}
-
-
 ############################################################################
 # epoll functions
 ############################################################################

      parent reply	other threads:[~2019-10-21 11:22 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-21 11:22 [PATCH 0/7] dead code elimination Eric Wong
2019-10-21 11:22 ` [PATCH 1/7] overidx: remove unused delete_articles sub Eric Wong
2019-10-21 11:22 ` [PATCH 2/7] www: remove unused ctx_get sub Eric Wong
2019-10-21 11:22 ` [PATCH 3/7] inboxwritable: import_maildir uses maildir_path_load Eric Wong
2019-10-21 11:22 ` [PATCH 4/7] watchmaildir: remove redundant _path_to_mime Eric Wong
2019-10-21 11:22 ` [PATCH 5/7] git: remove src_blob_url Eric Wong
2019-10-21 11:22 ` [PATCH 6/7] hval: remove new_oneline Eric Wong
2019-10-21 11:22 ` Eric Wong [this message]

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=20191021112229.3029-8-e@80x24.org \
    --to=e@80x24.org \
    --cc=meta@public-inbox.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: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public 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).