ื™ืึธ, ืžื™ื™ืŸ ืึทืœื˜ ืœืึทืคึผื˜ืึทืคึผ ืื™ื– ืขื˜ืœืขื›ืข ืžืึธืœ ืžืขืจ ืฉื˜ืึทืจืง ื•ื•ื™ ื“ื™ื™ืŸ ืคึผืจืึธื“ื•ืงืฆื™ืข ืกืขืจื•ื•ืขืจ.

ื“ืึธืก ื–ืขื ืขืŸ ืคึผื•ื ืงื˜ ื“ื™ ื˜ืขื ื•ืช ืื™ืš ื’ืขื”ืขืจื˜ ืคื•ืŸ ืื•ื ื“ื–ืขืจ ื“ืขื•ื•ืขืœืึธืคึผืขืจืก. ื“ืืก ืžืขืจืกื˜ืข ืื™ื ื˜ืขืจืกืื ื˜ืข ืื™ื– ืื– ื“ืืก ื”ืื˜ ื–ื™ืš ืืจื•ื™ืกื’ืขื•ื•ื™ื–ืŸ ื•ื•ื™ ืืžืช, ื•ื•ืืก ื”ืื˜ ื’ืขื‘ืจืขื ื’ื˜ ื ืœืื ื’ืข ืื•ื™ืกืคืืจืฉื•ื ื’. ืžื™ืจ ื•ื•ืขืœืŸ ืจืขื“ืŸ ื•ื•ืขื’ืŸ SQL ืกืขืจื•ื•ืขืจืก ื•ื•ืึธืก ืžื™ืจ ืœื•ื™ืคืŸ ืื•ื™ืฃ VMware.

ื™ืึธ, ืžื™ื™ืŸ ืึทืœื˜ ืœืึทืคึผื˜ืึทืคึผ ืื™ื– ืขื˜ืœืขื›ืข ืžืึธืœ ืžืขืจ ืฉื˜ืึทืจืง ื•ื•ื™ ื“ื™ื™ืŸ ืคึผืจืึธื“ื•ืงืฆื™ืข ืกืขืจื•ื•ืขืจ.

ืึทืงื˜ื•ืึทืœืœื™, ืขืก ืื™ื– ื’ืจื™ื ื’ ืฆื• ืขื ืฉื•ืจ ืึทื– ื“ื™ ืคึผืจืึธื“ื•ืงืฆื™ืข ืกืขืจื•ื•ืขืจ ืื™ื– ื›ืึธื•ืคึผืœืึทืกืœื™ ื”ื™ื ื˜ืขืจ ื“ื™ ืœืึทืคึผื˜ืึทืคึผ. ื•ื™ืกืคื™ืจืŸ (ื ื™ืฉื˜ ืื•ื™ืฃ tempdb ืื•ืŸ ื ื™ืฉื˜ ืื•ื™ืฃ ืึท ื“ืึทื˜ืึทื‘ื™ื™ืก ืžื™ื˜ ื“ื™ืœื™ื™ื“ ื“ื•ืจืึทื‘ื™ืœื™ื˜ื™ ืขื ื™ื™ื‘ืึทืœื“) ื“ื™ ืงืึธื“:

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

ืื•ื™ืฃ ืžื™ื™ืŸ ื“ืขืกืงื˜ืึทืคึผ ืขืก ื ืขืžื˜ 5 ืกืขืงื•ื ื“ืขืก, ืื•ืŸ ืื•ื™ืฃ ื“ื™ ืคึผืจืึธื“ื•ืงืฆื™ืข ืกืขืจื•ื•ืขืจ ืขืก ื ืขืžื˜ 28 ืกืขืงื•ื ื“ืขืก. ื•ื•ื™ื™ึทืœ SQL ืžื•ื–ืŸ ื•ื•ืึทืจื˜ืŸ ืคึฟืึทืจ ื“ื™ ื’ืฉืžื™ื•ืช ืกื•ืฃ ืคื•ืŸ ื“ื™ ื˜ืจืึทื ืกืึทืงื˜ื™ืึธืŸ ืงืœืึธืฅ ืคึผืึธื–ื™ืฆื™ืข, ืื•ืŸ ืžื™ืจ ื˜ืึธืŸ ื–ื™ื™ืขืจ ืงื•ืจืฅ ื˜ืจืึทื ื–ืึทืงืฉืึทื ื– ื“ืึธ. ื‘ืขืขืจืขืš ื’ืขืจืขื“ื˜, ืžื™ืจ ื“ืจืึธื•ื•ืข ืึท ื’ืจื•ื™ืก, ืฉื˜ืึทืจืง ื˜ืจืึธืง ืื™ืŸ ืฉื˜ืึธื˜ ืคืึทืจืงืขืจ, ืื•ืŸ ื•ื•ืึธื˜ืฉื˜ ื•ื•ื™ ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ื“ืึทืฉื™ื ื’ืœื™ ืึธื•ื•ื•ืขืจื˜ื™ื™ืงืึทืŸ ื“ื•ืจืš ืคึผื™ืฆืข ืขืงืกืคึผืจืขืก ืžืขื ื˜ืฉืŸ ืื•ื™ืฃ ืกืงื•ื˜ืขืจื– - ื“ื™ ื“ื•ืจื›ืคืึธืจ ืื™ื– ื ื™ืฉื˜ ื•ื•ื™ื›ื˜ื™ืง ื“ืึธ, ื ืึธืจ ืœื™ื™ื˜ืึทื ืกื™ ืื™ื– ื•ื•ื™ื›ื˜ื™ืง. ืื•ืŸ ืงื™ื™ืŸ ื ืขืฅ ืกื˜ืึธืจื™ื“ื–ืฉ, ืงื™ื™ืŸ ืขื ื™ืŸ ื•ื•ื™ ืคื™ืœืข ื–ืขืจืึธืก ืขืก ื–ืขื ืขืŸ ืื™ืŸ ื–ื™ื™ึทืŸ ืคึผืจื™ื™ึทื–, ืงืขื ืขืŸ ืฉืœืึธื’ืŸ ื“ื™ ื”ื™ื’ืข ืกืกื“ ืื™ืŸ ื˜ืขืจืžื™ื ืขืŸ ืคื•ืŸ ืœื™ื™ื˜ืึทื ืกื™.

(ืื™ืŸ ื“ื™ ืงืืžืขื ื˜ืืจืŸ ื”ืื˜ ื–ื™ืš ืืจื•ื™ืกื’ืขื•ื•ื™ื–ืŸ ืื– ืื™ืš ื”ืื‘ ื’ืขืœื™ื™ื ื˜ - ืื™ืš ื”ืื‘ ื’ืขื”ืื˜ ืคืืจืฉืคืขื˜ื™ืงื˜ืข ื’ืขื•ื•ืขืจ ืื™ืŸ ื‘ื™ื™ื“ืข ืžืงื•ืžื•ืช. ืืŸ ื“ื™ืœื™ื™ื“ื™ื’ืงื™ื™ื˜ ืงื•ืžื˜ ืื•ื™ืก:
ื“ืขืกืงื˜ืึธืคึผ - 39 ืกืขืงื•ื ื“ืขืก, 15K tr/sec, 0.065ms /io roundtrip
ืคึผืจืึธื“ - 360 ืกืขืงื•ื ื“ืขืก, 1600 ื˜ืจ / ืกืขืง, 0.6ms
ืื™ืš ื–ืึธืœ ื”ืึธื‘ืŸ ื‘ืืžืขืจืงื˜ ืึทื– ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ืฆื• ืฉื ืขืœ)

ืึธื‘ืขืจ, ืื™ืŸ ื“ืขื ืคืึทืœ ืžื™ืจ ื–ืขื ืขืŸ ื“ื™ืœื™ื ื’ ืžื™ื˜ ื ื™ืฉื˜ื™ืง ื–ืขืจืึธืก ืคื•ืŸ ื“ื™ ืจื™ืžืึทืŸ ื–ืขื˜ืึท ืคึฟื•ื ืงืฆื™ืข ืžื™ื˜ ืึท ื ื™ืฉื˜ื™ืง ื‘ื™ื™ึทืฉืคึผื™ืœ. ืื™ืŸ ื“ืขื ื‘ื™ื™ึทืฉืคึผื™ืœ ืึทื– ื“ื™ ื“ืขื•ื•ืขืœืึธืคึผืขืจืก ื’ืขื‘ืจืื›ื˜ ืžื™ืจ, ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ืึทื ื“ืขืจืฉ. ืื™ืš ืื™ื– ื’ืขื•ื•ืขืŸ ืงืึทื ื•ื•ื™ื ืกื˜ ืึทื– ื–ื™ื™ ื–ืขื ืขืŸ ืจืขื›ื˜, ืื•ืŸ ืื ื’ืขื”ื•ื™ื‘ืŸ ืฆื• ื‘ืึทื–ื™ื™ึทื˜ื™ืงืŸ ืคื•ืŸ ื“ืขื ื‘ื™ื™ึทืฉืคึผื™ืœ ืึทืœืข ื–ื™ื™ืขืจ ืกืคึผืขืกื™ืคื™ืงืก ืฉื™ื™ึทื›ื•ืช ืฆื• ื’ืขืฉืขืคื˜ ืœืึธื’ื™ืง. ืื™ืŸ ืขื˜ืœืขื›ืข ืคื•ื ื˜ ืื™ืš ืื™ื™ื ื’ืขื–ืขืŸ ืึทื– ืื™ืš ืงืขืŸ ื’ืึธืจ ื•ื•ืึทืจืคืŸ ืึทื•ื•ืขืง ื–ื™ื™ืขืจ ืงืึธื“ ืื•ืŸ ืฉืจื™ื™ึทื‘ืŸ ืžื™ื™ืŸ ืื™ื™ื’ืŸ - ื•ื•ืึธืก ื“ืขืžืึทื ืกื˜ืจื™ื™ืฅ ื“ื™ ื–ืขืœื‘ืข ืคึผืจืึธื‘ืœืขื - ืื™ืŸ ืคึผืจืึธื“ื•ืงืฆื™ืข ืขืก ืœื•ื™ืคื˜ 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

ืื•ื™ื‘ ืึทืœืฅ ืื™ื– ื’ื•ื˜, ืงืึธื ื˜ืจืึธืœื™ืจืŸ ื“ื™ ืคึผืจื™ื™ืžืึทืœื™ื˜ื™ ืคื•ืŸ ืึท ื ื•ืžืขืจ ื•ื•ืขื˜ ื ืขืžืขืŸ 6-7-8 ืกืขืงื•ื ื“ืขืก. ื“ืึธืก ืื™ื– ื’ืขืฉืขืŸ ืื•ื™ืฃ ืขื˜ืœืขื›ืข ืกืขืจื•ื•ืขืจืก. ืื‘ืขืจ ืื•ื™ืฃ ืขื˜ืœืขื›ืข, ื“ื™ ื˜ืฉืขืง ื’ืขื ื•ืžืขืŸ 25-40 ืกืขืงื•ื ื“ืขืก. ื™ื ื˜ืขืจืขืกื˜ื™ื ื’ืœื™, ืขืก ื–ืขื ืขืŸ ื’ืขื•ื•ืขืŸ ืงื™ื™ืŸ ืกืขืจื•ื•ืขืจืก ื•ื•ื• ื“ื™ ื“ื•ืจื›ืคื™ืจื•ื ื’ ื•ื•ืึธืœื˜ ื ืขืžืขืŸ, ื–ืึธื’ืŸ, 14 ืกืขืงื•ื ื“ืขืก - ื“ืขืจ ืงืึธื“ ื’ืขืืจื‘ืขื˜ ืึธื“ืขืจ ื–ื™ื™ืขืจ ื’ืขืฉื•ื•ื™ื ื“ ืึธื“ืขืจ ื–ื™ื™ืขืจ ืกืœืึธื•ืœื™, ื“ืึธืก ืื™ื–, ื“ืขืจ ืคึผืจืึธื‘ืœืขื ืื™ื– ื’ืขื•ื•ืขืŸ, ืœืึธื–ืŸ ืก ื–ืึธื’ืŸ, ืฉื•ื•ืึทืจืฅ ืื•ืŸ ื•ื•ื™ื™ึทืก.

ื•ื•ืืก ืื™ืš ื”ืื‘ ื’ืขื˜ื•ื”ืŸ? ื’ืขื•ื•ื™ื™ื ื˜ VMware ืžืขื˜ืจื™ืงืก. ืึทืœืฅ ืื™ื– ื’ืขื•ื•ืขืŸ ื’ื•ื˜ ื“ืึธืจื˜ - ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ืึท ืฉืขืคืข ืคื•ืŸ โ€‹โ€‹ืจืขืกื•ืจืกืŸ, ื’ืจื™ื™ื˜ ืฆื™ื™ื˜ = 0, ืขืก ืื™ื– ื’ืขื•ื•ืขืŸ ื’ืขื ื•ื’ ืคื•ืŸ ืึทืœืฅ, ื‘ืขืฉืึทืก ื“ื™ ืคึผืจืึธื‘ืข ืื•ื™ืฃ ื‘ื™ื™ื“ืข ืฉื ืขืœ ืื•ืŸ ืคึผืึทืžืขืœืขืš ืกืขืจื•ื•ืขืจืก ืงืคึผื• = 100 ืื•ื™ืฃ ืื™ื™ืŸ ื•ื•ืงืคึผื•. ืื™ืš ื’ืขื ื•ืžืขืŸ ืึท ืคึผืจืึธื‘ืข ืฆื• ืจืขื›ืขื ืขืŸ ื“ื™ ื ื•ืžืขืจ Pi - ื“ื™ ืคึผืจืึธื‘ืข ื’ืขื•ื•ื™ื–ืŸ ื“ื™ ื–ืขืœื‘ืข ืจืขื–ื•ืœื˜ืึทื˜ืŸ ืื•ื™ืฃ ืงื™ื™ืŸ ืกืขืจื•ื•ืขืจ. ื“ืขืจ ืฉืžืขืงืŸ ืคื•ืŸ ืฉื•ื•ืืจืฆืข ื›ื™ืฉื•ืฃ ืื™ื– ื’ืขื•ื•ืืจืŸ ืฉื˜ืืจืงืขืจ ืื•ืŸ ืฉื˜ืืจืงืขืจ.

ืึทืžืึธืœ ืื™ืš ื’ืึทื˜ ืฆื• ื“ื™ DEV ืคืึทืจื, ืื™ืš ืกื˜ืึทืจื˜ืขื“ ืคึผืœื™ื™ื™ื ื’ ืžื™ื˜ ื“ื™ ืกืขืจื•ื•ืขืจืก. ืขืก ืคืืจืงืขืจื˜ ืื•ื™ืก ืึทื– vMotion ืคื•ืŸ ื‘ืึทืœืขื‘ืึธืก ืฆื• ื‘ืึทืœืขื‘ืึธืก ืงืขื ืขืŸ "ื”ื™ื™ืœืŸ" ืึท ืกืขืจื•ื•ืขืจ, ืึธื‘ืขืจ ืขืก ืงืขืŸ ืื•ื™ืš ืžืึทื›ืŸ ืึท "ืฉื ืขืœ" ืกืขืจื•ื•ืขืจ ืื™ืŸ ืึท "ืคึผืึทืžืขืœืขืš". ืขืก ืžื™ื™ื ื˜ ื•ื•ื™ ื“ืึธืก ืื™ื– ืขืก - ืขื˜ืœืขื›ืข ืžื—ื ื•ืช ื”ืึธื‘ืŸ ืึท ืคึผืจืึธื‘ืœืขื ... ืึธื‘ืขืจ ... ื ื™ื˜. ืขื˜ืœืขื›ืข ื•ื•ื™ืจื˜ื•ืขืœ ืžืึทืฉื™ืŸ ืื™ื– ื’ืขื•ื•ืขืŸ ืคึผืึทืžืขืœืขืš ืื•ื™ืฃ ื‘ืึทืœืขื‘ืึธืก, ื–ืึธื’ืŸ ื, ืึธื‘ืขืจ ื’ืขืืจื‘ืขื˜ ื’ืขืฉื•ื•ื™ื ื“ ืื•ื™ืฃ ื‘ืึทืœืขื‘ืึธืก ื‘. ืื•ืŸ ืืŸ ืื ื“ืขืจ ื•ื•ื™ืจื˜ื•ืึทืœ ืžืึทืฉื™ืŸ, ืคืึทืจืงืขืจื˜, ื’ืขืืจื‘ืขื˜ ื’ืขืฉื•ื•ื™ื ื“ ืื•ื™ืฃ ื ืื•ืŸ ืกืœืึธื•ื“ ืึทืจืึธืคึผ ืื•ื™ืฃ ื‘! ื‘ื™ื™ื“ืข "ืฉื ืขืœ" ืื•ืŸ "ืคึผืึทืžืขืœืขืš" ืžืืฉื™ื ืขืŸ ื–ืขื ืขืŸ ืึธืคื˜ ืกืคึผื™ื ื ื™ื ื’ ืื•ื™ืฃ ื“ื™ ื‘ืึทืœืขื‘ืึธืก!

ืคื•ืŸ ื™ืขื ืขื ืžืืžืขื ื˜ ืืŸ ื”ืื˜ ืื™ืŸ ื“ืขืจ ืœื•ืคื˜ืŸ ื’ืขื”ืื˜ ื ื‘ืขื–ื•ื ื“ืขืจืข ืจื™ื— ืคื•ืŸ ืฉืฐืขื‘ืœ. ื ืึธืš ืึทืœืข, ื“ื™ ืคึผืจืึธื‘ืœืขื ืงืขืŸ ื ื™ืฉื˜ ื–ื™ื™ืŸ ืึทื˜ืจื™ื‘ื™ืึทื˜ืึทื“ ืฆื• ื“ื™ ื•ื•ื™ืจื˜ื•ืึทืœ ืžืึทืฉื™ืŸ (ื•ื•ื™ื ื“ืึธื•ื– ืคึผืึทื˜ืฉืึทื–, ืคึฟืึทืจ ื‘ื™ื™ึทืฉืคึผื™ืœ) - ื ืึธืš ืึทืœืข, ืขืก ืื™ื– ื’ืขื•ื•ืืจืŸ "ืฉื ืขืœ" ืžื™ื˜ ื•ื•ืžืึธื˜ื™ืึธืŸ. ืึธื‘ืขืจ ื“ื™ ืคึผืจืึธื‘ืœืขื ืงืขืŸ ื ื™ืฉื˜ ื–ื™ื™ืŸ ืึทื˜ืจื™ื‘ื™ืึทื˜ืึทื“ ืฆื• ื“ืขืจ ื‘ืึทืœืขื‘ืึธืก - ื ืึธืš ืึทืœืข, ืขืก ืงืขืŸ ื”ืึธื‘ืŸ ื‘ื™ื™ื“ืข "ืฉื ืขืœ" ืื•ืŸ "ืคึผืึทืžืขืœืขืš" ืžืืฉื™ื ืขืŸ. ืื•ื™ืš, ื“ืึธืก ืื™ื– ื ื™ืฉื˜ ืฉื™ื™ึทื›ื•ืช ืฆื• ื“ื™ ืžืึทืกืข - ืื™ืš ื’ืขืจืื˜ืŸ ืฆื• ื‘ืึทืงื•ืžืขืŸ ืึท "ืคึผืึทืžืขืœืขืš" ืžืึทืฉื™ืŸ ืื•ื™ืฃ ื“ืขืจ ื‘ืึทืœืขื‘ืึธืก, ื•ื•ื• ืขืก ืื™ื– ื’ืึธืจื ื™ืฉื˜ ื‘ื™ื™ึท ืึทืœืข ืึทื—ื•ืฅ ืขืก.

ืคึฟื•ืŸ ืคืึทืจืฆื•ื•ื™ื™ืคืœื•ื ื’, ืื™ืš ืœืึธื ื˜ืฉื˜ Process Explorer ืคึฟื•ืŸ Sysinternals ืื•ืŸ ื’ืขืงื•ืงื˜ ืื•ื™ืฃ ื“ื™ SQL ืึธื ืœื™ื™ื’ืŸ. ืื•ื™ืฃ ืคึผืึทืžืขืœืขืš ืžืืฉื™ื ืขืŸ ื“ื™ ืฉื•ืจื” ืžื™ื“ ื’ืขื›ืืคื˜ ืžื™ื™ืŸ ืื•ื™ื’:

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
... ืกืงื™ืคึผื˜
sqldk.dll!ืกื™ืกื˜ืขื ืคึฟืึธื“ืขื::MakeMiniSOSTthread+0xa54
KERNEL32.DLL!BaseThreadInitThunk+0x14
ntdll.dll!RtlUserThreadStart+0x21

ื“ืืก ืื™ื– ืฉื•ื™ืŸ ื’ืขื•ื•ืขืŸ ืขืคืขืก. ื“ืขืจ ืคึผืจืึธื’ืจืึทื ืื™ื– ื’ืขืฉืจื™ื‘ืŸ:

    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);
                }
            }
        }
    }

ื“ืขืจ ืคึผืจืึธื’ืจืึทื ื“ืขืžืึทื ืกื˜ืจื™ื™ื˜ื™ื“ ืึท ืืคื™ืœื• ืžืขืจ ืคึผืจืึทื ืึทื•ื ืกื˜ ืกืœืึธื•ื“ืึทื•ืŸ - ืื•ื™ืฃ "ืฉื ืขืœ" ืžืืฉื™ื ืขืŸ ืขืก ื•ื•ื™ื™ื–ื˜ 16-18 ืžื™ืœื™ืึธืŸ ืกื™ื™ืงืึทืœื– ืคึผืขืจ ืกืขืงื•ื ื“ืข, ื‘ืฉืขืช ืื•ื™ืฃ ืคึผืึทืžืขืœืขืš ืžืืฉื™ื ืขืŸ ืขืก ื•ื•ื™ื™ื–ื˜ ืื™ื™ืŸ ืื•ืŸ ืึท ื”ืึทืœื‘ ืžื™ืœื™ืึธืŸ, ืึธื“ืขืจ ืืคื™ืœื• 700 ื˜ื•ื™ื–ื ื˜. ืึทื– ืื™ื–, ื“ื™ ื—ื™ืœื•ืง ืื™ื– 10-20 ืžืืœ (!!!). ื“ืึธืก ืื™ื– ืฉื•ื™ืŸ ื’ืขื•ื•ืขืŸ ืึท ืงืœื™ื™ืŸ ื ืฆื—ื•ืŸ: ืื™ืŸ ืงื™ื™ืŸ ืคืึทืœ, ืขืก ืื™ื– ืงื™ื™ืŸ ืกืึทืงืึธื ืข ืคื•ืŸ โ€‹โ€‹ืกื˜ืึทืง ืฆื•ื•ื™ืฉืŸ ืžื™ืงืจืึธืกืึธืคื˜ ืื•ืŸ VMware ืฉื˜ื™ืฆืŸ ืึทื–ื•ื™ ืึทื– ื–ื™ื™ ื•ื•ืขืœืŸ ื“ืจื™ื™ืขืŸ ืขืจืึธื•ื– ืื•ื™ืฃ ื™ืขื“ืขืจ ืื ื“ืขืจืขืจ.

ื“ืขืจื ืึธืš ืคึผืจืึธื’ืจืขืก ืกื˜ืึทืคึผื˜ - ื•ื•ืึทืงืึทืฆื™ืข, ื•ื•ื™ื›ื˜ื™ืง ืขื ื™ื ื™ื, ื•ื•ื™ืจืึทืœ ื”ื™ืกื˜ืขืจื™ืึท ืื•ืŸ ืึท ืฉืึทืจืฃ ืคืึทืจื’ืจืขืกืขืจืŸ ืื™ืŸ ื•ื•ืขืจืงืœืึธื•ื“. ืื™ืš ืึธืคื˜ ื“ืขืจืžืื ื˜ ื“ื™ ืžืึทื’ื™ืฉ ืคึผืจืึธื‘ืœืขื ืฆื• ืžื™ื™ืŸ ื—ื‘ืจื™ื, ืึธื‘ืขืจ ืื™ืŸ ืฆื™ื™ื˜ ืขืก ื’ืขื•ื•ืขืŸ ืึทื– ื–ื™ื™ ื”ืื‘ืŸ ื ื™ืฉื˜ ืืคื™ืœื• ืฉื˜ืขื ื“ื™ืง ื’ืœื•ื™ื‘ืŸ ืžื™ืจ - ื“ื™ ื“ืขืจืงืœืขืจื•ื ื’ ืึทื– VMware ืกืœืึธื•ื– ื“ื™ ืงืึธื“ ืžื™ื˜ 10-20 ืžืืœ ืื™ื– ื’ืขื•ื•ืขืŸ ืฆื• ืžืึทื ืกื˜ืจืึทืก.

ืื™ืš ื”ืื‘ ืืœื™ื™ืŸ ื’ืขืคืจื•ืื•ื•ื˜ ืื•ื™ืกื’ืจืื‘ืŸ ื•ื•ืืก ืก'ื”ืื˜ ืžื™ืš ืคืืจืœืื›ื˜. ืื™ืŸ ืฆื™ื™ื˜ ืขืก ื’ืขื•ื•ืขืŸ ืฆื• ืžื™ืจ ืึทื– ืื™ืš ื’ืขืคื•ื ืขืŸ ืึท ืœื™ื™ื–ื•ื ื’ - ืงืขืจืŸ ืื•ืŸ ืึทื•ื•ืขืง ื”ื™ื™ืก ืคึผืœืึทื’ื–, ื˜ืฉืึทื ื’ื™ื ื’ ื“ื™ ืกื•ืžืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹ื–ื™ืงืึธืจืŸ ืึธื“ืขืจ ื“ื™ ื ื•ืžืขืจ ืคื•ืŸ ืคึผืจืึทืกืขืกืขืจื– ืึธืคื˜ ืคืืจืงืขืจื˜ ื“ื™ ืžืึทืฉื™ืŸ ืื™ืŸ ืึท "ืฉื ืขืœ" ืื™ื™ื ืขืจ. ืื‘ืขืจ ื ื™ืฉื˜ ืื•ื™ืฃ ืื™ื™ื‘ื™ืง. ืื‘ืขืจ ื•ื•ืึธืก ืื™ื– ื’ืขื•ื•ืขืŸ ืืžืช ืื™ื– ืึทื– ืขืก ืื™ื– ื’ืขื ื•ื’ ืฆื• ื’ื™ื™ืŸ ืื•ื™ืก ืื•ืŸ ืงืœืึทืคึผืŸ ืื•ื™ืฃ ื“ื™ ืจืึธื“ - ื“ืึธืก ืื™ื–, ื˜ื•ื™ืฉืŸ ืงื™ื™ืŸ ื•ื•ื™ืจื˜ื•ืึทืœ ืžืึทืฉื™ืŸ ืคึผืึทืจืึทืžืขื˜ืขืจ

ืฆื•ื ืกื•ืฃ, ืžื™ื™ืŸ ืืžืขืจื™ืงืื ืขืจ ื—ื‘ืจื™ื ืคึผืœื•ืฆืœื™ื ื’ ื’ืขืคื•ื ืขืŸ ื“ื™ ื•ื•ืึธืจืฆืœ ื’ืจื•ื ื˜.

ื™ืึธ, ืžื™ื™ืŸ ืึทืœื˜ ืœืึทืคึผื˜ืึทืคึผ ืื™ื– ืขื˜ืœืขื›ืข ืžืึธืœ ืžืขืจ ืฉื˜ืึทืจืง ื•ื•ื™ ื“ื™ื™ืŸ ืคึผืจืึธื“ื•ืงืฆื™ืข ืกืขืจื•ื•ืขืจ.

ื“ื™ ืžื—ื ื•ืช ื”ืึธื‘ืŸ ื“ื™ืคืขืจื“ ืื™ืŸ ืึธืคื˜ืงื™ื™ึทื˜!

  • ื•ื•ื™ ืึท ื”ืขืจืฉืŸ, ื“ืึธืก ืื™ื– ื ื™ืฉื˜ ืึท ื’ืจื•ื™ืก ื”ืึทื ื“ืœืขืŸ. ืึธื‘ืขืจ: ื•ื•ืขืŸ ืื™ืจ ืžืึทืš ืคื•ืŸ ืึท 'ื’ืขื‘ื•ื™ืจืŸ' ื‘ืึทืœืขื‘ืึธืก ืฆื• ืึท ื‘ืึทืœืขื‘ืึธืก ืžื™ื˜ ืึท 'ืื ื“ืขืจืข' ืึธืคื˜ืงื™ื™ึทื˜, VMware ืžื•ื–ืŸ ืกื˜ืจื•ื™ืขืจืŸ ื“ื™ GetTimePrecise ืจืขื–ื•ืœื˜ืึทื˜.
  • ื•ื•ื™ ืึท ื”ืขืจืฉืŸ, ื“ืึธืก ืื™ื– ื ื™ืฉื˜ ืึท ืคึผืจืึธื‘ืœืขื, ืกื™ื™ึทื“ืŸ ืขืก ืื™ื– ืึท ืึทืคึผืœืึทืงื™ื™ืฉืึทืŸ ืึทื– ืจื™ืงื•ื•ืขืก ื“ื™ ืคึผื™ื ื˜ืœืขืš ืฆื™ื™ื˜ ืžื™ืœื™ืึทื ื– ืคื•ืŸ ืžืืœ ืคึผืขืจ ืกืขืงื•ื ื“ืข, ื•ื•ื™ SQL ืกืขืจื•ื•ืขืจ.
  • ืึธื‘ืขืจ ื“ืึธืก ืื™ื– ื ื™ืฉื˜ ืกืงืขืจื™, ื•ื•ื™ื™ึทืœ ื“ื™ SQL ืกืขืจื•ื•ืขืจ ื˜ื•ื˜ ื ื™ืฉื˜ ืฉื˜ืขื ื“ื™ืง ื˜ืึธืŸ ื“ืึธืก (ื–ืขืŸ ืžืกืงื ื)

ืื‘ืขืจ ืขืก ื–ืขื ืขืŸ ืงืึทืกืขืก ื•ื•ืขืŸ ื“ืขื ื’ืจืึทื‘ืœื™ืข ื”ื™ืฅ ืฉื•ื•ืขืจ. ืื•ืŸ ื ืึธืš, ื™ืึธ, ื“ื•ืจืš ื˜ืึทืคึผื™ื ื’ ืื•ื™ืฃ ื“ื™ ืจืึธื“ (ื“ื•ืจืš ื˜ืฉืึทื ื’ื™ื ื’ ืขืคึผืขืก ืื™ืŸ ื“ื™ VM ืกืขื˜ื˜ื™ื ื’ืก) ืื™ืš ื’ืขืฆื•ื•ื•ื ื’ืขืŸ VMware ืฆื• 'ืจื™ืงืึทืœืงื™ืึทืœื™ื™ื˜' ื“ื™ ืงืึทื ืคื™ื’ื™ืขืจื™ื™ืฉืึทืŸ, ืื•ืŸ ื“ื™ ืึธืคื˜ืงื™ื™ึทื˜ ืคื•ืŸ ื“ื™ ืงืจืึทื ื˜ ื‘ืึทืœืขื‘ืึธืก ืื™ื– ื’ืขื•ื•ืืจืŸ ื“ื™ 'ื’ืขื‘ื•ื™ืจืŸ' ืึธืคื˜ืงื™ื™ึทื˜ ืคื•ืŸ ื“ื™ ืžืึทืฉื™ืŸ.

ื‘ืึทืฉื™ื™ื“

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

ื•ื•ืขืŸ ืื™ืจ ื“ื™ืกื™ื™ื‘ืึทืœ ื•ื•ื™ืจื˜ื•ืึทืœื™ื–ืึทื˜ื™ืึธืŸ ืคื•ืŸ ื“ื™ TSC, ืœื™ื™ืขื ืขืŸ ื“ื™ TSC ืคึฟื•ืŸ ื“ื™ ื•ื•ื™ืจื˜ื•ืึทืœ ืžืึทืฉื™ืŸ ืงืขืจื˜ ื“ื™ TSC ื•ื•ืขืจื˜ ืคื•ืŸ ื“ื™ ื’ืฉืžื™ื•ืช ืžืึทืฉื™ืŸ, ืื•ืŸ ืฉืจื™ื™ื‘ืŸ ื“ื™ TSC ืคึฟื•ืŸ ื“ื™ ื•ื•ื™ืจื˜ื•ืึทืœ ืžืึทืฉื™ืŸ ื”ืื˜ ืงื™ื™ืŸ ื•ื•ื™ืจืงื•ื ื’. ืžื™ื’ืจื™ื™ื˜ื™ื ื’ ื“ื™ ื•ื•ื™ืจื˜ื•ืึทืœ ืžืึทืฉื™ืŸ ืฆื• ืืŸ ืื ื“ืขืจ ื‘ืึทืœืขื‘ืึธืก, ืจื™ื–ื•ืžื™ื ื’ ืขืก ืคื•ืŸ ืกื•ืกืคึผืขื ื“ืขื“ ืฉื˜ืึทื˜, ืึธื“ืขืจ ืฆื•ืจื™ืงืงื•ืžืขืŸ ืฆื• ืึท ืžืึธืžืขื ื˜ื‘ื™ืœื“ ื– ื“ื™ TSC ืฆื• ืฉืคึผืจื™ื ื’ืขืŸ ื“ื™ืกืงืึทื ื˜ื™ื ื™ื•ืึทืกืœื™. ืขื˜ืœืขื›ืข ื’ืึทืกื˜ ืึธืคึผืขืจื™ื™ื˜ื™ื ื’ ืกื™ืกื˜ืขืžืขืŸ ืคืึทืจืœืึธื–ืŸ ืฆื• ืฉื˜ื™ื•ื•ืœ, ืึธื“ืขืจ ื•ื™ืกืฉื˜ืขืœื•ื ื’ ืื ื“ืขืจืข ื˜ื™ืžืขืงื™ืคึผื™ื ื’ ืคึผืจืึธื‘ืœืขืžืก ื•ื•ืขืŸ TSC ื•ื•ื™ืจื˜ื•ืึทืœื™ื–ืึทื˜ื™ืึธืŸ ืื™ื– ืคืึทืจืงืจื™ืคึผืœื˜. ืื™ืŸ ื“ืขืจ ืคืึทืจื’ืึทื ื’ืขื ื”ื™ื™ื˜, ื“ืขื ืฉื˜ืจื™ืš ืื™ื– ืžืืœ ืจืขืงืึทืžืขื ื“ื™ื“ ืฆื• ืคึฟืึทืจื‘ืขืกืขืจืŸ ื“ื™ ืคืึธืจืฉื˜ืขืœื•ื ื’ ืคื•ืŸ ืึทืคึผืœืึทืงื™ื™ืฉืึทื ื– ื•ื•ืึธืก ืœื™ื™ืขื ืขืŸ ื“ื™ TSC ืึธืคื˜, ืึธื‘ืขืจ ื“ื™ ืคืึธืจืฉื˜ืขืœื•ื ื’ ืคื•ืŸ ื“ื™ ื•ื•ื™ืจื˜ื•ืึทืœ TSC ืื™ื– ื™ืžืคึผืจื•ื•ื•ื“ ื‘ืื˜ื™ื™ื˜ื™ืง ืื™ืŸ ืงืจืึทื ื˜ ืคึผืจืึธื“ื•ืงื˜ืŸ. ื“ืขืจ ืฉื˜ืจื™ืš ืื™ื– ืื•ื™ืš ืจืขืงืึทืžืขื ื“ื™ื“ ืคึฟืึทืจ ื ื•ืฆืŸ ื•ื•ืขืŸ ืคึผืขืจืคืึธืจืžื™ื ื’ ืžืขื–ืฉืขืจืžืึทื ืฅ ื•ื•ืึธืก ื“ืึทืจืคืŸ ืึท ื’ืขื ื•ื™ ืžืงื•ืจ ืคื•ืŸ ืคืึทืงื˜ื™ืฉ ืฆื™ื™ื˜ ืื™ืŸ ื“ื™ ื•ื•ื™ืจื˜ื•ืึทืœ ืžืึทืฉื™ืŸ.

ืื™ืŸ ืงื•ืจืฅ, ืื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืœื™ื™ื’ืŸ ื“ืขื ืคึผืึทืจืึทืžืขื˜ืขืจ

monitor_control.virtual_rdtsc = ืคืึทืœืฉ

ืกืึธืฃ

ืื™ืจ ืžื™ืกื˜ืึธืžืข ื”ืึธื‘ืŸ ืึท ืงืฉื™ื: ืคืืจื•ื•ืืก ืจื•ืคื˜ SQL GetTimePrecise ืึทื–ื•ื™ ืึธืคื˜?

ืื™ืš ื˜ืึธืŸ ื ื™ื˜ ื”ืึธื‘ืŸ ื“ื™ SQL ืกืขืจื•ื•ืขืจ ืžืงื•ืจ ืงืึธื“, ืึธื‘ืขืจ ื“ื™ ืœืึธื’ื™ืง ื–ืื’ื˜ ื“ืึธืก. SQL ืื™ื– ื›ึผืžืขื˜ ืึทืŸ ืึธืคึผืขืจื™ื™ื˜ื™ื ื’ ืกื™ืกื˜ืขื ืžื™ื˜ ืงืึธืึธืคึผืขืจืึทื˜ื™ื•ื•ืข ืงืึทื ืงืขืจืึทื ืกื™, ื•ื•ื• ื™ืขื“ืขืจ ืคืึธื“ืขื ืžื•ื–ืŸ "ื’ืขื‘ืŸ ืื™ืŸ" ืคื•ืŸ ืฆื™ื™ื˜ ืฆื• ืฆื™ื™ื˜. ื•ื•ืื• ืื™ื– ื“ืขืจ ื‘ืขืกื˜ืขืจ ืคึผืœืึทืฅ ืฆื• ื˜ืึธืŸ ื“ืึธืก? ื•ื•ื• ืขืก ืื™ื– ืึท ื ืึทื˜ื™ืจืœืขืš ื•ื•ืึทืจื˜ืŸ - ืฉืœืึธืก ืึธื“ืขืจ ื™ืึธ. ืึธื•ืงื™ื™, ืึธื‘ืขืจ ื•ื•ืึธืก ืื•ื™ื‘ ืžื™ืจ ื–ืขื ืขืŸ ืกืคึผื™ื ื ื™ื ื’ ืงืึทืžืคึผื™ื•ื˜ื™ื™ืฉืึทื ืึทืœ ืœื•ืคึผืก? ื“ืขืจื ืึธืš ื“ื™ ืงืœืึธืจ ื•ื•ื™ ื“ืขืจ ื˜ืึธื’ ืื•ืŸ ื›ึผืžืขื˜ ื‘ืœื•ื™ื– ืึธืจื˜ ืื™ื– ืื™ืŸ ื“ื™ ื™ื‘ืขืจื–ืขืฆืขืจ (ื“ืึธืก ืื™ื– ื ื™ืฉื˜ ื˜ืึทืงืข ืึทืŸ ื™ื‘ืขืจื–ืขืฆืขืจ), ื ืึธืš ืขืงืกืึทืงื™ื•ื˜ื™ื ื’ ื“ื™ ื•ื•ื™ื™ึทื˜ืขืจ ื“ืขืจืงืœืขืจื•ื ื’.

ื‘ื›ืœืœ, SQL ืกืขืจื•ื•ืขืจ ืื™ื– ื ื™ืฉื˜ ื’ืขื ื™ืฆื˜ ืคึฟืึทืจ ืจื™ื™ืŸ ืงืึทืžืคึผื™ื•ื˜ื™ื ื’ ื ื™ื™ืœื™ื ื’ ืื•ืŸ ื“ืึธืก ืื™ื– ื ื™ืฉื˜ ืึท ืคึผืจืึธื‘ืœืขื. ืึธื‘ืขืจ ืœื•ืคึผืก ื•ื•ืึธืก ืึทืจื‘ืขื˜ ืžื™ื˜ ืึทืœืข ืกืึธืจืฅ ืคื•ืŸ ืฆื™ื™ึทื˜ื•ื•ื™ื™ึทืœื™ืง ื˜ื™ืฉืŸ (ื•ื•ืึธืก ื–ืขื ืขืŸ ื’ืœื™ื™ืš ืงืึทืฉื˜) ื•ื•ืขื ื“ืŸ ื“ื™ ืงืึธื“ ืื™ืŸ ืึท ืกื™ืงื•ื•ืึทื ืก ืคื•ืŸ ื–ื™ื™ืขืจ ื’ืขืฉื•ื•ื™ื ื“ ืขืงืกืึทืงื™ื•ื˜ืึทื“ ืกื˜ื™ื™ื˜ืžืึทื ืฅ.

ื“ื•ืจืš ื“ืขื ื•ื•ืขื’, ืื•ื™ื‘ ืื™ืจ ื™ื™ึทื ื•ื•ื™ืงืœืขืŸ ื“ื™ ืคึฟื•ื ืงืฆื™ืข ืื™ืŸ NATIVELY COMPILED, ื“ืขืžืึธืœื˜ ืขืก ืกื˜ืึทืคึผืก ืึทืกืงื™ื ื’ ืคึฟืึทืจ ืฆื™ื™ื˜, ืื•ืŸ ื“ื™ ื’ื™ื›ืงื™ื™ึทื˜ ื™ื ืงืจื™ืกื™ื– ืžื™ื˜ 10 ืžืืœ. ื•ื•ืึธืก ื•ื•ืขื’ืŸ ืงืึธืึธืคึผืขืจืึทื˜ื™ื•ื•ืข ืžื•ืœื˜ื™ื˜ืึทืกืงื™ื ื’? ืึธื‘ืขืจ ืคึฟืึทืจ ื ืึทื˜ื™ื•ื•ืข ืงืึทืžืคึผื™ื™ืœื“ ืงืึธื“, ืžื™ืจ ื”ืึธื‘ืŸ ืฆื• ื˜ืึธืŸ PREEMPTIVE MULTITASKING ืื™ืŸ SQL.

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’