Inde, laputopu yanga yakale imakhala yamphamvu kangapo kuposa seva yanu yopanga.

Izi ndi zomwe ndidamva kuchokera kwa opanga athu. Chosangalatsa kwambiri ndichakuti izi zidakhala zoona, zomwe zidayambitsa kufufuza kwanthawi yayitali. Tikambirana za ma seva a SQL omwe akuyenda pa VMware.

Inde, laputopu yanga yakale imakhala yamphamvu kangapo kuposa seva yanu yopanga.

Kwenikweni, kupeza seva yopanga mopanda chiyembekezo kumbuyo kwa laputopu ndikosavuta. Thamangani (osati pa tempdb osati pa database yomwe ili ndi Delayed Durability) code:

set nocount on
create table _t (v varchar(100))
declare @n int=300000
while @n>0 begin 
  insert into _t select 'What a slowpoke!'
  delete from _t
  set @n=@n-1
  end
GO
drop table _t

Zimatengera masekondi 5 pa kompyuta yanga ndi masekondi 28 pa seva yopanga. Chifukwa SQL iyenera kudikirira kumapeto kwenikweni kwa kulemba ku chipika chogulitsira, ndipo tikuchita mwachidule apa. Kunena zowona, tidayendetsa galimoto yayikulu yamphamvu mumsewu wamumzinda, ndipo tikuwona momwe anthu operekera pizza pa scooters amapitilira modziwika - kutulutsa sikofunikira pano, kuchedwa kokha ndikofunikira. Ndipo palibe malo osungiramo maukonde, ngakhale ali ndi zero angati pamtengo wake, adzatha kupitilira SSD yakomweko potengera latency.

(mu ndemanga zinapezeka kuti ndinanama - ndinachedwetsa kulimba m'malo onse awiri.
Desktop - masekondi 39, 15K tr/sec, 0.065ms / io kuzungulira
PROD - 360 masekondi, 1600 tr/sec, 0.6ms
Ndikadazindikira kuti ikuthamanga kwambiri)

Komabe, pankhaniyi tikuchita ndi zero zazing'ono za ntchito ya Riemann zeta ndi chitsanzo chochepa. Mu chitsanzo chomwe omanga adandibweretsera, zinali zosiyana. Ndinali wotsimikiza kuti anali olondola, ndipo ndinayamba kuyeretsa zonse zokhudzana ndi malingaliro amalonda kuchokera ku chitsanzo. Panthawi ina, ndinazindikira kuti nditha kutaya code yawo, ndikulemba ndekha - zomwe zimasonyeza vuto lomwelo - popanga limayenda pang'onopang'ono 3-4:

create function dbo.isPrime (@n bigint)
returns int
as
  begin
  if @n = 1 return 0
  if @n = 2 return 1
  if @n = 3 return 1
  if @n % 2 = 0 return 0
  declare @sq int
  set @sq = sqrt(@n)+1 -- check odds up to sqrt
  declare @dv int = 1
  while @dv < @sq 
    begin
	set @dv=@dv+2
	if @n % @dv = 0 return 0
	end
  return 1
  end
GO
declare @dt datetime set @dt=getdate()
select dbo.isPrime(1000000000000037)
select datediff(ms,@dt,getdate()) as ms
GO

Ngati zonse zili bwino ndi inu, kufufuza kuphweka kwa chiwerengero kudzatenga masekondi 6-7-8. Izi zachitika pa ma seva angapo. Koma kwa ena, chekecho chinatenga masekondi 25-40. Chochititsa chidwi n'chakuti panalibe ma seva omwe kuphedwa kungatenge, kunena, masekondi 14 - code inagwira ntchito mofulumira kapena pang'onopang'ono, ndiye kuti, vuto linali, tinene, zakuda ndi zoyera.

Ndachita chiyani? Lowetsani ma metrics a VMware. Chilichonse chinali chabwino pamenepo - panali zinthu zambiri, Nthawi yokonzekera = 0, panali zonse zokwanira, panthawi ya mayesero onse pa ma seva othamanga ndi ochedwa CPU = 100 pa vCPU imodzi. Ndidayesa kuwerengera kuchuluka kwa Pi - mayesowo adawonetsa zotsatira zomwezo pa seva iliyonse. Fungo la matsenga linakula kwambiri.

Nditatuluka pafamu ya DEV, ndidayamba kusewera ndi maseva. Zinapezeka kuti vMotion kuchokera ku host host ingathe "kuchiritsa" seva, koma imathanso kutembenuza seva "yofulumira" kukhala "pang'onopang'ono". Zikuwoneka kuti ndi izi - makamu ena ali ndi vuto ... koma ... ayi. Makina ena owoneka bwino adachepera pa wolandila, titi, A, koma adagwira ntchito mwachangu pa wolandila B. Ndipo makina ena owoneka bwino, m'malo mwake, adagwira ntchito mwachangu pa A ndikuchepetsa B! Magalimoto onse "othamanga" ndi "ochedwa" nthawi zambiri ankazungulira pa wolandirayo!

Kuyambira nthawi imeneyo, mumlengalenga munamveka fungo la sulfure. Kupatula apo, vutoli silingachitike chifukwa cha makina aliwonse (mwachitsanzo, zigamba zamawindo) - pambuyo pake, zidakhala "zofulumira" ndi vMotion. Koma vuto silingakhale lopangidwa ndi wolandirayo - pambuyo pake, likhoza kukhala ndi makina onse "ofulumira" komanso "ochedwa". Zinalibenso zokhudzana ndi katundu - ndinatha kupeza makina "ochepa" pa wolandira, pomwe panalibe china chilichonse kupatulapo.

Chifukwa cha kusimidwa, ndidathamangitsa Sysinternals 'Process Explorer ndikuyang'ana pa SQL stack. Pamakina apang'onopang'ono, mzerewo unandigwira maso:

ntoskrnl.exe!KeSynchronizeExecution+0x5bf6
ntoskrnl.exe!KeWaitForMultipleObjects+0x109d
ntoskrnl.exe!KeWaitForMultipleObjects+0xb3f
ntoskrnl.exe!KeWaitForSingleObject+0x377
ntoskrnl.exe!KeQuerySystemTimePrecise+0x881 < - !!!
ntoskrnl.exe!ObDereferenceObjectDeferDelete+0x28a
ntoskrnl.exe!KeSynchronizeExecution+0x2de2
sqllang.dll!CDiagThreadSafe::PxlvlReplace+0x1a20
…lumpha
sqldk.dll!SystemThread::MakeMiniSOSTthread+0xa54
KERNEL32.DLL!BaseThreadInitThunk+0x14
ntdll.dll!RtlUserThreadStart+0x21

Icho chinali kale chinachake. Pulogalamu inalembedwa:

    class Program
    {
        [DllImport("kernel32.dll")]
        static extern void GetSystemTimePreciseAsFileTime(out FILE_TIME lpSystemTimeAsFileTime);

        [StructLayout(LayoutKind.Sequential)]
        struct FILE_TIME
        {
            public int ftTimeLow;
            public int ftTimeHigh;
        }

        static void Main(string[] args)
        {
            for (int i = 0; i < 16; i++)
            {
                int counter = 0;

                var stopwatch = Stopwatch.StartNew();

                while (stopwatch.ElapsedMilliseconds < 1000)
                {
                    GetSystemTimePreciseAsFileTime(out var fileTime);
                    counter++;
                }

                if (i > 0)
                {
                    Console.WriteLine("{0}", counter);
                }
            }
        }
    }

Pulogalamuyi idawonetsa kutsika kodziwika bwino - pamakina "ofulumira" akuwonetsa kuzungulira kwa 16-18 miliyoni pamphindikati, pomwe papang'onopang'ono - miliyoni imodzi ndi theka, kapena 700 zikwi. Ndiko kuti, kusiyana ndi nthawi 10-20 (!!!). Ichi chinali kale chigonjetso chaching'ono: mulimonse, panalibe chiwopsezo chokhazikika pakati pa chithandizo cha Microsoft ndi VMware kuti athe kusinthana mivi.

Ndiye kupita patsogolo kunayima - tchuthi, zinthu zofunika, ma virus hysteria komanso kuwonjezeka kwakukulu kwa ntchito. Nthawi zambiri ndimatchula vuto lamatsenga kwa anzanga, koma nthawi zina zimawoneka kuti samandikhulupirira nthawi zonse - mawu oti VMware adachepetsa kachidindo ka 10-20 anali ovuta kwambiri.

Ndinayesera kudzifufuza ndekha zomwe zimachedwetsa. Nthawi zina zinkawoneka kwa ine kuti ndapeza yankho - kuyatsa ndi kuzimitsa Mapulagi Otentha, kusintha kuchuluka kwa kukumbukira kapena kuchuluka kwa mapurosesa nthawi zambiri kumapangitsa makinawo kukhala "ofulumira". Koma osati kwamuyaya. Koma zomwe zidakhala zoona ndikuti ndikwanira kutuluka ndikugogoda pa gudumu - ndiko kuti, kusintha zilizonse pafupifupi makina parameter

Pomaliza, anzanga aku America mwadzidzidzi anapeza choyambitsa chake.

Inde, laputopu yanga yakale imakhala yamphamvu kangapo kuposa seva yanu yopanga.

Olandira alendo amasiyana mosiyanasiyana!

  • Monga lamulo, izi sizowopsa. Koma: mukasamuka kuchokera kwa 'mbadwa' kupita kwa wolandila wokhala ndi 'zosiyana' pafupipafupi, VMware iyenera kusintha zotsatira za GetTimePrecise.
  • Monga lamulo, izi sizovuta, pokhapokha ngati pali pulogalamu yomwe imapempha nthawi yeniyeni mamiliyoni ambiri pamphindikati, monga seva ya SQL.
  • Koma izi sizowopsa, popeza seva ya SQL simachita izi nthawi zonse (onani Mapeto)

Koma pali zochitika pamene chowotcha ichi chimapweteka. Ndipo inde, pogogoda pa gudumu (posintha china chake pamakina a VM), ndidakakamiza VMware kuti 'iwerengenso' kasinthidwe, ndipo mafupipafupi a omwe adakhala nawo pano adakhala mafupipafupi 'wamba' a makinawo.

chisankho

www.vmware.com/files/pdf/techpaper/Timekeeping-In-VirtualMachines.pdf

Mukaletsa virtualization ya TSC, kuwerenga TSC kuchokera mkati mwa makina enieni kumabweretsa mtengo wa TSC wamakina, ndipo kulemba TSC kuchokera mkati mwa makinawo sikukhala ndi zotsatirapo. Kusamutsa makina enieniwo kupita ku wina wolandira, kuyiyambitsanso kuchokera kugawo loyimitsidwa, kapena kubwereranso ku chithunzithunzi kumapangitsa TSC kudumpha mosalekeza. Makina ena ogwiritsira ntchito alendo amalephera kuyambiranso, kapena kuwonetsa zovuta zina zosunga nthawi, pamene TSC virtualization yazimitsidwa. M'mbuyomu, izi nthawi zina zimalimbikitsidwa kuti ziwongolere magwiridwe antchito omwe amawerenga TSC pafupipafupi, koma magwiridwe antchito a TSC asinthidwa kwambiri pazinthu zamakono. Mbaliyi yalimbikitsidwanso kuti igwiritsidwe ntchito pochita miyeso yomwe imafunikira gwero lenileni la nthawi yeniyeni mu makina enieni.

Mwachidule, muyenera kuwonjezera parameter

monitor_control.virtual_rdtsc = FALSE

Pomaliza

Mwinamwake muli ndi funso: chifukwa chiyani SQL imayimbira GetTimePrecise nthawi zambiri?

Ndilibe magwero a seva ya SQL, koma malingaliro akuti izi. SQL ndi pafupifupi kachitidwe opaleshoni ndi mgwirizano concurrency, kumene ulusi uliwonse ayenera "kusiya njira" nthawi ndi nthawi. Malo abwino kwambiri ochitirako ndi kuti? Pomwe pali chiyembekezo chachilengedwe - loko kapena IO. Chabwino, koma bwanji ngati tikuzungulira ma computational? Ndiye zodziwikiratu komanso pafupifupi malo okhawo ali mwa womasulira (uyu si wotanthauzira ndithu), pambuyo pa kuphedwa kwa wotsatira wotsatira.

Monga lamulo, seva ya SQL siigwiritsidwa ntchito pakompyuta yoyera ndipo izi sizovuta. Koma kuzungulira ndi ntchito ndi mitundu yonse ya matebulo osakhalitsa (omwe amasungidwa nthawi yomweyo) amatembenuza kachidindoyo kukhala mndandanda wazinthu zomwe zachitika mwachangu.

Mwa njira, ngati ntchitoyi idakulungidwa mu NATIVELY COMPILED, ndiye kuti imasiya kupempha nthawi, ndipo liwiro lake limawonjezeka nthawi 10. Koma bwanji za cooperative multitasking? Koma pamakhodi omwe adapangidwa mwachilengedwe, ndidayenera kuchita PREEMPTIVE MULTITASKING mu SQL.

Source: www.habr.com

Kuwonjezera ndemanga