verhindern, dass linux-Gewinde mit Unterbrechung durch scheduler
Wie erklären Sie den thread-scheduler in linux nicht zu unterbrechen, dein thread Gründen? Ich bin die Programmierung im user-Modus. Nicht einfach sperren einer mutex-acomplish? Ich möchte verhindern, dass andere threads in meinem Prozess geplant werden, wenn eine bestimmte Funktion ausgeführt wird. Sie blockieren würde und ich wäre Verschwendung von cpu-Zyklen mit der Kontext-switches. Ich möchte jedem thread ausführen der Funktion in der Lage sein zu beenden, ausführen, ohne Unterbrechung, auch wenn die Fäden' timeslice überschritten wird.
Hi danke für die Kommentare. Ich glaube, ich gelernt, eine Antwort, die KEINE ist. Der Grund, warum ich fragte, war: Unsere app verbringt viel Zeit im IO-wait-states, denn es greift auf die 500 GB im Wert von Daten-Dateien, die ändern sich stündlich. Ich will viele threads parallel auszuführen, IO (ja der Filer kann damit umgehen...Sie sind schon das handling IO von 3200 Instanzen der app und das ist nicht mehr Arbeit, sondern verkürzen die Mauer der Zeit). Unsere Boxen sind alle MP mit 8-64 "CPUs" zählen die tatsächlichen Kerne und hyperthreading...also ich kann schon eine Menge von threads, die gleichzeitig laufen.
Parallell IO in der Regel wird die Leistung verringert, es kann Recht erheblich sein. Ein Antrieb kann nicht Dinge tun, die parallel(über einen bestimmten Punkt abhängig von Ihrem raid-setup). Wenn Sie möchten, um die Leistung zu maximieren, Sie wollen eine Handvoll IO-threads Fütterung (möglichst groß) von Daten zu/von worker-threads.
Schauen Sie in aio.h. Die asynchrone Input-Output @leeeroy Parallell IO kann ein Gewinn sein, da Sie es ermöglicht, die block-Gerät-scheduler, um tatsächlich Dinge zu planen und machen eine bessere Nutzung der fegt von der Festplatte lese/schreib-Köpfe. Plus-Festplatten haben Ihren eigenen cache und tun Ihre eigene Terminplanung. So oder so, AIO bekommen sollte, die benifit zu.
Parallell IO in der Regel wird die Leistung verringert, es kann Recht erheblich sein. Ein Antrieb kann nicht Dinge tun, die parallel(über einen bestimmten Punkt abhängig von Ihrem raid-setup). Wenn Sie möchten, um die Leistung zu maximieren, Sie wollen eine Handvoll IO-threads Fütterung (möglichst groß) von Daten zu/von worker-threads.
Schauen Sie in aio.h. Die asynchrone Input-Output @leeeroy Parallell IO kann ein Gewinn sein, da Sie es ermöglicht, die block-Gerät-scheduler, um tatsächlich Dinge zu planen und machen eine bessere Nutzung der fegt von der Festplatte lese/schreib-Köpfe. Plus-Festplatten haben Ihren eigenen cache und tun Ihre eigene Terminplanung. So oder so, AIO bekommen sollte, die benifit zu.
InformationsquelleAutor johnnycrash | 2010-04-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kann wirklich nicht getan werden, müssen Sie ein Echtzeit-system. Das schließt, was Sie erhalten mit linux ist
setzen Sie die scheduling-Strategie auf einen Echtzeit-scheduler, z.B. SCHED_FIFO, und auch die PTHREAD_EXPLICIT_SCHED Attribut. Siehe z.B. hier , auch jetzt noch, obwohl, z.B. irq-Handler und andere Sachen unterbrechen, dein thread und ausführen.
Jedoch, wenn Sie nur die Sorge um die threads in Ihrem eigenen Prozess nicht in der Lage, etwas zu tun, dann ja, block auf ein mutex, Ihre Laufenden Faden hält, ist ausreichend.
Der schwierige Teil ist, zu koordinieren, und all die anderen threads zu packen, mutex, wenn dein thread braucht, um zu tun, seine Sache.
Ich habe mit diesem asgaard.homelinux.org/svn/threadqueue ähnliche Sachen. Sie Feuer aus der keine. von worker-threads, die Sie wollen, und füttern Sie die Arbeit durch die threadqueue, die blockiert und wartet, bis Daten in die queue aufgenommen. wenn Sie nicht mehr worker-threads haben, als Sie Kerne, die Konflikte zwischen Ihnen sollte minimal sein.
InformationsquelleAutor nos
Sollten Sie Architekt Ihrer sw-so sind Sie nicht abhängig von der scheduler für die "richtige" Sache aus Ihrem app-Sicht. Der scheduler ist kompliziert. Es wird tun, was es am besten ist.
Kontext-switches sind Billig. Sie sagen
aber Sie sollten nicht es auf diese Weise betrachten. Verwenden Sie die multi-threaded-Maschinen und Mutexe gesperrt /Prozesse warten. Den Maschinen ist es für Sie zu verwenden...
Gut, mmap nicht rufen malloc, es werden Fehler im Speicher-Seiten im kernel. Auch, wie viele Tausende/sec ist zu langsam ? Sperren/entsperren eines mutex mit keinen Streit getan werden kann, in der Größenordnung von vielen Millionen/sec, wenn es Streit und threads zu sperren, es wird langsamer, obwohl.
K Könntest du bitte unterstützen Sie die Forderung, "Kontext-switches sind Billig"?
InformationsquelleAutor Larry K
Können Sie nicht. Wenn Sie könnten, was würden Sie verhindern, dass Ihr den thread aus nie der Freigabe des Auftrags und verhungern anderen threads.
Die besten können Sie tun ist legen Sie Ihre Themen Priorität haben, so dass der scheduler wird es lieber über niedrigere Priorität threads.
InformationsquelleAutor R Samuel Klatchko
Warum nicht einfach lassen Sie der konkurrierenden threads blockieren, dann wird der scheduler in der nichts mehr zu planen, aber Ihr Leben thread? Warum erschweren die Gestaltung der zweiten raten im scheduler?
InformationsquelleAutor Will Hartung
Blick in Echtzeit-scheduling unter Linux. Ich habe es nie getan, aber wenn Sie das tatsächlich tun, MÜSSEN diese so nah wie Sie bekommen können in Benutzer-Anwendung code.
Was Sie scheinen zu sein, Angst nicht wirklich, dass große Sache, obwohl. Sie können nicht aufhören, den kernel unterbrechen Ihre Programme für die Echtzeit-interrupts oder einer höheren Priorität task ausführen will, aber mit regelmäßigen scheduling der kernel nutzt es die eigenen berechneten Wert für die Priorität, die so ziemlich die meisten von dem, was Sie sind besorgt über. Wenn thread A ist holding Ressource X exklusiv (X, könnte eine Sperre) und thread B wartet auf Ressource X verfügbar ist, dann Eine effektive Priorität mindestens so hoch ist wie B-Priorität. Es berücksichtigt auch, ob ein Prozess viel cpu oder wenn Sie verbringen viel Zeit mit schlafen, um die Berechnung der Priorität. Natürlich, der nice-Wert geht dort auch.
Die Wörter, die Sie verwenden, scheinen nicht zu passen, was Sie wollen, und ich bin mir nicht sicher, was Sie wollen, ist, was Sie wirklich wollen. Sie Mai wollen kooperatives multithreading oder Sie wollen etwas anderes. Meinst du, dass während thread A hält lock X dann kein anderer thread, will lock X ausführen können, weil das ist ziemlich viel, was die thread-Synchronisation Dinge sind für. Sie müssen nur Ihre design-code korrekt; der Aufruf und der Freigabe der sperren an der rechten Zeit/Ort. Wenn du meinst, dass wenn Ein thread hält lock X dann kein anderer thread kann ausgeführt, alle, die Sie in Aussehen sollte SIGSTOP
InformationsquelleAutor nategoose