Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932760AbdIXV1Y (ORCPT ); Sun, 24 Sep 2017 17:27:24 -0400 Received: from mail-it0-f46.google.com ([209.85.214.46]:53932 "EHLO mail-it0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932193AbdIXV1V (ORCPT ); Sun, 24 Sep 2017 17:27:21 -0400 X-Google-Smtp-Source: AOwi7QBlkTR5+O3ZVOCAOBTz1P/0+cieToX8XgQP1db+D8NAK6f0pq+kyTXqhK0HGTEk7N4JJyhLV9+W4HrAUQBQLI0= MIME-Version: 1.0 In-Reply-To: <20170924200822.GB24368@avx2> References: <20170924200620.GA24368@avx2> <20170924200822.GB24368@avx2> From: Andy Lutomirski Date: Sun, 24 Sep 2017 14:27:00 -0700 Message-ID: Subject: Re: [PATCH v2 2/2] pidmap(2) To: Alexey Dobriyan Cc: Andrew Morton , "linux-kernel@vger.kernel.org" , Linux API , Randy Dunlap , Thomas Gleixner , Djalal Harouni , Alexey Gladkov , Tatsiana Brouka , Aliaksandr Patseyenak Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by nfs id v8OLRRhK028872 Content-Length: 1628 Lines: 43 On Sun, Sep 24, 2017 at 1:08 PM, Alexey Dobriyan wrote: > From: Tatsiana Brouka > > Implement system call for bulk retrieveing of pids in binary form. > > Using /proc is slower than necessary: 3 syscalls + another 3 for each thread + > converting with atoi() + instantiating dentries and inodes. > > /proc may be not mounted especially in containers. Natural extension of > hidepid=2 efforts is to not mount /proc at all. > > It could be used by programs like ps, top or CRIU. Speed increase will > become more drastic once combined with bulk retrieval of process statistics. > > Benchmark: > > N=1<<16 times > ~130 processes (~250 task_structs) on a regular desktop system > opendir + readdir + closedir /proc + the same for every /proc/$PID/task > (roughly what htop(1) does) vs pidmap > > /proc 16.80 ± 0.73% > pidmap 0.06 ± 0.31% > > PIDMAP_* flags are modelled after /proc/task_diag patchset. > > > PIDMAP(2) Linux Programmer's Manual PIDMAP(2) > > NAME > pidmap - get allocated PIDs > > SYNOPSIS > long pidmap(pid_t pid, int *pids, unsigned int count , unsigned int start, int flags); I think we will seriously regret a syscall that does this. Djalal is working on fixing the turd that is hidepid, and this syscall is basically incompatible with ever fixing hidepids. I think that, to make it less regrettable, it needs to take an fd to a proc mount as a parameter. This makes me wonder why it's a syscall at all -- why not just create a new file like /proc/pids? --Andy