====== epoll ====== ===== Tests ===== ==== Multithreading ==== Die //edge triggered// ... ./epolltest1.d --iterations=1000 --speed=0 --readers=300 --writers=50 --one --edge p w r e >/tmp/epoll.log grep -iE "only|fail" /tmp/epoll.log grep "I/O:.*read" /tmp/epoll.log | cut -d '"' -f 2 | sort | uniq -d grep "I/O:.*read" /tmp/epoll.log | cut -d '"' -f 2 | wc -l wie auch die //level triggered// methode ... ./epolltest1.d --iterations=1000 --speed=0 --readers=300 --writers=50 --one p w r e >/tmp/epoll.log grep -iE "only|fail" /tmp/epoll.log grep "I/O:.*read" /tmp/epoll.log | cut -d '"' -f 2 | sort | uniq -d grep "I/O:.*read" /tmp/epoll.log | cut -d '"' -f 2 | wc -l funktionieren mit vielen vielen threads (auf mehreren Kernen) ohne das mehrere ''epoll_wait'' für das selbe schreib-event unterbrochen werden. 50000 Mit ''grep'' wird getestet auf * Wurde ''epoll_wait'' beendet und vor dem lesen die Daten von einem anderen thread weggeschnappt? * Wurde jedes Datum genau einmal gelesen? * Wurden alle Daten gelesen? ===== Reenable ===== Gehen schreib-events verloren, wenn sie zwischen dem disablen durch //oneshot// und reenablen geschehen und nach dem reenablen //edge triggering// verwendet wird? Nein! {{:uni:ba:epoll-et.png|}} Wie zu erwarten war, geht es bei //level triggering// erst recht. {{:uni:ba:epoll-lt.png|}}