Wie kann ich die CPU-Affinität für einen Gerätetreiber in Windows 7 einstellen?

1204
Anton

Kann jemand festlegen, auf welchem ​​Kern ein Gerätetreiber ausgeführt wird, und seine Interrupt-Anforderungen verarbeiten?

Situation:
Ich habe iusb3hcs.sys und acpi.sys, was zu Verzögerungen führt, wenn meine Soundkarte Echtzeit-Audio verarbeitet. Gibt es eine Möglichkeit, diese beiden und den Soundkartentreiber auf verschiedenen Prozessorkernen laufen zu lassen und sich nicht zu stören?
Wir können Affinität und Priorität für einen Prozess problemlos festlegen, aber wie wird dies mit einem Gerätetreiber erreicht?

Und wie kann man die Affinität zu einem im Hintergrund laufenden Dienst festlegen?

Die PS-
Soundkarte ist NICHT an den USB-3-Port angeschlossen, dessen Treiber Verzögerungen verursacht. Ich kann diesen Port im Geräte-Manager deaktivieren und er funktioniert einwandfrei. Meine Maus ist jedoch an diesen Port angeschlossen und es ist wirklich unpraktisch, mit dem Touchpad zu arbeiten. Ich brauche also den Port und iusb3hcs, um die Maus zu haben.

1
Nein; Es ist nicht möglich, die Affinität eines Gerätetreibers in Windows festzulegen. Ramhound vor 9 Jahren 0
Ich glaube nicht, dass dies auf CPU-Architekturebene möglich ist. Dies würde bedeuten, dass ein Thread niemals Kerne wechseln kann. Wenn also mehrere Threads auf einem Kern erstellt wurden, könnten sie niemals parallel laufen, sondern würden stattdessen ständig den Kontext wechseln. was ist dann der Punkt, mehrere Kerne zu haben. Nein, ich glaube, dass Interrupts Socket- oder Systemebene sind, sodass sie ihren Thread erreichen können, unabhängig davon, wo sie zu einer bestimmten Millisekunde laufen. Beachten Sie auch, dass MS die Soundkarten-Performance bei bestimmten Netzwerkvorgängen absichtlich beeinträchtigt (und USB ist ein Netzwerkstack). Frank Thomas vor 9 Jahren 0
Zumindest für Win2000 gab es eine Anwendung: http://searchwindowsserver.techtarget.com/tip/Set-prozessor-affinity-for-a-device-driver Die Datei wird sogar auf MS ftp gehostet! Anton vor 9 Jahren 0
Hallo @FrankThomas, können Sie mir genauere Informationen zu "MS die Soundkartenleistung bei bestimmten Netzwerkbetrieben absichtlich herabsetzen" geben? Warum ist das so? Anton vor 9 Jahren 0
weil beide über die Southbridge laufen, die ein gemeinsamer Bus ist. Viele Motherboards können nicht gleichzeitig mit Gigabit-Netzwerkleistung und 48K-Audiowiedergabe mithalten. Frank Thomas vor 9 Jahren 0
@FrankThomas: Schließen, aber Interrupts werden nicht von Threads verarbeitet. Wenn Sie eine ISR ausführen, werden Sie im Kontext des Threads ausgeführt, der gerade ausgeführt wurde, als der Interrupt auftrat. Es gibt keinen Thread-Kontextwechsel. Jamie Hanrahan vor 9 Jahren 0
@JamieHanrahan. Wenn also eine Anweisung, die als Teil eines Threads ausgeführt wird, eine DMA-Anforderung nach Daten im Sekundärspeicher vornimmt und wartet, bis ein IRQ angezeigt wird, der angibt, dass die DMA-Anforderung erfüllt wurde, behaupten Sie, dass der Thread die Ausführungszeit nicht erneut erhält als Ergebnis des IRQ? dass die Daten des DMA-Ereignisses an einen anderen, nicht verwandten Thread übergeben würden, nur weil sie gerade ausgeführt wurden, als die DMA-Operation abgeschlossen war? das würde nicht funktionieren. und wenn es keinen Thread-Kontextwechsel gäbe, hätte DMA keinen Sinn. nicht wirklich bekommen, was du sagst. Frank Thomas vor 9 Jahren 0
@FrankThomas Nein. Ich sagte, dass es keinen Thread-Kontextwechsel für die ISR gibt. Die Ausführung im Kontext des Threads, der die E / A angefordert hat, kann nicht garantiert werden, da dieser Thread sehr häufig auf den Abschluss der E / A wartet. Interrupts allein lösen Thread-Wartezeiten nicht auf. Dies geschieht, wenn der Treiber aus seiner DPC-Routine IoCompleteRequest aufruft. (Die DPC-Routine wird auch nicht in anfragenden Threadkontext ausgeführt.) Wann und auf welcher CPU der Thread ausgeführt wird, hängt vom Threadplaner ab. Siehe die WDK-Dokumente. insbesondere den Begriff "beliebiger Thread-Kontext" nachschlagen. Jamie Hanrahan vor 9 Jahren 0
Microsofts Seite https://msdn.microsoft.com/de-de/library/windows/hardware/ff547969(v=vs.85).aspx sagt: "Ab Windows Vista können Administratoren mithilfe der Registrierung eine Affinitätsrichtlinie festlegen für eine Unterbrechung. " Ich habe mich jedoch nicht mit Details beschäftigt. Vesa P. vor 7 Jahren 0

1 Antwort auf die Frage

0
Christian Winger Nyman

Ja, wenn Ihre Soundkartentreiber MMCSS unterstützen: "Multimedia Class Scheduler Service". Ich habe keine Ahnung, ob ASIO dies für alle Treiber unterstützt. Ich habe dafür nur Unterstützung mit RME-Treibern gesehen. Wenn dieser Dienst aktiviert ist, können Sie mit Programmen wie Processes Lasso, Affinität für jeden CPU-Kern, einschließlich Hyper-Threading, für die MMCSS ändern / ändern. Es ist möglich, dass Programme, die MMCSS-Unterstützung haben, damit auch funktionieren. Ich habe es nicht versucht. Es funktioniert wirklich und ist ein wichtiger Teil davon, wie ich mein Win7-System in Echtzeit kompatibel mit Audio gemacht habe.

Es ist nicht sehr klar in Ihrer Antwort WIE diese Affinität zu setzen. Können Sie bitte Ihre Antwort bearbeiten, um zu klären, wie Sie dies einrichten? Verwenden Sie Formatierungen und geordnete Listen, um bestimmte Schritte deutlich zu machen. music2myear vor 6 Jahren 1