From: SASADA Koichi Date: 2011-06-17T03:05:26+09:00 Subject: [ruby-dev:43834] new deadlock detection This is a multi-part message in MIME format. --------------020203000807010501030607 Content-Type: text/plain; charset=ISO-2022-JP Content-Transfer-Encoding: 7bit  ささだです.  デッドロック検出をする方法を新しく実装してみました.test-all が通った ので,添付してお送りします. 方針: - sleeper の増減を,「スレッドを起こす人」にさせるようにした. - デッドロックの検出を,living thread num と sleeper の比較 だけで済むようにした. 利点: - deadlock 検出のコードが随分と綺麗になった. まずそうなところ: - THREAD_INTERRUPTED という状態を用意したので,意図しない 影響が出るかもしれない. - rb_threadptr_interrupt で th->status を変えているが,  race がおきそう...(この関数は GVL 外からも呼ばれる可能性がある). → スレッドの状態遷移について, しっかりとドキュメント化する必要がある 微妙なところ: - あまり速くはならなかった,というか若干遅くなった  (現在のが十分速い,という) 前 後 vm4_thread_mutex1 0.486 0.516 vm4_thread_mutex2 0.484 0.519 vm4_thread_mutex3 0.720 0.746 (シンプルになったんで,速くなるかなぁ,と期待したんだけど.polling のほ うが速いってことか?)  1.9.3 には怖くて入れられないような気がしますが,今後はこっちのほうが, 見通しが良くていいんでないか,という気がします.今のは難しいなぁ,とか. -- // SASADA Koichi at atdot dot net --------------020203000807010501030607 Content-Type: text/plain; name="new_deadloc.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="new_deadloc.patch" SW5kZXg6IHZtX2NvcmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSB2bV9jb3JlLmgJKHJldmlzaW9u IDMyMTMxKQorKysgdm1fY29yZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNTksNiArMzU5LDcg QEAgZW51bSByYl90aHJlYWRfc3RhdHVzIHsKICAgICBUSFJFQURfUlVOTkFCTEUsCiAgICAg VEhSRUFEX1NUT1BQRUQsCiAgICAgVEhSRUFEX1NUT1BQRURfRk9SRVZFUiwKKyAgICBUSFJF QURfSU5URVJSVVBURUQsCiAgICAgVEhSRUFEX0tJTExFRAogfTsKIApJbmRleDogdGhyZWFk LmMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQotLS0gdGhyZWFkLmMJKHJldmlzaW9uIDMyMTMxKQorKysgdGhy ZWFkLmMJKHdvcmtpbmcgY29weSkKQEAgLTMwMCw2ICszMDAsMTIgQEAgcmJfdGhyZWFkcHRy X2ludGVycnVwdChyYl90aHJlYWRfdCAqdGgpCiAgICAgZWxzZSB7CiAJLyogbm9uZSAqLwog ICAgIH0KKworICAgIGlmICh0aC0+c3RhdHVzID09IFRIUkVBRF9TVE9QUEVEX0ZPUkVWRVIp IHsKKwl0aC0+dm0tPnNsZWVwZXItLTsKKyAgICB9CisgICAgdGgtPnN0YXR1cyA9IFRIUkVB RF9JTlRFUlJVUFRFRDsKKwogICAgIG5hdGl2ZV9tdXRleF91bmxvY2soJnRoLT5pbnRlcnJ1 cHRfbG9jayk7CiB9CiAKQEAgLTg0Niw5ICs4NTIsNyBAQCBzbGVlcF9mb3JldmVyKHJiX3Ro cmVhZF90ICp0aCwgaW50IGRlYWRsCiAJICAgIHJiX2NoZWNrX2RlYWRsb2NrKHRoLT52bSk7 CiAJfQogCW5hdGl2ZV9zbGVlcCh0aCwgMCk7Ci0JaWYgKGRlYWRsb2NrYWJsZSkgewotCSAg ICB0aC0+dm0tPnNsZWVwZXItLTsKLQl9CisKIAlSVUJZX1ZNX0NIRUNLX0lOVFMoKTsKICAg ICB9IHdoaWxlICh0aC0+c3RhdHVzID09IFRIUkVBRF9TVE9QUEVEX0ZPUkVWRVIpOwogICAg IHRoLT5zdGF0dXMgPSBwcmV2X3N0YXR1czsKQEAgLTEzMTcsNyArMTMyMSw3IEBAIHJiX3Ro cmVhZHB0cl9leGVjdXRlX2ludGVycnVwdHNfcmVjKHJiX3QKIAkJcmJfZXhjX3JhaXNlKGVy cik7CiAJICAgIH0KIAl9Ci0JdGgtPnN0YXR1cyA9IHN0YXR1czsKKwkvLyB0aC0+c3RhdHVz ID0gc3RhdHVzOwogCiAJaWYgKGZpbmFsaXplcl9pbnRlcnJ1cHQpIHsKIAkgICAgcmJfZ2Nf ZmluYWxpemVfZGVmZXJyZWQoKTsKQEAgLTE4OTksNiArMTkwMyw4IEBAIHRocmVhZF9zdGF0 dXNfbmFtZShlbnVtIHJiX3RocmVhZF9zdGF0dXMKICAgICAgIGNhc2UgVEhSRUFEX1NUT1BQ RUQ6CiAgICAgICBjYXNlIFRIUkVBRF9TVE9QUEVEX0ZPUkVWRVI6CiAJcmV0dXJuICJzbGVl cCI7CisgICAgICBjYXNlIFRIUkVBRF9JTlRFUlJVUFRFRDoKKwlyZXR1cm4gImludGVycnVw dGVkIjsKICAgICAgIGNhc2UgVEhSRUFEX1RPX0tJTEw6CiAJcmV0dXJuICJhYm9ydGluZyI7 CiAgICAgICBjYXNlIFRIUkVBRF9LSUxMRUQ6CkBAIC0yOTY1LDcgKzI5NzEsNyBAQCByYl90 aHJlYWRwdHJfY2hlY2tfc2lnbmFsKHJiX3RocmVhZF90ICptCiAJdGhyZWFkX2RlYnVnKCJt YWluX3RocmVhZDogJXMsIHNpZzogJWRcbiIsCiAJCSAgICAgdGhyZWFkX3N0YXR1c19uYW1l KHByZXZfc3RhdHVzKSwgc2lnKTsKIAltdGgtPmV4ZWNfc2lnbmFsID0gc2lnOwotCWlmICht dGgtPnN0YXR1cyAhPSBUSFJFQURfS0lMTEVEKSBtdGgtPnN0YXR1cyA9IFRIUkVBRF9SVU5O QUJMRTsKKwkvLyBpZiAobXRoLT5zdGF0dXMgIT0gVEhSRUFEX0tJTExFRCkgbXRoLT5zdGF0 dXMgPSBUSFJFQURfUlVOTkFCTEU7CiAJcmJfdGhyZWFkcHRyX2ludGVycnVwdChtdGgpOwog CW10aC0+c3RhdHVzID0gcHJldl9zdGF0dXM7CiAgICAgfQpAQCAtMzQ0OCwxMiArMzQ1NCwy NiBAQCByYl9tdXRleF90cnlsb2NrKFZBTFVFIHNlbGYpCiAgICAgcmV0dXJuIGxvY2tlZDsK IH0KIAorc3RhdGljIHZvaWQKK2xvY2tfaW50ZXJydXB0KHZvaWQgKnB0cikKK3sKKyAgICBy Yl9tdXRleF90ICptdXRleCA9IChyYl9tdXRleF90ICopcHRyOworCisgICAgbmF0aXZlX211 dGV4X2xvY2soJm11dGV4LT5sb2NrKTsKKyAgICB7CisJaWYgKG11dGV4LT5jb25kX3dhaXRp bmcgPiAwKSB7CisJICAgIG5hdGl2ZV9jb25kX2Jyb2FkY2FzdCgmbXV0ZXgtPmNvbmQpOwor CX0KKyAgICB9CisgICAgbmF0aXZlX211dGV4X3VubG9jaygmbXV0ZXgtPmxvY2spOworfQor CiBzdGF0aWMgaW50Ci1sb2NrX2Z1bmMocmJfdGhyZWFkX3QgKnRoLCByYl9tdXRleF90ICpt dXRleCwgaW50IHRpbWVvdXRfbXMpCitsb2NrX2Z1bmMocmJfdGhyZWFkX3QgKnRoLCByYl9t dXRleF90ICptdXRleCkKIHsKICAgICBpbnQgaW50ZXJydXB0ZWQgPSAwOwotICAgIGludCBl cnIgPSAwOwogCisgICAgbmF0aXZlX211dGV4X2xvY2soJm11dGV4LT5sb2NrKTsKICAgICBt dXRleC0+Y29uZF93YWl0aW5nKys7CiAgICAgZm9yICg7OykgewogCWlmICghbXV0ZXgtPnRo KSB7CkBAIC0zNDY0LDQwICszNDg0LDE1IEBAIGxvY2tfZnVuYyhyYl90aHJlYWRfdCAqdGgs IHJiX211dGV4X3QgKm0KIAkgICAgaW50ZXJydXB0ZWQgPSAxOwogCSAgICBicmVhazsKIAl9 Ci0JaWYgKGVyciA9PSBFVElNRURPVVQpIHsKLQkgICAgaW50ZXJydXB0ZWQgPSAyOwotCSAg ICBicmVhazsKLQl9CiAKLQlpZiAodGltZW91dF9tcykgewotCSAgICBzdHJ1Y3QgdGltZXNw ZWMgdGltZW91dF9yZWw7Ci0JICAgIHN0cnVjdCB0aW1lc3BlYyB0aW1lb3V0OwotCi0JICAg IHRpbWVvdXRfcmVsLnR2X3NlYyA9IDA7Ci0JICAgIHRpbWVvdXRfcmVsLnR2X25zZWMgPSB0 aW1lb3V0X21zICogMTAwMCAqIDEwMDA7Ci0JICAgIHRpbWVvdXQgPSBuYXRpdmVfY29uZF90 aW1lb3V0KCZtdXRleC0+Y29uZCwgdGltZW91dF9yZWwpOwotCSAgICBlcnIgPSBuYXRpdmVf Y29uZF90aW1lZHdhaXQoJm11dGV4LT5jb25kLCAmbXV0ZXgtPmxvY2ssICZ0aW1lb3V0KTsK LQl9Ci0JZWxzZSB7CiAJICAgIG5hdGl2ZV9jb25kX3dhaXQoJm11dGV4LT5jb25kLCAmbXV0 ZXgtPmxvY2spOwotCSAgICBlcnIgPSAwOwotCX0KICAgICB9CiAgICAgbXV0ZXgtPmNvbmRf d2FpdGluZy0tOworICAgIG5hdGl2ZV9tdXRleF91bmxvY2soJm11dGV4LT5sb2NrKTsKIAog ICAgIHJldHVybiBpbnRlcnJ1cHRlZDsKIH0KIAotc3RhdGljIHZvaWQKLWxvY2tfaW50ZXJy dXB0KHZvaWQgKnB0cikKLXsKLSAgICByYl9tdXRleF90ICptdXRleCA9IChyYl9tdXRleF90 ICopcHRyOwotICAgIG5hdGl2ZV9tdXRleF9sb2NrKCZtdXRleC0+bG9jayk7Ci0gICAgaWYg KG11dGV4LT5jb25kX3dhaXRpbmcgPiAwKQotCW5hdGl2ZV9jb25kX2Jyb2FkY2FzdCgmbXV0 ZXgtPmNvbmQpOwotICAgIG5hdGl2ZV9tdXRleF91bmxvY2soJm11dGV4LT5sb2NrKTsKLX0K LQogLyoKICAqIGNhbGwtc2VxOgogICogICAgbXV0ZXgubG9jayAgLT4gc2VsZgpAQCAtMzUx OSw0MCArMzUxNCwyOSBAQCByYl9tdXRleF9sb2NrKFZBTFVFIHNlbGYpCiAJfQogCiAJd2hp bGUgKG11dGV4LT50aCAhPSB0aCkgewotCSAgICBpbnQgaW50ZXJydXB0ZWQ7CiAJICAgIGVu dW0gcmJfdGhyZWFkX3N0YXR1cyBwcmV2X3N0YXR1cyA9IHRoLT5zdGF0dXM7Ci0JICAgIGlu dCB0aW1lb3V0X21zID0gMDsKIAkgICAgc3RydWN0IHJiX3VuYmxvY2tfY2FsbGJhY2sgb2xk dWJmOworCSAgICBpbnQgaW50ZXJydXB0ZWQ7CiAKIAkgICAgc2V0X3VuYmxvY2tfZnVuY3Rp b24odGgsIGxvY2tfaW50ZXJydXB0LCBtdXRleCwgJm9sZHViZik7CiAJICAgIHRoLT5zdGF0 dXMgPSBUSFJFQURfU1RPUFBFRF9GT1JFVkVSOwogCSAgICB0aC0+bG9ja2luZ19tdXRleCA9 IHNlbGY7Ci0KLQkgICAgbmF0aXZlX211dGV4X2xvY2soJm11dGV4LT5sb2NrKTsKIAkgICAg dGgtPnZtLT5zbGVlcGVyKys7Ci0JICAgIC8qCi0JICAgICAqIENhcmVmdWxseSEgd2hpbGUg c29tZSBjb250ZW5kZWQgdGhyZWFkcyBhcmUgaW4gbG9ja19mdW5jKCksCi0JICAgICAqIHZt LT5zbGVlcHIgaXMgdW5zdGFibGUgdmFsdWUuIHdlIGhhdmUgdG8gYXZvaWQgYm90aCBkZWFk bG9jawotCSAgICAgKiBhbmQgYnVzeSBsb29wLgotCSAgICAgKi8KLQkgICAgaWYgKHZtX2xp dmluZ190aHJlYWRfbnVtKHRoLT52bSkgPT0gdGgtPnZtLT5zbGVlcGVyKSB7Ci0JCXRpbWVv dXRfbXMgPSAxMDA7Ci0JICAgIH0KKworCSAgICByYl9jaGVja19kZWFkbG9jayh0aC0+dm0p OworCiAJICAgIEdWTF9VTkxPQ0tfQkVHSU4oKTsKLQkgICAgaW50ZXJydXB0ZWQgPSBsb2Nr X2Z1bmModGgsIG11dGV4LCB0aW1lb3V0X21zKTsKLQkgICAgbmF0aXZlX211dGV4X3VubG9j aygmbXV0ZXgtPmxvY2spOworCSAgICB7CisJCWludGVycnVwdGVkID0gbG9ja19mdW5jKHRo LCBtdXRleCk7CisJICAgIH0KIAkgICAgR1ZMX1VOTE9DS19FTkQoKTsKLQogCSAgICByZXNl dF91bmJsb2NrX2Z1bmN0aW9uKHRoLCAmb2xkdWJmKTsKIAogCSAgICB0aC0+bG9ja2luZ19t dXRleCA9IFFmYWxzZTsKLQkgICAgaWYgKG11dGV4LT50aCAmJiBpbnRlcnJ1cHRlZCA9PSAy KSB7Ci0JCXJiX2NoZWNrX2RlYWRsb2NrKHRoLT52bSk7Ci0JICAgIH0KKwogCSAgICBpZiAo dGgtPnN0YXR1cyA9PSBUSFJFQURfU1RPUFBFRF9GT1JFVkVSKSB7CiAJCXRoLT5zdGF0dXMg PSBwcmV2X3N0YXR1czsKIAkgICAgfQotCSAgICB0aC0+dm0tPnNsZWVwZXItLTsKIAogCSAg ICBpZiAobXV0ZXgtPnRoID09IHRoKSBtdXRleF9sb2NrZWQodGgsIHNlbGYpOwogCkBAIC0z NTgwLDkgKzM1NjQsMTEgQEAgcmJfbXV0ZXhfdW5sb2NrX3RoKHJiX211dGV4X3QgKm11dGV4 LCByYgogICAgIH0KICAgICBlbHNlIHsKIAltdXRleC0+dGggPSAwOwotCWlmIChtdXRleC0+ Y29uZF93YWl0aW5nID4gMCkKKwlpZiAobXV0ZXgtPmNvbmRfd2FpdGluZyA+IDApIHsKKwkg ICAgdGgtPnZtLT5zbGVlcGVyLS07CiAJICAgIG5hdGl2ZV9jb25kX3NpZ25hbCgmbXV0ZXgt PmNvbmQpOwogICAgIH0KKyAgICB9CiAKICAgICBuYXRpdmVfbXV0ZXhfdW5sb2NrKCZtdXRl eC0+bG9jayk7CiAKQEAgLTQ3MTAsNjUgKzQ2OTYsMTYgQEAgcnVieV9uYXRpdmVfdGhyZWFk X3Aodm9pZCkKICAgICByZXR1cm4gdGggIT0gMDsKIH0KIAotc3RhdGljIGludAotY2hlY2tf ZGVhZGxvY2tfaShzdF9kYXRhX3Qga2V5LCBzdF9kYXRhX3QgdmFsLCBpbnQgKmZvdW5kKQot ewotICAgIFZBTFVFIHRodmFsID0ga2V5OwotICAgIHJiX3RocmVhZF90ICp0aDsKLSAgICBH ZXRUaHJlYWRQdHIodGh2YWwsIHRoKTsKLQotICAgIGlmICh0aC0+c3RhdHVzICE9IFRIUkVB RF9TVE9QUEVEX0ZPUkVWRVIgfHwgUlVCWV9WTV9JTlRFUlJVUFRFRCh0aCkpIHsKLQkqZm91 bmQgPSAxOwotICAgIH0KLSAgICBlbHNlIGlmICh0aC0+bG9ja2luZ19tdXRleCkgewotCXJi X211dGV4X3QgKm11dGV4OwotCUdldE11dGV4UHRyKHRoLT5sb2NraW5nX211dGV4LCBtdXRl eCk7Ci0KLQluYXRpdmVfbXV0ZXhfbG9jaygmbXV0ZXgtPmxvY2spOwotCWlmIChtdXRleC0+ dGggPT0gdGggfHwgKCFtdXRleC0+dGggJiYgbXV0ZXgtPmNvbmRfd2FpdGluZykpIHsKLQkg ICAgKmZvdW5kID0gMTsKLQl9Ci0JbmF0aXZlX211dGV4X3VubG9jaygmbXV0ZXgtPmxvY2sp OwotICAgIH0KLQotICAgIHJldHVybiAoKmZvdW5kKSA/IFNUX1NUT1AgOiBTVF9DT05USU5V RTsKLX0KLQotI2lmZGVmIERFQlVHX0RFQURMT0NLX0NIRUNLCi1zdGF0aWMgaW50Ci1kZWJ1 Z19pKHN0X2RhdGFfdCBrZXksIHN0X2RhdGFfdCB2YWwsIGludCAqZm91bmQpCi17Ci0gICAg VkFMVUUgdGh2YWwgPSBrZXk7Ci0gICAgcmJfdGhyZWFkX3QgKnRoOwotICAgIEdldFRocmVh ZFB0cih0aHZhbCwgdGgpOwotCi0gICAgcHJpbnRmKCJ0aDolcCAlZCAlZCIsIHRoLCB0aC0+ c3RhdHVzLCB0aC0+aW50ZXJydXB0X2ZsYWcpOwotICAgIGlmICh0aC0+bG9ja2luZ19tdXRl eCkgewotCXJiX211dGV4X3QgKm11dGV4OwotCUdldE11dGV4UHRyKHRoLT5sb2NraW5nX211 dGV4LCBtdXRleCk7Ci0KLQluYXRpdmVfbXV0ZXhfbG9jaygmbXV0ZXgtPmxvY2spOwotCXBy aW50ZigiICVwICVkXG4iLCBtdXRleC0+dGgsIG11dGV4LT5jb25kX3dhaXRpbmcpOwotCW5h dGl2ZV9tdXRleF91bmxvY2soJm11dGV4LT5sb2NrKTsKLSAgICB9Ci0gICAgZWxzZQotCXB1 dHMoIiIpOwotCi0gICAgcmV0dXJuIFNUX0NPTlRJTlVFOwotfQotI2VuZGlmCi0KIHN0YXRp YyB2b2lkCiByYl9jaGVja19kZWFkbG9jayhyYl92bV90ICp2bSkKIHsKLSAgICBpbnQgZm91 bmQgPSAwOworICAgIGludCB0bnVtID0gdm1fbGl2aW5nX3RocmVhZF9udW0odm0pOwogCi0g ICAgaWYgKHZtX2xpdmluZ190aHJlYWRfbnVtKHZtKSA+IHZtLT5zbGVlcGVyKSByZXR1cm47 Ci0gICAgaWYgKHZtX2xpdmluZ190aHJlYWRfbnVtKHZtKSA8IHZtLT5zbGVlcGVyKSByYl9i dWcoInNsZWVwZXIgbXVzdCBub3QgYmUgbW9yZSB0aGFuIHZtX2xpdmluZ190aHJlYWRfbnVt KHZtKSIpOworICAgIGlmICh0bnVtID4gdm0tPnNsZWVwZXIpIHJldHVybjsKKyAgICBpZiAo dG51bSA8IHZtLT5zbGVlcGVyKSByYl9idWcoInNsZWVwZXIgbXVzdCBub3QgYmUgbW9yZSB0 aGFuIHZtX2xpdmluZ190aHJlYWRfbnVtKHZtKSIpOwogCi0gICAgc3RfZm9yZWFjaCh2bS0+ bGl2aW5nX3RocmVhZHMsIGNoZWNrX2RlYWRsb2NrX2ksIChzdF9kYXRhX3QpJmZvdW5kKTsK LQotICAgIGlmICghZm91bmQpIHsKKyAgICAvKiBkZWFkbG9jayAqLworICAgIHsKIAlWQUxV RSBhcmd2WzJdOwogCWFyZ3ZbMF0gPSByYl9lRmF0YWw7CiAJYXJndlsxXSA9IHJiX3N0cl9u ZXcyKCJkZWFkbG9jayBkZXRlY3RlZCIpOwo= --------------020203000807010501030607--