Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 19 Dec 2007 21:19:32 -1000 (HST)
From:      Jeff Roberson <jroberson@chesapeake.net>
To:        arch@freebsd.org, brde@optusnet.com.au
Subject:   Linux compatible setaffinity.
Message-ID:  <20071219211025.T899@desktop>

next in thread | raw e-mail | index | archive | help
  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--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20071219211025.T899>