AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Prozess auf einen CPU-Sockel festlegen

Ein Thema von Bernhard Geyer · begonnen am 16. Jul 2015 · letzter Beitrag vom 16. Jul 2015
Antwort Antwort
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.076 Beiträge
 
Delphi 10.4 Sydney
 
#1

Prozess auf einen CPU-Sockel festlegen

  Alt 16. Jul 2015, 12:31
Ich habe hier das Problem das unter Delphi6 bei verwendung einer 3th-Party-Komponente über JNI der Prozess auf Mehrsockel-Systemen abstürzt.
Wird die Anwendung mit XE6 kompiliert läuft es (kann aber jetzt noch nicht umsteigen, ist erst für nächsten Major-Releaes geplant)

Über SetProcessAffinityMask(GetCurrentProcess(), 1) könnte ich den Prozess auf einen Kern festlegen.
Das könnte aber zu Performanceproblemene führen so das ich ich alle Kerne eines Prozessors freigeben will. Also sowas in der art "SetProcessAffinityMaskForSocket(SocketNr: Integer);
Fertig dürfte es das nicht geben (Wäre natürlich schön falls doch).
Also ist die Frage wie bekommt man die bindung an einen Sockel am einfachsten hin?
Quellcode/Funktionsfragmente werden gerne genommen.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
OlafSt

Registriert seit: 2. Mär 2007
Ort: Hamburg
284 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: Prozess auf einen CPU-Sockel festlegen

  Alt 16. Jul 2015, 12:56
Du kannst die Anzahl der CPUs (nicht Kerne !) herausfinden. Anschließend kannst du die Zahl der Kerne auf CPU 0 (der ersten) herausfinden und deine AffinityMask entsprechend einstellen, so das dein Prozess zwar Multicore- aber nicht MultiCPU läuft.

However, im wesentlichen ist es kein Unterschied, ob ein Prozess auf einem Dual-CPU-System (2 Prozessoren mit je einem Kern) oder einem Dual-Core-System (eine CPU mit zwei Kernen) läuft. In jedem Falle sind es zwei unterschiedliche CPUs.
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.076 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Prozess auf einen CPU-Sockel festlegen

  Alt 16. Jul 2015, 13:23
Folgender Code müsste das gewünschte Leisten:

Delphi-Quellcode:
procedure SetProcessAffinityMaskToOneSocket;
var
  NewMask: Int64;
begin
  GetNumaNodeProcessorMask(0, @NewMask);
  SetProcessAffinityMask(GetCurrentProcess(), NewMask);
end;
Leider kracht es immer noch.
Dann bleibt doch das während der Problematischen Funktionen ein

SetProcessAffinityMask(GetCurrentProcess(), 1);

bis wir dann auf XE6 sind
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Benutzerbild von BUG
BUG

Registriert seit: 4. Dez 2003
Ort: Cottbus
2.094 Beiträge
 
#4

AW: Prozess auf einen CPU-Sockel festlegen

  Alt 16. Jul 2015, 13:30
However, im wesentlichen ist es kein Unterschied, ob ein Prozess auf einem Dual-CPU-System (2 Prozessoren mit je einem Kern) oder einem Dual-Core-System (eine CPU mit zwei Kernen) läuft. In jedem Falle sind es zwei unterschiedliche CPUs.
Unterschiedliche Timings könnten schon den Unterschied machen. Allerdings würde ich der Implementierung nicht unbedingt trauen, wenn es auf Multisockets nicht läuft
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.076 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Prozess auf einen CPU-Sockel festlegen

  Alt 16. Jul 2015, 15:03
[Halb-OT]
Unterschiedliche Timings könnten schon den Unterschied machen. Allerdings würde ich der Implementierung nicht unbedingt trauen, wenn es auf Multisockets nicht läuft
Hatte vor Jahren "in der Guten alten Zeit" den Fall das eine mit VS (noch ohne .NET) erstellte DLL beim Netzwerkverkehr mist gebaut hat wenn es ein Mulitsockel-System ist.
Auch wieder an einen Sockel (Damals Sockel = Kern) gebunden und schon waren alle Probleme verschwunden.
Hier kann ich dir zustimmen: Einen MFC/ATL-Programm sollte man nicht trauen
[/Halb-OT]
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 19:54 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf