From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 89819 invoked by alias); 11 Apr 2019 04:21:26 -0000 Mailing-List: contact cygwin-developers-help@cygwin.com; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-developers-owner@cygwin.com Mail-Followup-To: cygwin-developers@cygwin.com Received: (qmail 89807 invoked by uid 89); 11 Apr 2019 04:21:25 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-3.9 required=5.0 tests=AWL,BAYES_00 autolearn=ham version=3.3.1 spammy=H*UA:Firefox, sqrt, HTo:U*cygwin-developers, H*Ad:U*cygwin-developers X-HELO: m0.truegem.net Received: from m0.truegem.net (HELO m0.truegem.net) (69.55.228.47) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 11 Apr 2019 04:21:24 +0000 Received: (from daemon@localhost) by m0.truegem.net (8.12.11/8.12.11) id x3B4LNY6084773 for ; Wed, 10 Apr 2019 21:21:23 -0700 (PDT) (envelope-from mark@maxrnd.com) Received: from 162-235-43-67.lightspeed.irvnca.sbcglobal.net(162.235.43.67), claiming to be "[192.168.1.100]" via SMTP by m0.truegem.net, id smtpdYwxdid; Wed Apr 10 21:21:18 2019 From: Mark Geisert Subject: Implement sched_[gs]etaffinity() To: cygwin-developers@cygwin.com Message-ID: Date: Thu, 11 Apr 2019 04:21:00 -0000 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:49.0) Gecko/20100101 Firefox/49.0 SeaMonkey/2.46 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-IsSubscribed: yes X-SW-Source: 2019-04/txt/msg00028.txt.bz2 I've recently sent a patch to cygwin-patches that implements these Linux-specific functions. I used the following test program to debug and test the implementation. When the program is run, you can watch it migrate from CPU to CPU with Windows Task Manager. I've only tested on 64-bit Windows 7 so far. If the code (in the patch) is adequate I will supply another patch for doc updates, etc. ..mark P.S. Here's the test program: ~ cat afftest.c #define _GNU_SOURCE #include #include #include #include #include #include #include "/oss/src/newlib/libc/include/sched.h" //XXX for demo only size_t cpusetsize; volatile int nprocs; volatile int proc; void handler (int unused) { char buf[2] = "\000"; cpu_set_t mask; ++proc; if (proc >= nprocs) proc = 0; buf[0] = '0' + proc; write (2, buf, 1); mask = 1 << proc; int res = sched_setaffinity (0, cpusetsize, &mask); if (res < 0) { perror ("handler"); exit (2); } alarm (8); } int main (int argc, char **argv) { char *ptr = getenv ("NUMBER_OF_PROCESSORS"); if (!ptr) return 1; nprocs = atoi (ptr); proc = nprocs; cpusetsize = (nprocs + 7) / 8; signal (SIGALRM, handler); alarm (1); double x = 92837492873.2398749827394723984723; while (x++) x = sqrt (x), x *= x; }