From owner-freebsd-net@FreeBSD.ORG Fri Mar 11 13:55:27 2005 Return-Path: Delivered-To: freebsd-net@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 1D3BF16A4CE; Fri, 11 Mar 2005 13:55:27 +0000 (GMT) Received: from f22.mail.ru (f22.mail.ru [194.67.57.55]) by mx1.FreeBSD.org (Postfix) with ESMTP id 8349043D1F; Fri, 11 Mar 2005 13:55:26 +0000 (GMT) (envelope-from _pppp@mail.ru) Received: from mail by f22.mail.ru with local id 1D9kbt-000FAj-00; Fri, 11 Mar 2005 16:55:25 +0300 Received: from [81.200.13.122] by win.mail.ru with HTTP; Fri, 11 Mar 2005 16:55:25 +0300 From: dima <_pppp@mail.ru> To: Gleb Smirnoff Mime-Version: 1.0 X-Mailer: mPOP Web-Mail 2.19 X-Originating-IP: [81.200.13.122] Date: Fri, 11 Mar 2005 16:55:25 +0300 In-Reply-To: <20050311110234.GA87255@cell.sick.ru> Content-Type: multipart/mixed; boundary="----T4Mc1hoV-B6SDJqxFbvhAdRDo:1110549325" Message-Id: cc: pjd@FreeBSD.org cc: John Baldwin cc: Luigi Rizzo cc: rwatson@FreeBSD.org cc: net@FreeBSD.org cc: ru@FreeBSD.org Subject: Re[2]: Giant-free polling [PATCH] X-BeenThere: freebsd-net@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list Reply-To: dima <_pppp@mail.ru> List-Id: Networking and TCP/IP with FreeBSD List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 11 Mar 2005 13:55:27 -0000 ------T4Mc1hoV-B6SDJqxFbvhAdRDo:1110549325 Content-Type: text/plain; charset=koi8-r Content-Transfer-Encoding: 8bit > Collegues, > > On Tue, Mar 01, 2005 at 04:29:49PM -0800, Luigi Rizzo wrote: > L> [cc-ing net@freebsd.org to get more opinions] > > this good, that you have CC'ed net@, otherwise we would continue > working in parallel without collaboration. It's a pity you didn't read the complete thread, thus the original version of my patch isn't valid anymore. > > Here is attached patch made in a collaboration by ru, pjd and me. I thought about using list also, but considered it to bring too much overhead to the code. The original idea of handling arrays seems to be very elegant. > > We use separate mutex for polling, and we drop it before calling the > poll handler to avoid LOR and contention on this mutex. The recent version of the patch uses sx lock to protect pr[] and the array of per-interface mutexes iface_locks[]. So, all CPUs can poll different interfaces at the same time now. See the complete thread for details. > > We have definite evidence that now idle_poll and ISR poll can run > in parallel: if we remove PRF_RUNNING flag check, we got panics > because poll handlers of many drivers (e.g. if_em) are not reentrable. > > I think this patch is a step forward in direction of parallel polling > on SMP, since we now have two polling instances (ISR + idle) working > in parallel. I also mentioned that poll_idle() isn't called from anywhere in the kernel. Thus we have only 2 possible sources for polling: hardclock (per-CPU) and traps. The polling code in trap handler should also be changed a bit to check for the trap's source. I attach the most recent version of the patch. The only difference is locking in ether_poll_register() suggested by Luigi. > > -- > Totus tuus, Glebius. > GLEBIUS-RIPN GLEB-RIPE ------T4Mc1hoV-B6SDJqxFbvhAdRDo:1110549325 Content-Type: application/octet-stream; name="kern_poll.patch" Content-Disposition: attachment; filename="kern_poll.patch" Content-Transfer-Encoding: base64 LS0tIG9yaWcva2Vybl9wb2xsLmMJVGh1IEZlYiAxNyAxNzoxMTowNSAyMDA1CisrKyBrZXJuX3Bv bGwuYwlGcmkgTWFyICA0IDE3OjAzOjMzIDIwMDUKQEAgLTQxLDEyICs0MSwxNyBAQAogI2luY2x1 ZGUgPHN5cy9yZXNvdXJjZXZhci5oPgogI2luY2x1ZGUgPHN5cy9rdGhyZWFkLmg+CiAKKyNpbmNs dWRlIDxzeXMvbG9jay5oPgkJCS8qIGZvciBzeCg5KQkJCSovCisjaW5jbHVkZSA8c3lzL3N4Lmg+ CisKICNpZmRlZiBTTVAKICNpZm5kZWYgQ09NUElMSU5HX0xJTlQKICNlcnJvciBERVZJQ0VfUE9M TElORyBpcyBub3QgY29tcGF0aWJsZSB3aXRoIFNNUAogI2VuZGlmCiAjZW5kaWYKIAorc3RydWN0 IHN4IHBvbGxpbmdfbG9jazsKKwogc3RhdGljIHZvaWQgbmV0aXNyX3BvbGwodm9pZCk7CQkvKiB0 aGUgdHdvIG5ldGlzciBoYW5kbGVycyAgICAgICovCiBzdGF0aWMgdm9pZCBuZXRpc3JfcG9sbG1v cmUodm9pZCk7CiAKQEAgLTE4Miw2ICsxODcsNyBAQAogfTsKIAogc3RhdGljIHN0cnVjdCBwb2xs cmVjIHByW1BPTExfTElTVF9MRU5dOworc3RydWN0IG10eCBpZmFjZV9sb2Nrc1tQT0xMX0xJU1Rf TEVOXTsKIAogc3RhdGljIHZvaWQKIGluaXRfZGV2aWNlX3BvbGwodm9pZCkKQEAgLTE4OSw2ICsx OTUsNyBAQAogCiAJbmV0aXNyX3JlZ2lzdGVyKE5FVElTUl9QT0xMLCAobmV0aXNyX3QgKiluZXRp c3JfcG9sbCwgTlVMTCwgMCk7CiAJbmV0aXNyX3JlZ2lzdGVyKE5FVElTUl9QT0xMTU9SRSwgKG5l dGlzcl90ICopbmV0aXNyX3BvbGxtb3JlLCBOVUxMLCAwKTsKKwlzeF9pbml0KCAmcG9sbGluZ19s b2NrLCAicG9sbGluZyIgKTsKIH0KIFNZU0lOSVQoZGV2aWNlX3BvbGwsIFNJX1NVQl9DTE9DS1Ms IFNJX09SREVSX01JRERMRSwgaW5pdF9kZXZpY2VfcG9sbCwgTlVMTCkKIApAQCAtMjUyLDE1ICsy NTksMTkgQEAKIHsKIAlpbnQgaTsKIAotCW10eF9sb2NrKCZHaWFudCk7CisJc3hfc2xvY2soICZw b2xsaW5nX2xvY2sgKTsKIAogCWlmIChjb3VudCA+IHBvbGxfZWFjaF9idXJzdCkKIAkJY291bnQg PSBwb2xsX2VhY2hfYnVyc3Q7CiAJZm9yIChpID0gMCA7IGkgPCBwb2xsX2hhbmRsZXJzIDsgaSsr KQotCQlpZiAocHJbaV0uaGFuZGxlciAmJiAoSUZGX1VQfElGRl9SVU5OSU5HKSA9PQotCQkgICAg KHByW2ldLmlmcC0+aWZfZmxhZ3MgJiAoSUZGX1VQfElGRl9SVU5OSU5HKSkgKQorCQlpZiggcHJb aV0uaGFuZGxlciAmJiAoIElGRl9VUCB8IElGRl9SVU5OSU5HICkgPT0KKwkJICAgICggcHJbaV0u aWZwLT5pZl9mbGFncyAmICggSUZGX1VQIHwgSUZGX1JVTk5JTkcgKSApICYmCisJCSAgICBtdHhf dHJ5bG9jayggJmlmYWNlX2xvY2tzW2ldICkgKSB7CiAJCQlwcltpXS5oYW5kbGVyKHByW2ldLmlm cCwgMCwgY291bnQpOyAvKiBxdWljayBjaGVjayAqLwotCW10eF91bmxvY2soJkdpYW50KTsKKwkJ CW10eF91bmxvY2soICZpZmFjZV9sb2Nrc1tpXSApOworCQl9CisKKwlzeF9zdW5sb2NrKCAmcG9s bGluZ19sb2NrICk7CiB9CiAKIC8qCkBAIC0zMzUsNyArMzQ2LDYgQEAKIAlzdGF0aWMgaW50IHJl Z19mcmFjX2NvdW50OwogCWludCBpLCBjeWNsZXM7CiAJZW51bSBwb2xsX2NtZCBhcmcgPSBQT0xM X09OTFk7Ci0JbXR4X2xvY2soJkdpYW50KTsKIAogCXBoYXNlID0gMzsKIAlpZiAocmVzaWR1YWxf YnVyc3QgPT0gMCkgeyAvKiBmaXJzdCBjYWxsIGluIHRoaXMgdGljayAqLwpAQCAtMzc3LDI2ICsz ODcsMzcgQEAKIAkJcmVzaWR1YWxfYnVyc3QgOiBwb2xsX2VhY2hfYnVyc3Q7CiAJcmVzaWR1YWxf YnVyc3QgLT0gY3ljbGVzOwogCisJc3hfc2xvY2soICZwb2xsaW5nX2xvY2sgKTsKKwogCWlmIChw b2xsaW5nKSB7CiAJCWZvciAoaSA9IDAgOyBpIDwgcG9sbF9oYW5kbGVycyA7IGkrKykKLQkJCWlm IChwcltpXS5oYW5kbGVyICYmIChJRkZfVVB8SUZGX1JVTk5JTkcpID09Ci0JCQkgICAgKHByW2ld LmlmcC0+aWZfZmxhZ3MgJiAoSUZGX1VQfElGRl9SVU5OSU5HKSkgKQorCQkJaWYoIHByW2ldLmhh bmRsZXIgJiYKKwkJCSAgICAoIElGRl9VUCB8IElGRl9SVU5OSU5HICkgPT0KKwkJCSAgICAoIHBy W2ldLmlmcC0+aWZfZmxhZ3MgJiAoSUZGX1VQIHwgSUZGX1JVTk5JTkcpICkgJiYKKwkJCSAgICBt dHhfdHJ5bG9jayggJmlmYWNlX2xvY2tzW2ldICkgKSB7CiAJCQkJcHJbaV0uaGFuZGxlcihwcltp XS5pZnAsIGFyZywgY3ljbGVzKTsKKwkJCQltdHhfdW5sb2NrKCAmaWZhY2VfbG9ja3NbaV0gKTsK KwkJCX0KIAl9IGVsc2UgewkvKiB1bnJlZ2lzdGVyICovCiAJCWZvciAoaSA9IDAgOyBpIDwgcG9s bF9oYW5kbGVycyA7IGkrKykgewotCQkJaWYgKHByW2ldLmhhbmRsZXIgJiYKLQkJCSAgICBwcltp XS5pZnAtPmlmX2ZsYWdzICYgSUZGX1JVTk5JTkcpIHsKKwkJCWlmKCBwcltpXS5oYW5kbGVyICYm CisJCQkgICAgcHJbaV0uaWZwLT5pZl9mbGFncyAmIElGRl9SVU5OSU5HICYmCisJCQkgICAgbXR4 X3RyeWxvY2soICZpZmFjZV9sb2Nrc1tpXSApICkgewogCQkJCXByW2ldLmlmcC0+aWZfZmxhZ3Mg Jj0gfklGRl9QT0xMSU5HOwogCQkJCXByW2ldLmhhbmRsZXIocHJbaV0uaWZwLCBQT0xMX0RFUkVH SVNURVIsIDEpOworCQkJCW10eF91bmxvY2soICZpZmFjZV9sb2Nrc1tpXSApOworCQkJCW10eF9k ZXN0cm95KCAmaWZhY2VfbG9ja3NbaV0gKTsKIAkJCX0KIAkJCXByW2ldLmhhbmRsZXI9TlVMTDsK IAkJfQogCQlyZXNpZHVhbF9idXJzdCA9IDA7CiAJCXBvbGxfaGFuZGxlcnMgPSAwOwogCX0KKwor CXN4X3N1bmxvY2soICZwb2xsaW5nX2xvY2sgKTsKKwogCS8qIG9uIC1zdGFibGUsIHNjaGVkbmV0 aXNyKE5FVElTUl9QT0xMTU9SRSk7ICovCiAJcGhhc2UgPSA0OwotCW10eF91bmxvY2soJkdpYW50 KTsKIH0KIAogLyoKQEAgLTQ0MCw5ICs0NjEsMTUgQEAKIAkJcmV0dXJuIDA7IC8qIG5vIHBvbGxp bmcgZm9yIHlvdSAqLwogCX0KIAorCXN4X3hsb2NrKCAmcG9sbGluZ19sb2NrICk7CisKIAlwcltw b2xsX2hhbmRsZXJzXS5oYW5kbGVyID0gaDsKIAlwcltwb2xsX2hhbmRsZXJzXS5pZnAgPSBpZnA7 CisJbXR4X2luaXQoICZpZmFjZV9sb2Nrc1twb2xsX2hhbmRsZXJzXSwgaWZwLT5pZl94bmFtZSwg TlVMTCwgTVRYX0RFRiApOwogCXBvbGxfaGFuZGxlcnMrKzsKKworCXN4X3h1bmxvY2soICZwb2xs aW5nX2xvY2sgKTsKKwogCWlmcC0+aWZfZmxhZ3MgfD0gSUZGX1BPTExJTkc7CiAJc3BseChzKTsK IAlpZiAoaWRsZXBvbGxfc2xlZXBpbmcpCkBAIC00NjEsMTcgKzQ4OCwxOSBAQAogewogCWludCBp OwogCi0JbXR4X2xvY2soJkdpYW50KTsKKwogCWlmICggIWlmcCB8fCAhKGlmcC0+aWZfZmxhZ3Mg JiBJRkZfUE9MTElORykgKSB7Ci0JCW10eF91bmxvY2soJkdpYW50KTsKIAkJcmV0dXJuIDA7CiAJ fQorCisJc3hfeGxvY2soICZwb2xsaW5nX2xvY2sgKTsKKwogCWZvciAoaSA9IDAgOyBpIDwgcG9s bF9oYW5kbGVycyA7IGkrKykKIAkJaWYgKHByW2ldLmlmcCA9PSBpZnApIC8qIGZvdW5kIGl0ICov CiAJCQlicmVhazsKIAlpZnAtPmlmX2ZsYWdzICY9IH5JRkZfUE9MTElORzsgLyogZm91bmQgb3Ig bm90Li4uICovCiAJaWYgKGkgPT0gcG9sbF9oYW5kbGVycykgewotCQltdHhfdW5sb2NrKCZHaWFu dCk7CisJCXN4X3h1bmxvY2soICZwb2xsaW5nX2xvY2sgKTsKIAkJcHJpbnRmKCJldGhlcl9wb2xs X2RlcmVnaXN0ZXI6IGlmcCBub3QgZm91bmQhISFcbiIpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC00 NzksOCArNTA4LDEwIEBACiAJaWYgKGkgPCBwb2xsX2hhbmRsZXJzKSB7IC8qIExhc3QgZW50cnkg cmVwbGFjZXMgdGhpcyBvbmUuICovCiAJCXByW2ldLmhhbmRsZXIgPSBwcltwb2xsX2hhbmRsZXJz XS5oYW5kbGVyOwogCQlwcltpXS5pZnAgPSBwcltwb2xsX2hhbmRsZXJzXS5pZnA7CisJCW10eF9k ZXN0cm95KCAmaWZhY2VfbG9ja3NbaV0gKTsKKwkJaWZhY2VfbG9ja3NbaV0gPSBpZmFjZV9sb2Nr c1twb2xsX2hhbmRsZXJzXTsKIAl9Ci0JbXR4X3VubG9jaygmR2lhbnQpOworCXN4X3h1bmxvY2so ICZwb2xsaW5nX2xvY2sgKTsKIAlyZXR1cm4gMTsKIH0KIApAQCAtNTAxLDEwICs1MzIsMTAgQEAK IAlmb3IgKDs7KSB7CiAJCWlmIChwb2xsX2luX2lkbGVfbG9vcCAmJiBwb2xsX2hhbmRsZXJzID4g MCkgewogCQkJaWRsZXBvbGxfc2xlZXBpbmcgPSAwOwotCQkJbXR4X2xvY2soJkdpYW50KTsKKwkJ CS8qIG10eF9sb2NrKCZHaWFudCk7ICovCiAJCQlldGhlcl9wb2xsKHBvbGxfZWFjaF9idXJzdCk7 Ci0JCQltdHhfdW5sb2NrKCZHaWFudCk7Ci0JCQltdHhfYXNzZXJ0KCZHaWFudCwgTUFfTk9UT1dO RUQpOworCQkJLyogbXR4X3VubG9jaygmR2lhbnQpOworCQkJbXR4X2Fzc2VydCgmR2lhbnQsIE1B X05PVE9XTkVEKTsgKi8KIAkJCW10eF9sb2NrX3NwaW4oJnNjaGVkX2xvY2spOwogCQkJbWlfc3dp dGNoKFNXX1ZPTCwgTlVMTCk7CiAJCQltdHhfdW5sb2NrX3NwaW4oJnNjaGVkX2xvY2spOwo= ------T4Mc1hoV-B6SDJqxFbvhAdRDo:1110549325--