From owner-freebsd-arch@FreeBSD.ORG Thu Dec 20 07:18:37 2007 Return-Path: Delivered-To: arch@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 126F816A419 for ; Thu, 20 Dec 2007 07:18:37 +0000 (UTC) (envelope-from jroberson@chesapeake.net) Received: from webaccess-cl.virtdom.com (webaccess-cl.virtdom.com [216.240.101.25]) by mx1.freebsd.org (Postfix) with ESMTP id D028013C465 for ; Thu, 20 Dec 2007 07:18:36 +0000 (UTC) (envelope-from jroberson@chesapeake.net) Received: from [192.168.1.107] (cpe-24-94-75-93.hawaii.res.rr.com [24.94.75.93]) (authenticated bits=0) by webaccess-cl.virtdom.com (8.13.6/8.13.6) with ESMTP id lBK7IVFX098126; Thu, 20 Dec 2007 02:18:32 -0500 (EST) (envelope-from jroberson@chesapeake.net) Date: Wed, 19 Dec 2007 21:19:32 -1000 (HST) From: Jeff Roberson X-X-Sender: jroberson@desktop To: arch@freebsd.org, brde@optusnet.com.au Message-ID: <20071219211025.T899@desktop> MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="2547152148-1307199678-1198135172=:899" Cc: Subject: Linux compatible setaffinity. X-BeenThere: freebsd-arch@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Discussion related to FreeBSD architecture List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 20 Dec 2007 07:18:37 -0000 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --2547152148-1307199678-1198135172=:899 Content-Type: TEXT/PLAIN; charset=US-ASCII; format=flowed I have implemented a linux compatible sched_setaffinity() call which is somewhat crippled. This allows a userspace process to supply a bitmask of processors which it will run on. I have copied the linux interface such that it should be api compatible because I believe it is a sensible interface and they beat us to it by 3 years. My implementation is crippled in that it supports binding by curthread only and to a single cpu only. Neither of the schedulers presently support binding to multiple cpus or binding a non-curthread thread. This property is not inherited by forked threads and does not effect other threads in the same process. These two limitations can gradually be weakened without effecting the syscall api. The linux api is: int sched_setaffinity(pid_t pid, unsigned int cpusetsize, cpu_set_t *mask); The cpu_set_t is the same as a fdset for select. The cpusetsize argument is used to determine the size of the array in mask. I'm mostly interested in feedback on how best to reduce the namespace pollution and avoid pulling the sched.h file into the generated syscall files (sysproto.h, etc). Anyone who feels this is a terrible interface for such a thing should speak up now. I also feel that in the medium term we will have to deal with machines with more cores than bits in their native word. Using these CPU_SET, CPU_CLR macros is a fine way to deal with this issue. I also have a primitive 'taskset', although I don't like the name, it allows you to run arbitrary programs bound to a single cpu. Thanks, Jeff --2547152148-1307199678-1198135172=:899 Content-Type: TEXT/x-diff; charset=US-ASCII; name=setaffinity.diff Content-Transfer-Encoding: BASE64 Content-ID: <20071219211932.Q899@desktop> Content-Description: Content-Disposition: attachment; filename=setaffinity.diff SW5kZXg6IGtlcm4va2Vybl9yZXNvdXJjZS5jDQo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09DQpSQ1MgZmlsZTogL0NWUy9DVlNfSVBTTy9zcmMvc3lzL2tlcm4v a2Vybl9yZXNvdXJjZS5jLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4yLjEw LjINCmRpZmYgLXUgLXIxLjIuMTAuMiBrZXJuX3Jlc291cmNlLmMNCi0tLSBr ZXJuL2tlcm5fcmVzb3VyY2UuYwkxNyBOb3YgMjAwNyAwMTowMTozOSAtMDAw MAkxLjIuMTAuMg0KKysrIGtlcm4va2Vybl9yZXNvdXJjZS5jCTIwIERlYyAy MDA3IDA3OjA5OjExIC0wMDAwDQpAQCAtNTIsNiArNTIsNyBAQA0KICNpbmNs dWRlIDxzeXMvcmVmY291bnQuaD4NCiAjaW5jbHVkZSA8c3lzL3Jlc291cmNl dmFyLmg+DQogI2luY2x1ZGUgPHN5cy9zY2hlZC5oPg0KKyNpbmNsdWRlIDxz eXMvc21wLmg+DQogI2luY2x1ZGUgPHN5cy9zeC5oPg0KICNpbmNsdWRlIDxz eXMvc3lzY2FsbHN1YnIuaD4NCiAjaW5jbHVkZSA8c3lzL3N5c2VudC5oPg0K QEAgLTczMSw2ICs3MzIsNDUgQEANCiAJcmV0dXJuIChlcnJvcik7DQogfQ0K IA0KKyNpZm5kZWYgX1NZU19TWVNQUk9UT19IXw0KK3N0cnVjdCBzY2hlZF9z ZXRhZmZpbml0eV9hcmdzIHsNCisJcGlkX3QgcGlkOw0KKwl1bnNpZ25lZCBp bnQgY3B1c2V0c2l6ZTsNCisJY3B1X3NldF90ICptYXNrOw0KK307DQorI2Vu ZGlmDQorDQoraW50DQorc2NoZWRfc2V0YWZmaW5pdHkoc3RydWN0IHRocmVh ZCAqdGQsIHN0cnVjdCBzY2hlZF9zZXRhZmZpbml0eV9hcmdzICp1YXApDQor ew0KKwljcHVfc2V0X3QgbWFzazsNCisJaW50IGVycm9yOw0KKwlpbnQgY3B1 Ow0KKwlpbnQgaTsNCisNCisJaWYgKHVhcC0+cGlkICE9IDApDQorCQlyZXR1 cm4gKEVQRVJNKTsNCisJaWYgKHVhcC0+Y3B1c2V0c2l6ZSAhPSBDUFVfU0VU U0laRSkNCisJCXJldHVybiAoRUlOVkFMKTsNCisJZXJyb3IgPSBjb3B5aW4o dWFwLT5tYXNrLCAmbWFzaywgc2l6ZW9mKG1hc2spKTsNCisJaWYgKGVycm9y KQ0KKwkJcmV0dXJuIChlcnJvcik7DQorCWZvciAoY3B1ID0gMCwgaSA9IDA7 IGkgPCBDUFVfU0VUU0laRTsgaSsrKSB7DQorCQlpZiAoIUNQVV9JU1NFVChp LCAmbWFzaykpDQorCQkJY29udGludWU7DQorCQlpZiAoY3B1KQ0KKwkJCXJl dHVybiAoRUlOVkFMKTsNCisJCWNwdSA9IGkgKyAxOw0KKwl9DQorCWNwdS0t Ow0KKwlpZiAoQ1BVX0FCU0VOVChjcHUpKQ0KKwkJcmV0dXJuIChFSU5WQUwp Ow0KKwl0aHJlYWRfbG9jayhjdXJ0aHJlYWQpOw0KKwlzY2hlZF9iaW5kKGN1 cnRocmVhZCwgY3B1KTsNCisJdGhyZWFkX3VubG9jayhjdXJ0aHJlYWQpOw0K KwlyZXR1cm4gKDApOw0KK30NCisNCiAvKg0KICAqIFRyYW5zZm9ybSB0aGUg cnVubmluZyB0aW1lIGFuZCB0aWNrIGluZm9ybWF0aW9uIGZvciBjaGlsZHJl biBvZiBwcm9jIHANCiAgKiBpbnRvIHVzZXIgYW5kIHN5c3RlbSB0aW1lIHVz YWdlLg0KSW5kZXg6IGtlcm4vbWFrZXN5c2NhbGxzLnNoDQo9PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09DQpSQ1MgZmlsZTogL0NWUy9DVlNfSVBTTy9zcmMvc3lz L2tlcm4vbWFrZXN5c2NhbGxzLnNoLHYNCnJldHJpZXZpbmcgcmV2aXNpb24g MS4xDQpkaWZmIC11IC1yMS4xIG1ha2VzeXNjYWxscy5zaA0KLS0tIGtlcm4v bWFrZXN5c2NhbGxzLnNoCTEwIEZlYiAyMDA2IDAzOjU0OjE4IC0wMDAwCTEu MQ0KKysrIGtlcm4vbWFrZXN5c2NhbGxzLnNoCTIwIERlYyAyMDA3IDA3OjA5 OjExIC0wMDAwDQpAQCAtMTE3LDYgKzExNyw4IEBADQogCQlwcmludGYgIiNk ZWZpbmVcdCVzXG5cbiIsIHN5c3Byb3RvX2ggPiBzeXNhcmcNCiAJCXByaW50 ZiAiI2luY2x1ZGUgPHN5cy9zaWduYWwuaD5cbiIgPiBzeXNhcmcNCiAJCXBy aW50ZiAiI2luY2x1ZGUgPHN5cy9hY2wuaD5cbiIgPiBzeXNhcmcNCisJCXBy aW50ZiAiI2luY2x1ZGUgPHN5cy9wcm9jLmg+XG4iID4gc3lzYXJnDQorCQlw cmludGYgIiNpbmNsdWRlIDxzeXMvc2NoZWQuaD5cbiIgPiBzeXNhcmcNCiAJ CXByaW50ZiAiI2luY2x1ZGUgPHN5cy90aHIuaD5cbiIgPiBzeXNhcmcNCiAJ CXByaW50ZiAiI2luY2x1ZGUgPHN5cy91bXR4Lmg+XG4iID4gc3lzYXJnDQog CQlwcmludGYgIiNpbmNsdWRlIDxwb3NpeDQvX3NlbWFwaG9yZS5oPlxuXG4i ID4gc3lzYXJnDQpJbmRleDoga2Vybi9zY2hlZF80YnNkLmMNCj09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0NClJDUyBmaWxlOiAvQ1ZTL0NWU19JUFNPL3NyYy9z eXMva2Vybi9zY2hlZF80YnNkLmMsdg0KcmV0cmlldmluZyByZXZpc2lvbiAx LjcuNi4yDQpkaWZmIC11IC1yMS43LjYuMiBzY2hlZF80YnNkLmMNCi0tLSBr ZXJuL3NjaGVkXzRic2QuYwkyOSBOb3YgMjAwNyAwMTo1Mzo1MSAtMDAwMAkx LjcuNi4yDQorKysga2Vybi9zY2hlZF80YnNkLmMJMjAgRGVjIDIwMDcgMDc6 MDk6MTEgLTAwMDANCkBAIC0xNDQyLDYgKzE0NDIsNyBAQA0KIAkJCWNwdV9p ZGxlKCk7DQogCQl9DQogCQltdHhfbG9ja19zcGluKCZzY2hlZF9sb2NrKTsN CisJCVNDSEVEX1NUQVRfSU5DKHN3aXRjaF9pZGxlKTsNCiAJCW1pX3N3aXRj aChTV19WT0wsIE5VTEwpOw0KIAkJbXR4X3VubG9ja19zcGluKCZzY2hlZF9s b2NrKTsNCiAJfQ0KSW5kZXg6IGtlcm4vc3lzY2FsbHMubWFzdGVyDQo9PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09DQpSQ1MgZmlsZTogL0NWUy9DVlNfSVBTTy9z cmMvc3lzL2tlcm4vc3lzY2FsbHMubWFzdGVyLHYNCnJldHJpZXZpbmcgcmV2 aXNpb24gMS4yDQpkaWZmIC11IC1yMS4yIHN5c2NhbGxzLm1hc3Rlcg0KLS0t IGtlcm4vc3lzY2FsbHMubWFzdGVyCTIxIEZlYiAyMDA3IDA2OjM0OjMwIC0w MDAwCTEuMg0KKysrIGtlcm4vc3lzY2FsbHMubWFzdGVyCTIwIERlYyAyMDA3 IDA3OjA5OjEyIC0wMDAwDQpAQCAtNzkzLDYgKzc5Myw4IEBADQogCQkJCSAg ICBsb25nIGlkLCB2b2lkICp1YWRkciwgdm9pZCAqdWFkZHIyKTsgfQ0KIDQ1 NQlBVUVfTlVMTAlNU1RECXsgaW50IHRocl9uZXcoc3RydWN0IHRocl9wYXJh bSAqcGFyYW0sIFwNCiAJCQkJICAgIGludCBwYXJhbV9zaXplKTsgfQ0KKzQ1 NglBVUVfTlVMTAlNU1RECXsgaW50IHNjaGVkX3NldGFmZmluaXR5KHBpZF90 IHBpZCwgXA0KKwkJCQkgICAgdW5zaWduZWQgaW50IGNwdXNldHNpemUsIGNw dV9zZXRfdCAqbWFzayk7IH0NCiANCiA7IFBsZWFzZSBjb3B5IGFueSBhZGRp dGlvbnMgYW5kIGNoYW5nZXMgdG8gdGhlIGZvbGxvd2luZyBjb21wYXRhYmls aXR5IHRhYmxlczoNCiA7IHN5cy9jb21wYXQvZnJlZWJzZDMyL3N5c2NhbGxz Lm1hc3Rlcg0KSW5kZXg6IHN5cy9zY2hlZC5oDQo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09DQpSQ1MgZmlsZTogL0NWUy9DVlNfSVBTTy9zcmMvc3lzL3N5cy9z Y2hlZC5oLHYNCnJldHJpZXZpbmcgcmV2aXNpb24gMS4yLjEwLjINCmRpZmYg LXUgLXIxLjIuMTAuMiBzY2hlZC5oDQotLS0gc3lzL3NjaGVkLmgJMyBEZWMg MjAwNyAyMTo0NzowOSAtMDAwMAkxLjIuMTAuMg0KKysrIHN5cy9zY2hlZC5o CTIwIERlYyAyMDA3IDA3OjA5OjE4IC0wMDAwDQpAQCAtMTk4LDYgKzE5OCwz NyBAQA0KICAgICAgICAgaW50ICAgICBzY2hlZF9wcmlvcml0eTsNCiB9Ow0K IA0KK3R5cGVkZWYJdW5zaWduZWQgbG9uZwlfX2NwdV9tYXNrOw0KKw0KKyNp Zm5kZWYJQ1BVX1NFVFNJWkUNCisjZGVmaW5lCUNQVV9TRVRTSVpFCTEwMjRV DQorI2VuZGlmDQorDQorI2RlZmluZQlfTkNQVUJJVFMJKHNpemVvZihfX2Nw dV9tYXNrKSAqIDgpCS8qIGJpdHMgcGVyIG1hc2sgKi8NCisNCisjaWZuZGVm IF9ob3dtYW55DQorI2RlZmluZQlfaG93bWFueSh4LCB5KQkoKCh4KSArICgo eSkgLSAxKSkgLyAoeSkpDQorI2VuZGlmDQorDQordHlwZWRlZglzdHJ1Y3Qg Y3B1X3NldCB7DQorCV9fY3B1X21hc2sJX19jcHVzX2JpdHNbX2hvd21hbnko Q1BVX1NFVFNJWkUsIF9OQ1BVQklUUyldOw0KK30gY3B1X3NldF90Ow0KKw0K KyNkZWZpbmUJX19jcHVzZXRfbWFzayhuKQkoKF9fY3B1X21hc2spMSA8PCAo KG4pICUgX05DUFVCSVRTKSkNCisjZGVmaW5lCUNQVV9DTFIobiwgcCkJKChw KS0+X19jcHVzX2JpdHNbKG4pL19OQ1BVQklUU10gJj0gfl9fY3B1c2V0X21h c2sobikpDQorI2RlZmluZQlDUFVfQ09QWShmLCB0KQkodm9pZCkoKih0KSA9 ICooZikpDQorI2RlZmluZQlDUFVfSVNTRVQobiwgcCkJKCgocCktPl9fY3B1 c19iaXRzWyhuKS9fTkNQVUJJVFNdICYgX19jcHVzZXRfbWFzayhuKSkgIT0g MCkNCisjZGVmaW5lCUNQVV9TRVQobiwgcCkJKChwKS0+X19jcHVzX2JpdHNb KG4pL19OQ1BVQklUU10gfD0gX19jcHVzZXRfbWFzayhuKSkNCisjZGVmaW5l CUNQVV9aRVJPKHApIGRvIHsJCQkJCVwNCisJY3B1X3NldF90ICpfcDsJCQkJ CVwNCisJX19zaXplX3QgX247CQkJCQlcDQorCQkJCQkJCVwNCisJX3AgPSAo cCk7CQkJCQlcDQorCV9uID0gX2hvd21hbnkoQ1BVX1NFVFNJWkUsIF9OQ1BV QklUUyk7CQlcDQorCXdoaWxlIChfbiA+IDApCQkJCQlcDQorCQlfcC0+X19j cHVzX2JpdHNbLS1fbl0gPSAwOwkJXA0KK30gd2hpbGUgKDApDQorDQogLyoN CiAgKiBQT1NJWCBzY2hlZHVsaW5nIGRlY2xhcmF0aW9ucyBmb3IgdXNlcmxh bmQuDQogICovDQpAQCAtMjEzLDYgKzI0NCw4IEBADQogc3RydWN0IHRpbWVz cGVjOw0KIA0KIF9fQkVHSU5fREVDTFMNCitpbnQJc2NoZWRfc2V0YWZmaW5p dHkocGlkX3QgcGlkLCB1bnNpZ25lZCBpbnQgY3B1c2V0c2l6ZSwgY3B1X3Nl dF90ICptYXNrKTsNCitpbnQJc2NoZWRfZ2V0YWZmaW5pdHkocGlkX3QgcGlk LCB1bnNpZ25lZCBpbnQgY3B1c2V0c2l6ZSwgY3B1X3NldF90ICptYXNrKTsN CiBpbnQgICAgIHNjaGVkX2dldF9wcmlvcml0eV9tYXgoaW50KTsNCiBpbnQg ICAgIHNjaGVkX2dldF9wcmlvcml0eV9taW4oaW50KTsNCiBpbnQgICAgIHNj aGVkX2dldHBhcmFtKHBpZF90LCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKik7DQo= --2547152148-1307199678-1198135172=:899--