HTTP.SYS High Performance Tuning

· Özellikler

sgcWebSockets 2026.5.0 sürümünden itibaren, TsgcWSServer_HTTPAPI bileşeni, TsgcServerHTTPAPI_FineTune türünde FineTune adlı yeni bir published özellik sunar. Windows HTTP Server API'sinin (http.sys) istekleri nasıl kuyruğa aldığını, gönderdiğini ve tamamladığını etkileyen her alt düzey çekirdek modu ayarını gruplar. Şimdiye kadar bu ayarlar ya bileşende yoktu ya da sabit kodlanmıştı; artık published edildiler, formla birlikte kalıcı hale getirildiler ve tasarım zamanında ayarlanabilirler.

FineTune özelliği, dört alt özelliği olan bir TPersistent kapsayıcısıdır: QueueLength, SkipIOCPOnSuccess, OperatingMode ve HighPerfAcceptsPerWorker. Her biri, mevcut davranışı koruyan bir değere varsayılan olarak ayarlanır; bu nedenle 2026.5.0'a yükseltmek sıfır kod değişikliği gerektirir; belirli bir iş yükü gerektirdiğinde her ince ayarı tek tek tercih edersiniz.

FineTune Özellikleri

QueueLength : ULONG (varsayılan 1000)

Ne yapar. HttpServerQueueLengthProperty çekirdek ayarını sarar. Sunucu kuyruktan çıkarana kadar http.sys'in çekirdek modu kuyruğunda kaç bekleyen isteği tutacağını denetler. Kuyruk dolduğunda, çekirdek yeni bağlantılara kullanıcı moduna hiç ulaşmadan doğrudan 503 Service Unavailable ile yanıt verir.

Neyi iyileştirir. Ani yoğunluk yaşayan iş yüklerinde (bir ağ kesintisinden sonra yeniden bağlanan binlerce IoT cihazı, filo dağıtımları, piyasa açılışı trafik artışları) QueueLength'i yükseltmek, çekirdeğin istemcileri işleminiz görmeden reddetmesini önler ve zincirleme istemci yeniden denemelerinden kaçınır. Varsayılan 1000, Windows çekirdek varsayılanıyla eşleşir ve modern iş yükleri için tutucudur; geçerli aralık 65535'e kadar çıkar.

SkipIOCPOnSuccess : Boolean (varsayılan False)

Ne yapar. True olarak ayarlandığında, SetFileCompletionNotificationModes aracılığıyla istek kuyruğu tutamacında FILE_SKIP_COMPLETION_PORT_ON_SUCCESS ve FILE_SKIP_SET_EVENT_ON_HANDLE bayraklarını etkinleştirir. Çekirdek daha sonra, çakışan (overlapped) bir G/Ç işlemi senkron olarak tamamlandığında IOCP'ye bir tamamlama paketi göndermeyi atlar.

Neyi iyileştirir. Çağrı senkron olarak NO_ERROR döndürdüğünde sıcak istek yolunda çekirdekten kullanıcı moduna bir sıçramayı ortadan kaldırır; çalışan, bir IOCP paketini beklemek yerine tamamlamayı çağıran iş parçacığında satır içi gönderir. Bu, Microsoft'un referans "HTTP Server High Performance" örneğinin kullandığı kalıptır. Varsayılan False kasıtlıdır: bayrağı etkinleştirmek, satır içi tamamlamaların çağıran tarafında ele alınmasını gerektirir. Bu özellik, aktarım hızı kazancının ekstra kod yolunu haklı çıkardığı iş yüklerinde OperatingMode = ompHighPerf ile eşleştirilmek üzere tasarlanmıştır.

OperatingMode : TsgcHTTPAPIOperatingMode (varsayılan ompClassic)

Ne yapar. İki kabul/gönderme mimarisinden birini seçer:

Neyi iyileştirir. ompHighPerf, sunucu derin tek akışlı boru hatları (büyük çerçeveli yüklemeler/indirmeler) veya çok sayıda eşzamanlı istemci (yüzlerce ila binlerce) gördüğünde işe yarar. Önceden gönderilen alma penceresi, bağlantı başına ayırma olmadan ani yoğunlukları emer ve satır içi gönderme, kabul edici devir teslim darboğazını ortadan kaldırır. Düşük trafikli API'ler ve geliştirme ortamları için varsayılan ompClassic'i bırakın; hafif iş yüklerinde 128 önceden gönderilmiş bağlamı tutmanın ek yükü, tasarruf ettiğinden daha pahalıdır. Mod yalnızca yapım zamanında değiştirilebilir; tek bir işlem ömrü içinde modları karıştırmak desteklenmez.

HighPerfAcceptsPerWorker : Integer (varsayılan 4)

Ne yapar. OperatingMode = ompHighPerf olduğunda her IOCP çalışanının kaç asenkron alma işlemini önceden göndereceğini denetler. Değer ompClassic modunda yok sayılır. Sunucunun tuttuğu toplam eşzamanlı bekleyen alma sayısı ThreadPoolSize × HighPerfAcceptsPerWorker'a eşittir.

Neyi iyileştirir. Daha derin bir çalışan başına pencere, sunucunun sıcak yolda yeni bağlamlar ayırmadan gelen isteklerin daha büyük yoğunluklarını emmesini sağlar. Yüksek eşzamanlılıklı dağıtımlar (IoT filoları, piyasa verisi dağıtımı, fan-out aracıları) için yükseltin; ödünleşim bellektir; önceden gönderilen her alma, tamamlanana kadar ayrılmış bir istek arabelleği (~16 KB) tutar. Varsayılan 4, MSDN "HP" örneğine karşı doğrulanmış tutucu bir orta yoldur.

Kullanım Örneği

Aşağıdaki kod parçası, yüksek eşzamanlılıklı bir IoT arka ucu için bir HTTP.sys sunucusunu yapılandırır: yeniden bağlanma fırtınalarını emmek için büyük bir çekirdek kuyruğu, genişletilmiş önceden gönderilmiş alma penceresiyle HighPerf gönderme ve satır içi tamamlama gönderme etkinleştirilmiştir.

uses
  sgcWebSocket_Server_HTTPAPI,
  sgcWebSocket_HTTPAPI_Server;   // TsgcHTTPAPIOperatingMode
var
  oServer: TsgcWSServer_HTTPAPI;
begin
  oServer := TsgcWSServer_HTTPAPI.Create(nil);
  oServer.Host := '0.0.0.0';
  oServer.Port := 8080;
  // absorb 10,000-device reconnect bursts before kernel-level 503
  oServer.FineTune.QueueLength := 10000;
  // switch from single-acceptor to pre-posted IOCP workers
  oServer.FineTune.OperatingMode := ompHighPerf;
  // widen the per-worker pre-posted receive window (32 threads * 8 = 256)
  oServer.FineTune.HighPerfAcceptsPerWorker := 8;
  // dispatch inline on sync-success completions; skip the IOCP round-trip
  oServer.FineTune.SkipIOCPOnSuccess := True;
  oServer.Active := True;
end;

Tipik bir dahili veya düşük trafikli API için, her FineTune özelliğini varsayılan değerinde bırakın:

oServer := TsgcWSServer_HTTPAPI.Create(nil);
oServer.Host := 'localhost';
oServer.Port := 8080;
// FineTune defaults: QueueLength=1000, SkipIOCPOnSuccess=False,
// OperatingMode=ompClassic, HighPerfAcceptsPerWorker=4
oServer.Active := True;