рдиреИрдиреЛрд╕реЗрдХрдВрдб рд╕рдЯреАрдХрддрд╛ рдХреЗ рд╕рд╛рде рд╕рдордп рдорд╛рдкрди

рдЫрд╡рд┐

рдХреБрдЫ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рдкрд▓ рдЖрдпрд╛ред рд╕рдордп рдХреЛ рдорд╛рдкрдиреЗ рдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдЙрдкрдХрд░рдг рдореЗрд░реЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИрдВред рдиреИрдиреЛрд╕реЗрдХрдВрдб рд╕рдЯреАрдХрддрд╛ рдФрд░ рдиреИрдиреЛрд╕реЗрдХрдВрдб рдУрд╡рд░рд╣реЗрдб рдХреЗ рд╕рд╛рде рдорд╛рдкрдиреЗ рдореЗрдВ рд╕рдордп рд▓рдЧрд╛ред

рдореИрдВрдиреЗ рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓рд┐рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдЬреЛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░реЗрдЧрд╛ред рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдРрд╕рд╛ рд▓рдЧрддрд╛ рдерд╛ рдХрд┐ рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЦрд╛рд╕ рдирд╣реАрдВ рдерд╛ред рд▓реЗрдХрд┐рди рдХрд░реАрдмреА рдкрд░реАрдХреНрд╖рд╛ рдХреЗ рджреМрд░рд╛рди, рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдХрдИ рджрд┐рд▓рдЪрд╕реНрдк рд╕рдорд╕реНрдпрд╛рдПрдВ рдереАрдВ рдЬрд┐рдирд╕реЗ рдирд┐рдкрдЯрд╛ рдЬрд╛рдирд╛ рдерд╛ред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ рдФрд░ рдЙрдирдХрд╛ рд╕рдорд╛рдзрд╛рди рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдЪреВрдВрдХрд┐ рдЖрдк рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдХрдИ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕рдордп рдХреЛ рдорд╛рдк рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рддреБрд░рдВрдд рд╕реНрдкрд╖реНрдЯ рдХрд░ рджреВрдВрдЧрд╛ рдХрд┐ рдпрд╣рд╛рдВ рд╣рдо "рд╕реНрдЯреЙрдкрд╡реЙрдЪ рджреНрд╡рд╛рд░рд╛ рд╕рдордп" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред рдпрд╛ рджреАрд╡рд╛рд░-рдШрдбрд╝реА рдХрд╛ рд╕рдордпред рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдордп, рдмреАрддрд╛ рд╣реБрдЖ рд╕рдордп рдЖрджрд┐ рд╣реИред рдпрд╣реА рд╣реИ, рдПрдХ рд╕рд░рд▓ "рдорд╛рдирд╡" рд╕рдордп, рдЬрд┐рд╕реЗ рд╣рдо рдХрд╛рд░реНрдп рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВ рдФрд░ рдЕрдВрдд рдореЗрдВ рд░реЛрдХрддреЗ рд╣реИрдВред

рдорд╛рдЗрдХреНрд░реЛрд╕реЗрдХрдВрдб - рд▓рдЧрднрдЧ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП


рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдорд╛рдЗрдХреНрд░реЛрд╕реЗрдХрдВрдб рд╕рдордп рдХреЗ рдкреИрдорд╛рдиреЗ рдХреЗ рдЖрджреА рд╣реЛ рдЧрдП рд╣реИрдВред рдорд╛рдЗрдХреНрд░реЛрд╕реЗрдХрдВрдб рдореЗрдВ, рдЖрдк рдПрдХ NVMe рдбреНрд░рд╛рдЗрд╡ рд╕реЗ рдбреЗрдЯрд╛ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред рдорд╛рдЗрдХреНрд░реЛрд╕реЗрдХрдВрдб рдореЗрдВ, рдбреЗрдЯрд╛ рдиреЗрдЯрд╡рд░реНрдХ рдкрд░ рднреЗрдЬрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рднреА рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ, рдмреЗрд╢рдХ, рд▓реЗрдХрд┐рди InifiniBand-network рдХреЗ рд▓рд┐рдП - рдЖрд╕рд╛рдиреА рд╕реЗред

рдЗрд╕реА рд╕рдордп, рдорд╛рдЗрдХреНрд░реЛрд╕реЗрдХрдВрдб рдХреА рднреА рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдереАред рдПрдХ рдкреВрд░реНрдг I / O рд╕реНрдЯреИрдХ рдореЗрдВ рдХрдИ рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдФрд░ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдШрдЯрдХ рд╣реЛрддреЗ рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рджреНрд╡рд╛рд░рд╛ рд╢реБрд░реВ рдХреА рдЧрдИ рджреЗрд░реА рдЙрдк-рдорд╛рдЗрдХреНрд░реЛрд╕реЗрдХрдВрдб рд╕реНрддрд░ рдкрд░ рд╣реЛрддреА рд╣реИред

рдЗрд╕ рдкрд░рд┐рдорд╛рдг рдХреА рджреЗрд░реА рдХреЛ рдорд╛рдкрдиреЗ рдХреЗ рд▓рд┐рдП, рдорд╛рдЗрдХреНрд░реЛрд╕реЗрдХрдВрдб рд╕рдЯреАрдХрддрд╛ рдЕрдм рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рди рдХреЗрд╡рд▓ рд╕рдЯреАрдХрддрд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рдмрд▓реНрдХрд┐ рд╕рдордп рдорд╛рдкрдиреЗ рдХрд╛ рдУрд╡рд░рд╣реЗрдб рднреА рд╣реИред рд▓рд┐рдирдХреНрд╕ рдШрдбрд╝реА_рдЧреЗрдЯрд╛рдЗрдо () рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рд░рд┐рдЯрд░реНрди рд╕рдордп рдиреИрдиреЛрд╕реНрдХреЛрдкрд┐рдХ рдкрд░рд┐рд╢реБрджреНрдзрддрд╛ рдХреЗ рд╕рд╛рде рд╣реИред рдПрдХ рдорд╢реАрди рдкрд░ рдЬреЛ рдореЗрд░реА рдЙрдВрдЧрд▓рд┐рдпреЛрдВ (Intel┬о Xeon┬о CPU E5-2630 v2 @ 2.60GHz) рдкрд░ рд╕рд╣реА рд╣реИ, рдпрд╣ рдХреЙрд▓ рд▓рдЧрднрдЧ 120 ns рдореЗрдВ рдкреВрд░реА рд╣реЛрддреА рд╣реИред рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдлрд┐рдЧрд░ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, clock_gettime () рдХрд╛рдлреА рдЕрдиреБрдорд╛рдирд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдЙрд╕рдХреА рдХреЙрд▓ рдХреЗ рдУрд╡рд░рд╣реЗрдб рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджрд╕рд┐рдпреЛрдВ рдиреИрдиреЛрд╕реЗрдХрдВрдб рдХреЗ рдХреНрд░рдо рдХреА рд╕рдЯреАрдХрддрд╛ рдХреЗ рд╕рд╛рде рдорд╛рдк рд▓реЗрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрдм рд╣рдо рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджреЗрддреЗ рд╣реИрдВред рд╕рдордп рдЕрдВрддрд░рд╛рд▓ рдХреЛ рдорд╛рдкрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рджреЛ рдРрд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рд╢реБрд░реБрдЖрдд рдореЗрдВ рдФрд░ рдЕрдВрдд рдореЗрдВред рдпрд╛рдиреА 240 рдПрди рдПрд╕ рдЦрд░реНрдЪ рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ 1-10 ╬╝s рдХреЗ рдХреНрд░рдо рдХреЗ рдШрдиреЗ рд╕рдордп рдЕрдВрддрд░рд╛рд▓реЛрдВ рдХреЛ рдорд╛рдкрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдРрд╕реЗ рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдорд╛рдк рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд╕реНрд╡рдпрдВ рд╣реА рдордирд╛рдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХрд╛рдлреА рд╡рд┐рдХреГрдд рдХрд░ рджреЗрдЧреАред

рдореИрдВрдиреЗ рдЗрд╕ рдЦрдВрдб рдХреЛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рд╣реИ рдХрд┐ рд╣рд╛рд▓ рдХреЗ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ IO рд╕реНрдЯреИрдХ рдХреИрд╕реЗ рддреЗрдЬ рд╣реБрдЖ рд╣реИред рдпрд╣ рдирдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрддрдиреА рдЬрд▓реНрджреА рдФрд░ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рд╕рдордп рдХреЛ рдорд╛рдкрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдРрд╕реА рдЬрд░реВрд░рдд рд╣рдореЗрд╢рд╛ рд╕реЗ рд░рд╣реА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдореЗрд╢рд╛ рдПрдХ рдХреЛрдб рд╣реЛрддрд╛ рдерд╛ рдЬрд┐рд╕реЗ рдореИрдВ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рдХрдо рд╕реЗ рдХрдо 1 рдШрдбрд╝реА рдЪрдХреНрд░ рдХреЛ рдЧрддрд┐ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред рдпрд╛ рд╕рдирд╕рдиреАрдЦреЗрдЬ рд╕реНрдкреЗрдХреНрдЯрд░ рднреЗрджреНрдпрддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдореВрд▓ рд▓реЗрдЦ рд╕реЗ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг:

рдЫрд╡рд┐

рдпрд╣рд╛рдВ, рд▓рд╛рдЗрдиреЗрдВ 72-74 рдПрдХрд▓ рдореЗрдореЛрд░реА рдПрдХреНрд╕реЗрд╕ рдСрдкрд░реЗрд╢рди рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рдХреЛ рдорд╛рдкрддреА рд╣реИрдВред рд╕рдЪ рд╣реИ, рд╕реНрдкреЗрдХреНрдЯрд░ рдиреИрдиреЛрд╕реЗрдХрдВрдб рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рдирд╣реАрдВ рд░рдЦрддрд╛ рд╣реИред рд╕рдордп рдХреЛ "рддреЛрддреЗ" рдореЗрдВ рдорд╛рдкрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рддреЛрддреЗ рдФрд░ рд╕реЗрдХрдВрдб рдореЗрдВ рд▓реМрдЯ рдЖрдПрдВрдЧреЗред

рд╕рдордп-рд╕реНрдЯрд╛рдореНрдк рдХрд╛рдЙрдВрдЯрд░


рддреЗрдЬ рдФрд░ рд╕рдЯреАрдХ рд╕рдордп рдорд╛рдк рдХреА рдХреБрдВрдЬреА рдПрдХ рд╡рд┐рд╢реЗрд╖ рдорд╛рдЗрдХреНрд░реЛрдкреНрд░реЛрд╕реЗрд╕рд░ рдХрд╛рдЙрдВрдЯрд░ рд╣реИред рдЗрд╕ рдХрд╛рдЙрдВрдЯрд░ рдХрд╛ рдореВрд▓реНрдп рдЖрдорддреМрд░ рдкрд░ рдПрдХ рдЕрд▓рдЧ рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЖрдорддреМрд░ рдкрд░ рд╣реЛрддрд╛ рд╣реИ - рд▓реЗрдХрд┐рди рд╣рдореЗрд╢рд╛ рдирд╣реАрдВ - рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдерд╛рди рд╕реЗ рд╕реБрд▓рднред рд╡рд┐рднрд┐рдиреНрди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкрд░, рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ:

  1. x86 рдЯрд╛рдЗрдо-рд╕реНрдЯреИрдВрдк рдХрд╛рдЙрдВрдЯрд░
  2. PowerPC рдкрд░ рд╕рдордп рдЖрдзрд╛рд░ рдкрдВрдЬреАрдпрди
  3. рдЗрдЯреЗрдирд┐рдпрдо рдкрд░ рдЕрдВрддрд░рд╛рд▓ рд╕рдордп рдХрд╛рдЙрдВрдЯрд░
  4. рдЖрджрд┐

рдиреАрдЪреЗ рдореИрдВ рд╣рдореЗрд╢рд╛ "рдЯрд╛рдЗрдо-рд╕реНрдЯреИрдВрдк рдХрд╛рдЙрдВрдЯрд░" рдпрд╛ TSC рдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореИрдВ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреА рдкрд░рд╡рд╛рд╣ рдХрд┐рдП рдмрд┐рдирд╛ рдХрд┐рд╕реА рднреА рдРрд╕реЗ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦреВрдВрдЧрд╛ред

рдЯреАрдПрд╕рд╕реА рдореВрд▓реНрдп рдХреЛ рдЖрдорддреМрд░ рдкрд░ рдкрдврд╝рдирд╛ - рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕реЗ рд╣рдореЗрд╢рд╛ рдирд╣реАрдВ - рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рд╛рде рд╕рдВрднрд╡ рд╣реИред рдпрд╣рд╛рдБ x86 рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИред рдХрдбрд╝рд╛рдИ рд╕реЗ рдмреЛрд▓рддреЗ рд╣реБрдП, рдпрд╣ рдПрдХ рд╢реБрджреНрдз рдХреЛрдбрд╛рдВрддрд░рдХ рдирд┐рд░реНрджреЗрд╢ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди GNU рдЗрдирд▓рд╛рдЗрди рдХреЛрдбрд╛рдВрддрд░рдХ:

uint32_t eax, edx; __asm__ __volatile__( "rdtsc" : "=a" (eax), "=d" (edx)); 

Rdtsc рдЗрдВрд╕реНрдЯреНрд░рдХреНрд╢рди рдореЗрдВ eac рдФрд░ edx рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдореЗрдВ TSC рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЗ рджреЛ 32-рдмрд┐рдЯ рд╣рд┐рд╕реНрд╕реЗ рд╣реИрдВред рдЗрдирдореЗрдВ рд╕реЗ, рдЖрдк рдПрдХрд▓ 64-рдмрд┐рдЯ рдорд╛рди "рдЧреЛрдВрдж" рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ: рдпрд╣ (рдФрд░ рдЗрд╕реА рддрд░рд╣) рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рд╕реАрдзреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдерд╛рди рд╕реЗ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХреЛрдИ рд╕рд┐рд╕реНрдЯрдо рдХреЙрд▓ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдиреНрдпреВрдирддрдо рдУрд╡рд░рд╣реЗрдбред

рдЕрдм рд╕рдордп рдорд╛рдкрдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реЛрдЧрд╛?

  1. рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмреНрдпрд╛рдЬ рдХреЗ рд╕рдордп рдЕрдВрддрд░рд╛рд▓ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВред рдХрд╛рдЙрдВрдЯрд░ рд╡реИрд▓реНрдпреВ рдпрд╛рдж рд░рдЦреЗрдВ
  2. рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдирд┐рд░реНрджреЗрд╢ рдХреЛ рдЕрдВрдд рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВред рд╣рдо рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдкрд╣рд▓реЗ рдирд┐рд░реНрджреЗрд╢ рд╕реЗ рджреВрд╕рд░реЗ рддрдХ рдХрд╛рдЙрдВрдЯрд░ рдХрд╛ рдореВрд▓реНрдп рдмрдврд╝ рдЬрд╛рдПрдЧрд╛ред рдЕрдиреНрдпрдерд╛, рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ? рджреВрд╕рд░рд╛ рдореВрд▓реНрдп рдпрд╛рдж рд░рдЦреЗрдВ
  3. рд╣рдо рджреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдореВрд▓реНрдпреЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рд╣рдорд╛рд░рд╛ рд╕рдордп рд╣реИ

рдпрд╣ рд╕рд░рд▓ рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди ...

рд╡рд░реНрдгрд┐рдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджреНрд╡рд╛рд░рд╛ рдорд╛рдкрд╛ рдЧрдпрд╛ рд╕рдордп "рддреЛрддреЗ" рдореЗрдВ рд╡реНрдпрдХреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рд╕реЗрдХрдВрдб рдореЗрдВ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдХрднреА-рдХрднреА рддреЛрддреЗ рд╡рд╣реА рд╣реЛрддреЗ рд╣реИрдВ рдЬрд┐рдирдХреА рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдРрд╕реА рдкрд░рд┐рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рд╣реИрдВ рдЬрдм рд╕рдордп рдЕрдВрддрд░рд╛рд▓ рдХреЗ рдкреВрд░реНрдг рдореВрд▓реНрдп рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡рд┐рднрд┐рдиреНрди рдЕрдВрддрд░рд╛рд▓ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдХреИрд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИрдВред рдКрдкрд░ рд╕реНрдкреЗрдХреНрдЯрд░ рдЙрджрд╛рд╣рд░рдг рдмрд┐рд▓реНрдХреБрд▓ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдореЗрдореЛрд░реА рдПрдХреНрд╕реЗрд╕ рдХреА рдЕрд╡рдзрд┐ рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддреА рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдХреБрдЫ рдкрддреЛрдВ рдкрд░ рдХреЙрд▓ рджреВрд╕рд░реЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдмрд╣реБрдд рддреЗрдЬрд╝реА рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХреА рдЬрд╛рдПрдЧреА (рдпрд╣ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдХреИрд╢ рдпрд╛ рдореЗрдореЛрд░реА рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ)ред

рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рддреЛрддреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реЗрдХрдВрдб / рдорд╛рдЗрдХреНрд░реЛрд╕реЗрдХрдВрдб / рдиреИрдиреЛрд╕реЗрдХрдВрдб, рдЖрджрд┐ред рджреЛ рдореВрд▓рднреВрдд рд░реВрдк рд╕реЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдорд╛рдорд▓реЛрдВ рдХреЛ рдпрд╣рд╛рдВ рдкреНрд░рддрд┐рд╖реНрдард┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

  1. рдиреИрдиреЛрд╕реЗрдХрдВрдб рдХреА рдЬрд░реВрд░рдд рд╣реИ, рд▓реЗрдХрд┐рди рддрдмред рдпрд╣реА рд╣реИ, рдкрд╣рд▓реЗ рддреЛрддреЗ рдореЗрдВ рд╕рднреА рдЖрд╡рд╢реНрдпрдХ рдорд╛рдк рдХрд░рдирд╛ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЖрдЧреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╕реНрдореГрддрд┐ рдореЗрдВ) рдХреЗ рд▓рд┐рдП рдХрд╣реАрдВ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИред рдФрд░ рдорд╛рдк рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рд╣реА, рдПрдХрддреНрд░рд┐рдд рддреЛрддреЛрдВ рдХреЛ рдзреАрд░реЗ-рдзреАрд░реЗ рд╕реЗрдХрдВрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛
  2. рдиреИрдиреЛрд╕реЗрдХрдВрдб рдХреА рдЬрд░реВрд░рдд рд╣реИ "рдордХреНрдЦреА рдкрд░ред" рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреА рдорд╛рдк рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ "рдЙрдкрднреЛрдХреНрддрд╛" рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдирд┐рдпрдВрддреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЬреЛ "рдорд╛рдирд╡" рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рдордп рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ

рдкрд╣рд▓рд╛ рдорд╛рдорд▓рд╛ рд╕рд░рд▓ рд╣реИ, рджреВрд╕рд░рд╛ - рд╕рдВрд╕рд╛рдзрди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд░реВрдкрд╛рдВрддрд░рдг рдпрдерд╛рд╕рдВрднрд╡ рдкреНрд░рднрд╛рд╡реА рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрджрд┐ рдпрд╣ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдорд╛рдк рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдмрд╣реБрдд рд╡рд┐рдХреГрдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рдиреАрдЪреЗ рдкреНрд░рднрд╛рд╡реА рд░реВрдкрд╛рдВрддрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред рдпрд╣рд╛рдВ рд╣рдордиреЗ рдЕрдм рддрдХ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреА рдкрд╣рдЪрд╛рди рдХреА рд╣реИ рдФрд░ рджреВрд╕рд░реЗ рдкрд░ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред

рдЯрд╛рдЗрдо-рд╕реНрдЯреИрдВрдк рдХрд╛рдЙрдВрдЯрд░ рдЙрддрдиреЗ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИрдВ рдЬрд┐рддрдиреЗ рд╣рдо рдЪрд╛рд╣реЗрдВрдЧреЗред рдХреБрдЫ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкрд░:

  1. рдпрд╣ рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рд╣реИ рдХрд┐ TSC рдЙрдЪреНрдЪ рдЖрд╡реГрддреНрддрд┐ рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рдЯреАрдПрд╕рд╕реА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдХрд╣реЗрдВ, рдПрдХ рдмрд╛рд░ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рдЗрдХреНрд░реЛрд╕реЗрдХрдВрдб, рдлрд┐рд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдиреИрдиреЛрд╕реЗрдХрдВрдб рдХреЛ рдареАрдХ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
  2. рдЖрд╡реГрддреНрддрд┐ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде TSC рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╕рдордп рдХреЗ рд╕рд╛рде рднрд┐рдиреНрди рд╣реЛ рд╕рдХрддреА рд╣реИ
  3. рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдореМрдЬреВрдж рд╡рд┐рднрд┐рдиреНрди рд╕реАрдкреАрдпреВ рдкрд░, TSCs рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдЖрд╡реГрддреНрддрд┐рдпреЛрдВ рдкрд░ рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
  4. рдЯреАрдПрд╕рд╕реА рдХреЗ рдмреАрдЪ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реАрдкреАрдпреВ рдкрд░ рдЯрд┐рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрджрд▓рд╛рд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ

рдпрд╣рд╛рдБ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬреЛ рдкрд┐рдЫрд▓реА рд╕рдорд╕реНрдпрд╛ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рджреЛ CPU: CPU1 рдФрд░ CPU2 рдХреЗ рд╕рд╛рде рдПрдХ рдкреНрд░рдгрд╛рд▓реА рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдкрд╣рд▓реЗ рд╕реАрдкреАрдпреВ рдкрд░ рдЯреАрдПрд╕рд╕реА рдЯрд┐рдХреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рджреВрд╕рд░реЗ рд╕реЗ рдкреАрдЫреЗ рд╣реИ, рдЬреЛ 5 рд╕реЗрдХрдВрдб рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдЖрдЧреЗ рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЧрдгрдирд╛ рдХреЗ рд╕рдордп рдХреЛ рдорд╛рдкрдиреЗ рд╡рд╛рд▓реЗ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдПрдХ рдзрд╛рд░рд╛ рд╢реБрд░реВ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬреЛ рд╡рд╣ рдЦреБрдж рдХрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕реНрдЯреНрд░реАрдо рдкрд╣рд▓реЗ рдЯреАрдПрд╕рд╕реА рдорд╛рди рдкрдврд╝рддрд╛ рд╣реИ, рдлрд┐рд░ рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рджреВрд╕рд░рд╛ рдЯреАрдПрд╕рд╕реА рдорд╛рди рдкрдврд╝рддрд╛ рд╣реИред рдпрджрд┐ рдЗрд╕рдХреЗ рдкреВрд░реЗ рдЬреАрд╡рди рдХреЗ рджреМрд░рд╛рди рдПрдХ рдзрд╛рдЧрд╛ рдХреЗрд╡рд▓ рдХрд┐рд╕реА рдПрдХ рд╕реАрдкреАрдпреВ рдкрд░ рд░рд╣рддрд╛ рд╣реИ - рддреЛ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рдзрд╛рдЧрд╛ рд╕реАрдкреАрдпреВ 1 рдкрд░ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рд╡рд╣рд╛рдВ рдкрд╣рд▓реЗ рдЯреАрдПрд╕рд╕реА рдореВрд▓реНрдп рдХреЛ рдорд╛рдкрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдЧрдгрдирд╛рдУрдВ рдХреЗ рдмреАрдЪ рдореЗрдВ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рд╕реАрдкреАрдпреВ 2 рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд╣рд╛рдВ рдпрд╣ рджреВрд╕рд░рд╛ рдЯреАрдПрд╕рд╕реА рдореВрд▓реНрдп рдкрдврд╝рддрд╛ рд╣реИ? рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЧрдгрдирд╛ рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ 5 рд╕реЗрдХрдВрдб рд▓рдВрдмрд╛ рд▓рдЧреЗрдЧрд╛ред

рдКрдкрд░ рд╕реВрдЪреАрдмрджреНрдз рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг, рдЯреАрдПрд╕рд╕реА рдХреБрдЫ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдкрд░ рд╕рдордп рдХреЗ рдПрдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛рдУрдВ рд╕реЗ "рдкреАрдбрд╝рд┐рдд" рдЕрдиреНрдп рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдкрд░, рдЯреАрдПрд╕рд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрднреА рднреА рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд╡рд╛рд╕реНрддреБ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдВрднрд╡ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ:

  1. рдЙрдкрдХрд░рдг рд╣рд░ рдмрд╛рд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╡реНрдпрд╡рдзрд╛рди рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд╕рд╛рде TSC рдЕрдкрдбреЗрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕реА рд╕рдордп, рдЙрдкрдХрд░рдг рд╡рд░реНрддрдорд╛рди рдЖрд╡реГрддреНрддрд┐ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рднреА рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ, рдЯреАрдПрд╕рд╕реА рд░рд┐рдлреНрд░реЗрд╢ рд░реЗрдЯ рдХреЛ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдирд┐рдпрдВрддреНрд░рдг рдореЗрдВ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ (рджреЗрдЦреЗрдВ "рдкрд╛рд╡рд░ рдЖрдИрдПрд╕рдП рд╕рдВрд╕реНрдХрд░рдг 2.06 рд╕рдВрд╢реЛрдзрди рдмреА, рдмреБрдХ II, рдЕрдзреНрдпрд╛рдп 5")
  2. рдЯреАрдПрд╕рд╕реА рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде, рдЙрдкрдХрд░рдг рд╕реАрдкреАрдпреВ рдХреА рдЖрдИрдбреА рднреА рдкреНрд░рджрд╛рди рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕ рдкрд░ рдпрд╣ рдореВрд▓реНрдп рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдЗрдВрдЯреЗрд▓ рдЖрд░рдбреАрдЯреАрдПрд╕рд╕реАрдкреА рдирд┐рд░реНрджреЗрд╢ рджреЗрдЦреЗрдВ, "рдЗрдВрдЯреЗрд▓ 64 рдФрд░ рдЖрдИрдП -32 рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдбреЗрд╡рд▓рдкрд░ рдореИрдиреБрдЕрд▓, рд╡реЙрд▓реНрдпреВрдо 2)
  3. рдХреБрдЫ рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдкрд░, рдЖрдк рдкреНрд░рддреНрдпреЗрдХ CPU рдХреЗ рд▓рд┐рдП TSC рдорд╛рди рдХреЛ рдкреНрд░реЛрдЧреНрд░рд╛рдореЗрдЯрд┐рдХ рд░реВрдк рд╕реЗ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (Intel WRMSR рдирд┐рд░реНрджреЗрд╢ рджреЗрдЦреЗрдВ рдФрд░ IA32_TIME_STAMP_COUNTER, "Intel 64 рдФрд░ IA-32 рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рд╕реЙрдлреНрдЯрд╡реЗрдпрд░ рдбреЗрд╡рд▓рдкрд░ рдХрд╛ рдореИрдиреБрдЕрд▓", рдЦрдВрдб 3 рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░реЗрдВ)

рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╡рд┐рднрд┐рдиреНрди рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдкрд░ рд╕рдордп рдореАрдЯрд░ рдХреЛ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рд╡рд┐рд╖рдп рдЖрдХрд░реНрд╖рдХ рдФрд░ рд╡реНрдпрд╛рдкрдХ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рдордп рдФрд░ рд░реБрдЪрд┐ рд╣реИ, рддреЛ рдореИрдВ рдбрд╛рдЗрд╡рд┐рдВрдЧ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рд╕реАрдЦреЗрдВрдЧреЗ рдХрд┐ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреБрдЫ рдкреНрд░рдгрд╛рд▓рд┐рдпрд╛рдБ рдЖрдкрдХреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ TSC рд╕рдордп рдХреЗ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рддреЛ, рдЯреАрдПрд╕рд╕реА рдХреЗ рдХрдИ рд╡рд╛рд╕реНрддреБрд╢рд┐рд▓реНрдк рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ рдХреА рдЕрдкрдиреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ рдХрд┐ рдЗрд╕ рд╕рднреА рдЪрд┐рдбрд╝рд┐рдпрд╛рдШрд░ рдореЗрдВ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рд╡реГрддреНрддрд┐ рд╕реНрдерд╛рдкрд┐рдд рдХреА рдЧрдИ рд╣реИред рдЖрдзреБрдирд┐рдХ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдФрд░ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ :

  1. TSC рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ CPU рдкрд░ рд╕рдорд╛рди рдЖрд╡реГрддреНрддрд┐ рдкрд░ рдЯрд┐рдХ рдХрд░рддрд╛ рд╣реИ
  2. рдпрд╣ рдЖрд╡реГрддреНрддрд┐ рд╕рдордп рдореЗрдВ рдирд╣реАрдВ рдмрджрд▓рддреА рд╣реИ
  3. рдЯреАрдПрд╕рд╕реА рдХреЗ рдмреАрдЪ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реАрдкреАрдпреВ рдкрд░ рдЯрд┐рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдмрджрд▓рд╛рд╡ рдирд╣реАрдВ рд╣реИ

рдЕрдкрдиреА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд░рддреЗ рд╕рдордп, рдореИрдВрдиреЗ рдЗрд╕ рдЖрдзрд╛рд░ рд╕реЗ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рди рдХрд┐ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╡рд┐рдирд┐рдЧреЗрдЯ рд╕реЗред

рдкреБрд╕реНрддрдХрд╛рд▓рдп


рдореИрдВрдиреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рдЭреБрдВрдб рдХреЗ рд╣рд╛рд░реНрдбрд╡реЗрдпрд░ рдЪрд┐рдкреНрд╕ рдкрд░ рд░рдЦрдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд┐рдпрд╛ред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдореИрдВрдиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдореЗрд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдЯреНрд░реЗрдВрдб-рдУрд░рд┐рдПрдВрдЯреЗрдб рд╣реЛрдЧреАред рдЙрд╕рдХрд╛ рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рдЕрдиреБрднрд╡рдЬрдиреНрдп рдзреНрдпрд╛рди рд╣реИ:

  1. рдпрд╣ рдЖрдкрдХреЛ рдПрдХ рд╕рдордп рд╕реНрд░реЛрдд рдХреЗ рд░реВрдк рдореЗрдВ рдЯреАрдПрд╕рд╕реА рдХреА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдХреЛ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
  2. рдЖрдкрдХреЛ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рд░реВрдк рд╕реЗ рдЯрд┐рдХреЛрдВ рдХреЛ рдиреИрдиреЛрд╕реЗрдХрдВрдб рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдкреНрд░рд╛рдпреЛрдЧрд┐рдХ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ
  3. рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рд▓рд╛рдЗрдмреНрд░реЗрд░реА TSC рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рдиреИрдиреЛрд╕реНрдХреЙрдиреНрдбреНрд╕ рдХреЛ "рдлреНрд▓рд╛рдИ рдкрд░" рдореЗрдВ рдЯрд┐рдХ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЗрдВрдЯрд░рдлреЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддреА рд╣реИред

рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛрдб рдпрд╣рд╛рдВ рдЙрдкрд▓рдмреНрдз рд╣реИред рдпрд╣ рдХреЗрд╡рд▓ рд▓рд┐рдирдХреНрд╕ рдкрд░ рд╕рдВрдХрд▓рд┐рдд рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдХреЛрдб рдореЗрдВ, рдЖрдк рд╕рднреА рддрд░реАрдХреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХрд╛ рд╡рд┐рд╡рд░рдг рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕ рдкрд░ рдмрд╛рдж рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЬрд╛рдПрдЧреАред

TSC рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди


рдкреБрд╕реНрддрдХрд╛рд▓рдп рдПрдХ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рджреЛ рд░реЗрдЯрд┐рдВрдЧ рджреЗрддрд╛ рд╣реИ:

  1. рд╡рд┐рднрд┐рдиреНрди рд╕реАрдкреАрдпреВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдХрд╛рдЙрдВрдЯрд░реЛрдВ рдХреЗ рдмреАрдЪ рдЕрдзрд┐рдХрддрдо рдмрджрд▓рд╛рд╡ред рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдХреЗрд╡рд▓ рд╕реАрдкреАрдпреВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдХрд┐рд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рддреАрди рд╕реАрдкреАрдпреВ рдЙрдкрд▓рдмреНрдз рд╣реИрдВ, рдФрд░ рдЙрд╕реА рд╕рдордп рдЗрди рд╕реАрдкреАрдпреВ рдкрд░ рдЯреАрдПрд╕рд╕реА 50, 150, 20 рд╣реИ, рддреЛ рдЕрдзрд┐рдХрддрдо рдмрджрд▓рд╛рд╡ 150-20 = 130 рд╣реЛрдЧрд╛ред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдзрд┐рдХрддрдо рдмрджрд▓рд╛рд╡ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЕрдиреБрдорд╛рди рджреЗрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдпрд╣ рдмрджрд▓рд╛рд╡ рдлрд┐рдЯ рд╣реЛрдЧрд╛ред рдЖрдХрд▓рди рдХреЗ рд╕рд╛рде рдЖрдЧреЗ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ? рдХреИрд╕реЗ рдХрд░реЗрдВ рдЗрд╕реНрддреЗрдорд╛рд▓? рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрд░реНрде рд▓рдЧрднрдЧ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╣реИред рдЕрдзрд┐рдХрддрдо рдкрд╛рд░реА рд╡рд╣ рдЕрдзрд┐рдХрддрдо рдореВрд▓реНрдп рд╣реИ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЧреНрд░рд╛рд╣рдХ рдХреЛрдб рдмрдирд╛рдиреЗ рд╡рд╛рд▓рд╛ рдЖрдпрд╛рдо рд╡рд┐рдХреГрдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП, рддреАрди рд╕реАрдкреАрдпреВ рдХреЗ рд╕рд╛рде рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛрдб рд╕реАрдкреАрдпреВ 3 (рдЬрд╣рд╛рдВ рдЯреАрдПрд╕рд╕реА 20 рдерд╛) рдкрд░ рд╕рдордп рдХреЛ рдорд╛рдкрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рдФрд░ рд╕реАрдкреАрдпреВ 2 (рдЬрд╣рд╛рдВ рдЯреАрдПрд╕рд╕реА 150 рдерд╛) рдкрд░ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЧрдпрд╛ред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд 130 рдЯрд┐рдХреЗрдВ рдорд╛рдкрд╛ рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ рд░реЗрдВрдЧрдирд╛ рд╣реЛрдЧрд╛ред рдФрд░ рдлрд┐рд░ рдХрднреА рдирд╣реАрдВред CPU1 рдФрд░ CPU2 рдХреЗ рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рдХреЗрд╡рд▓ 100 рдЯрд┐рдХ рд╣реЛрдЧрд╛ред 130 рдЯрд┐рдХреЛрдВ рдХрд╛ рдЕрдиреБрдорд╛рди рд╣реЛрдиреЗ рдХреЗ рдХрд╛рд░рдг (рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд░реВрдврд╝рд┐рд╡рд╛рджреА рд╣реЛрдЧрд╛), рдЧреНрд░рд╛рд╣рдХ рдпрд╣ рддрдп рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕ рддрд░рд╣ рдХрд╛ рд╡рд┐рд░реВрдкрдг рдореВрд▓реНрдп рдЙрд╕реЗ рд╕реВрдЯ рдХрд░рддрд╛ рд╣реИ рдпрд╛ рдирд╣реАрдВ
  2. рдЯреАрдПрд╕рд╕реА рдореВрд▓реНрдпреЛрдВ рдХреЛ рдПрдХ рд╣реА рдпрд╛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реАрдкреАрдпреВ рд╡реГрджреНрдзрд┐ рдкрд░ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдорд╛рдкрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рд╡рд┐рдЪрд╛рд░ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдИ рд╕реАрдкреАрдпреВ рд╣реИрдВред рдорд╛рди рд▓реЗрдВ рдХрд┐ рдЙрдирдХреА рдШрдбрд╝реА рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рд╣реИ рдФрд░ рдПрдХ рд╣реА рдЖрд╡реГрддреНрддрд┐ рдкрд░ рдЯрд┐рдХ рд░рд╣реА рд╣реИред рдлрд┐рд░ рдпрджрд┐ рдЖрдк рдкрд╣рд▓реА рдмрд╛рд░ рдПрдХ рд╕реАрдкреАрдпреВ рдкрд░ рд╕рдордп рдХреЛ рдорд╛рдкрддреЗ рд╣реИрдВ, рдФрд░ рдлрд┐рд░ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдорд╛рдкрддреЗ рд╣реИрдВ - рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЙрдкрд▓рдмреНрдз рд╕реАрдкреАрдпреВ рдореЗрдВ рд╕реЗ - рддреЛ рджреВрд╕рд░рд╛ рдЕрдВрдХ рдкрд╣рд▓реЗ рд╕реЗ рдмрдбрд╝рд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

    рдореИрдВ рдЗрд╕ рдЕрдиреБрдорд╛рди рдХреЛ рдЯреАрдПрд╕рд╕реА рдПрдХрд░рд╕рддрд╛ рдЕрдиреБрдорд╛рди рд╕реЗ рдиреАрдЪреЗ рдХрд╣реВрдВрдЧрд╛

рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╣рдо рдкрд╣рд▓рд╛ рдЕрдиреБрдорд╛рди рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

  1. рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рдкреНрд░реЛрд╕реЗрд╕рд░ рдореЗрдВ рд╕реЗ рдПрдХ "рдмреБрдирд┐рдпрд╛рджреА" рдШреЛрд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ
  2. рддрдм рд╕рднреА рдЕрдиреНрдп рд╕реАрдкреАрдпреВ рдХреЛ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд▓рд┐рдП рдкрд╛рд░реА рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ: TSC___CPU тАУ TSC___CPU ред рдпрд╣ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
    • рдХ) рддреАрди рдорд╛рдкрд╛ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ!): TSC_base_1, TSC_current, TSC_base_2 ред рдпрд╣рд╛рдВ, рд╡рд░реНрддрдорд╛рди рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдореВрд▓реНрдп рд╡рд░реНрддрдорд╛рди рд╕реАрдкреАрдпреВ рдкрд░ рдорд╛рдкрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЖрдзрд╛рд░ рдкрд░ рдЖрдзрд╛рд░
    • b) рд╢рд┐рдлреНрдЯ TSC___CPU тАУ TSC___CPU рдЕрдВрддрд░рд╛рд▓ [TSC_current тАУ TSC_base_2, TSC_current тАУ TSC_base_1] рдореЗрдВ рдЭреВрда рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдЗрд╕ рдзрд╛рд░рдгрд╛ рдХреЗ рддрд╣рдд рд╣реИ рдХрд┐ TSCs рджреЛрдиреЛрдВ CPU рдкрд░ рд╕рдорд╛рди рдЖрд╡реГрддреНрддрд┐ рдкрд░ рдЯрд┐рдХ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
    • c) рдЪрд░рдг a) -b) рдХреЛ рдХрдИ рдмрд╛рд░ рджреЛрд╣рд░рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЪрд░рдг рдмреА рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╕рднреА рдЕрдВрддрд░рд╛рд▓реЛрдВ рдХреЗ рдЕрдВрддрд░ рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдкрд░рд┐рдгрд╛рдореА рдЕрдВрддрд░рд╛рд▓ рдХреЛ TSC___CPU тАУ TSC___CPU рд╢рд┐рдлреНрдЯ рдХреЗ рдЕрдиреБрдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

  3. рдЖрдзрд╛рд░ рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ рдкреНрд░рддреНрдпреЗрдХ рд╕реАрдкреАрдпреВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рд┐рдлреНрдЯ рдЕрдиреБрдорд╛рди рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рд╕рднреА рдЙрдкрд▓рдмреНрдз рд╕реАрдкреАрдпреВ рдХреЗ рдмреАрдЪ рдЕрдзрд┐рдХрддрдо рдмрджрд▓рд╛рд╡ рдХрд╛ рдЕрдиреБрдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ:
    • a) рдиреНрдпреВрдирддрдо рдЕрдВрддрд░рд╛рд▓ рдХреА рдЧрдгрдирд╛ рдХреА рдЬрд╛рддреА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЪрд░рдг 2 рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рд╕рднреА рдкрд░рд┐рдгрд╛рдореА рдЕрдВрддрд░рд╛рд▓ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ
    • рдЦ) рдЗрд╕ рдЕрдВрддрд░рд╛рд▓ рдХреА рдЪреМрдбрд╝рд╛рдИ рдХреЛ рдЕрд▓рдЧ-рдЕрд▓рдЧ рд╕реАрдкреАрдпреВ рдкрд░ рдЯрд┐рдХ рдЯреАрдПрд╕рд╕реА рдХреЗ рдмреАрдЪ рдЕрдзрд┐рдХрддрдо рдмрджрд▓рд╛рд╡ рдХреЗ рдЕрдиреБрдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ


рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдПрдХрд░рд╕рддрд╛ рдХрд╛ рдореВрд▓реНрдпрд╛рдВрдХрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЛ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

  1. рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдПрди рд╕реАрдкреАрдпреВ рдЙрдкрд▓рдмреНрдз рд╣реИ
  2. CPU1 рдкрд░ TSC рдХреЛ рдорд╛рдкрдирд╛
  3. рд╕реАрдкреАрд╕реА 2 рдкрд░ рдЯреАрдПрд╕рд╕реА рдХреЛ рдорд╛рдкрдиреЗ
  4. ...
  5. CPUN рдкрд░ TSC рдХреЛ рдорд╛рдкрдирд╛
  6. рд╕реАрдкреАрд╕реА 1 рдкрд░ рдлрд┐рд░ рд╕реЗ рдЯреАрдПрд╕рд╕реА рдХреЛ рдорд╛рдкреЗрдВ
  7. рд╣рдо рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдкрд╣рд▓реЗ рд╕реЗ рдЖрдЦрд┐рд░реА рддрдХ рдорд╛рдкреЗ рдЧрдП рдорд╛рди рдПрдХ-рджреВрд╕рд░реЗ рд╕реЗ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдмрдврд╝реЗ рд╣реИрдВ

рдпрд╣рд╛рдВ рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдкрд╣рд▓рд╛ рдФрд░ рдЕрдВрддрд┐рдо рдорд╛рди рдПрдХ рд╣реА рд╕реАрдкреАрдпреВ рдкрд░ рдорд╛рдкрд╛ рдЬрд╛рдПред рдФрд░ рдпрд╣рд╛рдБ рдХреНрдпреЛрдВ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 3 рд╕реАрдкреАрдпреВ рд╣реИрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ CPU2 рдкрд░ TSC рдХреЛ CPU1 рдкрд░ TSC рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ +100 рдЯрд┐рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рднреА рдорд╛рди рд▓реЗрдВ рдХрд┐ CPU3 рдкрд░ TSC рдХреЛ CPU2 рдкрд░ TSC рдХреЗ рд╕рд╛рдкреЗрдХреНрд╖ +100 рдЯрд┐рдХреНрд╕ рджреНрд╡рд╛рд░рд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдШрдЯрдирд╛рдУрдВ рдХреА рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

  • рд╕реАрдкреАрд╕реА 1 рдкрд░ рдЯреАрдПрд╕рд╕реА рдкрдврд╝реЗрдВред рдорд╛рди 10 рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ
  • 2 рдЯрд┐рдХ рдЧрдП
  • рд╕реАрдкреАрд╕реА 2 рдкрд░ рдЯреАрдПрд╕рд╕реА рдкрдврд╝реЗрдВред 112 рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП
  • 2 рдЯрд┐рдХ рдЧрдП
  • рд╕реАрдкреАрд╕реА 3 рдкрд░ рдЯреАрдПрд╕рд╕реА рдкрдврд╝реЗрдВред 214 рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

рдЕрдм рддрдХ, рдШрдбрд╝реА рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рджрд┐рдЦрд╛рдИ рджреЗрддреА рд╣реИред рд▓реЗрдХрд┐рди рдЪрд▓реЛ рдлрд┐рд░ рд╕реЗ CPU1 рдкрд░ TSC рдХреЛ рдорд╛рдкреЗрдВ:

  • 2 рдЯрд┐рдХ рдЧрдП
  • рд╕реАрдкреАрд╕реА 1 рдкрд░ рдЯреАрдПрд╕рд╕реА рдкрдврд╝реЗрдВред 16 рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП

рдУрдкрд╛! рдПрдХрд░рд╕рддрд╛ рдЯреВрдЯ рдЧрдИ рд╣реИред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдПрдХ рд╣реА рд╕реАрдкреАрдпреВ рдкрд░ рдкрд╣рд▓реЗ рдФрд░ рдЖрдЦрд┐рд░реА рдореВрд▓реНрдпреЛрдВ рдХреЛ рдорд╛рдкрдиреЗ рд╕реЗ рдЖрдк рдШрдбрд╝рд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рдмрдбрд╝реА рдмрджрд▓рд╛рд╡реЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдЧрд▓рд╛ рд╕рд╡рд╛рд▓, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ: "рдмрджрд▓рд╛рд╡ рдХрд┐рддрдиреА рдмрдбрд╝реА рд╣реИрдВ?" рд╢рд┐рдлреНрдЯ рдХреА рдорд╛рддреНрд░рд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╣ рдЙрд╕ рд╕рдордп рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рд▓рдЧрд╛рддрд╛рд░ рдЯреАрдПрд╕рд╕реА рдорд╛рдк рдХреЗ рдмреАрдЪ рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИред рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпреЗ рдХреЗрд╡рд▓ 2 рдЯрд┐рдХ рд╣реИрдВред 2 рдЯрд┐рдХреЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рдШрдВрдЯреЗ рдХреЗ рдмреАрдЪ рдХреА рд╢рд┐рдлреНрдЯ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рдХреНрд░рдорд┐рдХ рдорд╛рдкреЛрдВ рдХреЗ рдмреАрдЪ рдмреАрддреЗ рд╕рдордп рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдХрдо рдмрджрд▓рд╛рд╡реЛрдВ рдХрд╛ рдкрддрд╛ рдирд╣реАрдВ рд▓рдЧрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рддреЛ, рдШрдиреЗ рдорд╛рдк рд╕рдордп рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИрдВ, рдмреЗрд╣рддрд░ рд╣реИред рджреЛрдиреЛрдВ рдЕрдиреБрдорд╛рдиреЛрдВ рдХреА рд╕рдЯреАрдХрддрд╛ рдЗрд╕ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддреА рд╣реИред рд╕рдШрдирддрд╛ рдорд╛рдкреА рдЬрд╛рддреА рд╣реИ:

  • рдЕрдзрд┐рдХрддрдо рдмрджрд▓рд╛рд╡ рдХрд╛ рдЕрдиреБрдорд╛рди рдХрдо рд╣реИ
  • рдПрдХрд░рд╕рддрд╛ рдХреЗ рдореВрд▓реНрдпрд╛рдВрдХрди рдореЗрдВ рдЕрдзрд┐рдХ рд╡рд┐рд╢реНрд╡рд╛рд╕

рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ, рд╣рдо рддрдВрдЧ рдорд╛рдк рд▓реЗрдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реЗрдВрдЧреЗред рдореИрдВ рдпрд╣рд╛рдБ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣реВрдБрдЧрд╛ рдХрд┐ TSC рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдЕрдиреБрдорд╛рдиреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╕рдордп, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХрдИ рдФрд░ рд╕рд░рд▓ "рдЬреВрдБ" рдЪреЗрдХ рдХрд░рддрд╛ рд╣реИ:

  • рд╕реАрдорд┐рдд рд╕рддреНрдпрд╛рдкрди рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рд╕реАрдкреАрдпреВ рдкрд░ рдЯреАрдПрд╕рд╕реА рдПрдХ рд╣реА рдЧрддрд┐ рд╕реЗ рдЯрд┐рдХ рдХрд░ рд░рд╣реЗ рд╣реИрдВ
  • рдпрд╣ рдЬрд╛рдВрдЪрдирд╛ рдХрд┐ рдХрд╛рдЙрдВрдЯрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдордп рдХреЗ рд╕рд╛рде рдмрджрд▓рддреЗ рд╣реИрдВ, рдФрд░ рди рдХреЗрд╡рд▓ рд╕рдорд╛рди рдореВрд▓реНрдп рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ

рдХрд╛рдЙрдВрдЯрд░ рдорд╛рди рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рддрд░реАрдХреЗ


рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ, рдореИрдВрдиреЗ рдЯреАрдПрд╕рд╕реА рдореВрд▓реНрдпреЛрдВ рдХреЛ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рддрд░реАрдХреЗ рд▓рд╛рдЧреВ рдХрд┐рдП:

  1. рд╕реАрдкреАрдпреВ рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ ред рдЗрд╕ рдкрджреНрдзрддрд┐ рдореЗрдВ, рдЯреАрдПрд╕рд╕реА рдХреА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдХрд╛ рдЖрдХрд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рдПрдХрд▓ рдереНрд░реЗрдб рджреНрд╡рд╛рд░рд╛ рдПрдХрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рд╕реАрдкреАрдпреВ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ "рдХреВрджрддрд╛ рд╣реИ"ред рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рджреЛрдиреЛрдВ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИрдВ рдФрд░ рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИрдВред
    "рд╕реАрдкреАрдпреВ рдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛" рдХрд╛ рдХреЛрдИ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рд╣реИред рд╡рд┐рдзрд┐ "рдЪрд╛рд░реЛрдВ рдУрд░ рдЦреЗрд▓" рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХреА рдЧрдИ рдереАред рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рд╕реАрдкреАрдпреВ рд╕реЗ рджреВрд╕рд░реЗ рдореЗрдВ рдПрдХ рдзрд╛рд░рд╛ рдХреЛ "рдЦреАрдВрдЪреЗрдВ" рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рдордп рдмрд╣реБрдд рдмрдбрд╝рд╛ рд╣реИред рддрджрдиреБрд╕рд╛рд░, рд▓рдЧрд╛рддрд╛рд░ рдЯреАрдПрд╕рд╕реА рдорд╛рдк рдХреЗ рдмреАрдЪ рдмрд╣реБрдд рд╕рдордп рдЧреБрдЬрд░рддрд╛ рд╣реИ, рдФрд░ рдЕрдиреБрдорд╛рдиреЛрдВ рдХреА рд╕рдЯреАрдХрддрд╛ рдмрд╣реБрдд рдХрдо рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЯреАрдПрд╕рд╕реА рдХреЗ рдмреАрдЪ рдЕрдзрд┐рдХрддрдо рдмрджрд▓рд╛рд╡ рдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдиреБрдорд╛рди 23,000 рдЯрд┐рдХ рдХреЗ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

    рд╣рд╛рд▓рд╛рдБрдХрд┐, рд╡рд┐рдзрд┐ рдХреЗ рдХреБрдЫ рдлрд╛рдпрджреЗ рд╣реИрдВ:
    • рдпрд╣ рдмрд┐рд▓реНрдХреБрд▓ рдирд┐рд░реНрдзрд╛рд░рдХ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЛ CPU1, CPU2, CPU3 рдкрд░ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ TSC рдХреЛ рдорд╛рдкрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЗрд╕реЗ рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ: CPU1 рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░реЗрдВ, TSC рдкрдврд╝реЗрдВ, CPU2 рдкрд░ рдЬрд╛рдПрдБ, TSC рдкрдврд╝реЗрдВ, рдФрд░ рдЕрдВрдд рдореЗрдВ, CPU3 рдкрд░ рдЬрд╛рдПрдБ, TSC рдкрдврд╝реЗрдВ
    • рд╕рдВрднрд╡рддрдГ, рдпрджрд┐ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рд╕реАрдкреАрдпреВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рдмрдврд╝рддреА рд╣реИ, рддреЛ рдЙрдирдХреЗ рдмреАрдЪ рд╕реНрд╡рд┐рдЪрд┐рдВрдЧ рд╕рдордп рдмрд╣реБрдд рдЕрдзрд┐рдХ рдзреАрд░реЗ-рдзреАрд░реЗ рдмрдврд╝рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЗрд╕рд▓рд┐рдП, рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рдПрдХ рдкреНрд░рдгрд╛рд▓реА рдореМрдЬреВрдж рд╣реЛ рд╕рдХрддреА рд╣реИ - рдПрдХ рдмрд╣реБрдд рдмрдбрд╝реА рдкреНрд░рдгрд╛рд▓реА! - рдЬрд┐рд╕рдореЗрдВ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрдЪрд┐рдд рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ

  2. рдХреИрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдорд╛рдк рдХрд╛ рдЖрджреЗрд╢ рджрд┐рдпрд╛ рдЧрдпрд╛ ред рдЗрд╕ рдкрджреНрдзрддрд┐ рдореЗрдВ, рдбреЗрдЯрд╛ рдХреЛ рдХрдИ рдереНрд░реЗрдб рджреНрд╡рд╛рд░рд╛ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдПрдХрддреНрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рдЙрдкрд▓рдмреНрдз рд╕реАрдкреАрдпреВ рдПрдХ рдзрд╛рдЧрд╛ рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИред рд╡рд┐рднрд┐рдиреНрди рдереНрд░реЗрдбреНрд╕ рджреНрд╡рд╛рд░рд╛ рдХрд┐рдП рдЧрдП рдорд╛рдкреЛрдВ рдХреЛ "рддреБрд▓рдирд╛-рдФрд░-рд╕реНрд╡реИрдк" рдСрдкрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╣реА рдХреНрд░рдо рдореЗрдВ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдиреАрдЪреЗ рдПрдХ рдХреЛрдб рд╣реИ рдЬреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
    рд╡рд┐рдзрд┐ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдлрд┐рдпреЛ рд╕реЗ рдЙрдзрд╛рд░ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, I / O рднрд╛рд░ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд▓реЛрдХрдкреНрд░рд┐рдп рдЙрдкрдХрд░рдгред

    рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреА рд╢рдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдХрд╛ рдЕрдиреБрдорд╛рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдлреА рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдзрд┐рдХрддрдо рдмрджрд▓рд╛рд╡ рдХрд╛ рдПрдХ рдЕрдиреБрдорд╛рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрдИ рд╕реМ рдЯрд┐рдХреНрд╕ рдХреЗ рд╕реНрддрд░ рдкрд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдПрдХрд░рд╕рддрд╛ рдХрд╛ рдПрдХ рдЪреЗрдХ рдЖрдкрдХреЛ рд╕реИрдХрдбрд╝реЛрдВ рдЯрд┐рдХ рдХреЗ рднреАрддрд░ рд╕рд┐рдВрдХ рд╕реЗ рдШрдбрд╝реА рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

    рд╣рд╛рд▓рд╛рдВрдХрд┐, рдкрд┐рдЫрд▓реЗ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рджрд┐рдП рдЧрдП рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рдирд╣реАрдВ рд╣реИрдВред рдЙрдирдХреЗ рд▓рд┐рдП рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ TSC рдорд╛рдиреЛрдВ рдХреЛ рдкреВрд░реНрд╡ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХреНрд░рдо рдореЗрдВ рдорд╛рдкрд╛ рдЬрд╛рдПред тАЬCAS рджреНрд╡рд╛рд░рд╛ рдЖрджреЗрд╢рд┐рдд рдорд╛рдктАЭ рдХреА рд╡рд┐рдзрд┐ рдЗрд╕рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рджреЗрддреА рд╣реИред рдЗрд╕рдХреЗ рдмрдЬрд╛рдп, рдкрд╣рд▓реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдорд╛рдк рдХрд╛ рдПрдХ рд▓рдВрдмрд╛ рдЕрдиреБрдХреНрд░рдо рдПрдХрддреНрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдПрд▓реНрдЧреЛрд░рд┐рджрдо (рдкрд╣рд▓реЗ рд╕реЗ рдЕрд▓рдЧ) рдЗрд╕ рдХреНрд░рдо рдореЗрдВ "рдЙрдкрдпреБрдХреНрдд" рд╕реАрдкреАрдпреВ рдкрд░ рдкрдврд╝реЗ рдЧрдП рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред

    рдореИрдВ рдЗрди рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЛ рдпрд╣рд╛рдВ рдирд╣реАрдВ рджреВрдВрдЧрд╛, рддрд╛рдХрд┐ рдЖрдкрдХреЗ рдзреНрдпрд╛рди рдХрд╛ рджреБрд░реБрдкрдпреЛрдЧ рди рд╣реЛред рдЖрдк рдЙрдиреНрд╣реЗрдВ рдХреЛрдб рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдХрдИ рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ рд╣реИрдВред рд╕рд┐рджреНрдзрд╛рдВрдд рд░реВрдк рдореЗрдВ, рдпреЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╕рдорд╛рди рд╣реИрдВред рдореМрд▓рд┐рдХ рд░реВрдк рд╕реЗ рдирдП рдмрд┐рдВрджреБ рдХрд╛ рд╕рддреНрдпрд╛рдкрди рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд░реВрдк рд╕реЗ рдЯрд╛рдЗрдк рдХрд┐рдП рдЧрдП TSC рдХреНрд░рдо рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд░реВрдк рд╕реЗ "рдЧреБрдгрд╛рддреНрдордХ" рд╣реЛрддреЗ рд╣реИрдВред рдЯреАрдПрд╕рд╕реА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдЕрдиреБрдорд╛рдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдорд╣рддреНрд╡ рдХрд╛ рдиреНрдпреВрдирддрдо рд╕реНрд╡реАрдХрд╛рд░реНрдп рд╕реНрддрд░ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рднреА рд╕рдВрднрд╡ рд╣реИред

    рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рдмрд╣реБрдд рдмрдбрд╝реЗ рд╕рд┐рд╕реНрдЯрдо рдкрд░, "рдХреИрд╕ рдСрд░реНрдбрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛" рд╡рд┐рдзрд┐ рдЦрд░рд╛рдм рдкрд░рд┐рдгрд╛рдо рджреЗ рд╕рдХрддреА рд╣реИред рд╡рд┐рдзрд┐ рдХреЛ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рдореЗрдореЛрд░реА рд▓реЛрдХреЗрд╢рди рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрджрд┐ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреНрд░реЛрд╕реЗрд╕рд░ рд╣реИрдВ, рддреЛ рдкреНрд░рддрд┐рдпреЛрдЧрд┐рддрд╛ рдмрд╣реБрдд рддреАрд╡реНрд░ рд╣реЛ рд╕рдХрддреА рд╣реИред рдирддреАрдЬрддрди, рдЕрдЪреНрдЫреЗ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рдЧреБрдгреЛрдВ рдХреЗ рд╕рд╛рде рдорд╛рдк рдЕрдиреБрдХреНрд░рдо рдмрдирд╛рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдлрд┐рд▓рд╣рд╛рд▓, рдпрд╣ рд╕реНрдерд┐рддрд┐ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИред

рдореИрдВрдиреЗ рдХреБрдЫ рдХреЛрдб рдХрд╛ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдерд╛ред рдпрд╣рд╛рдВ рдмрддрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдХреИрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХрд▓ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ рдорд╛рдк рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рдирд╛ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред

  for ( uint64_t i = 0; i < arg->probes_count; i++ ) { uint64_t seq_num = 0; uint64_t tsc_val = 0; do { __atomic_load( seq_counter, &seq_num, __ATOMIC_ACQUIRE); __sync_synchronize(); tsc_val = WTMLIB_GET_TSC(); } while ( !__atomic_compare_exchange_n( seq_counter, &seq_num, seq_num + 1, false, __ATOMIC_ACQ_REL, __ATOMIC_RELAXED)); arg->tsc_probes[i].seq_num = seq_num; arg->tsc_probes[i].tsc_val = tsc_val; } 

рдпрд╣ рдХреЛрдб рд╣рд░ рдЙрдкрд▓рдмреНрдз рд╕реАрдкреАрдпреВ рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╕рднреА рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рд╕рд╛рдЭрд╛ рдЪрд░ seq_counter ред рдЯреАрдПрд╕рд╕реА рдкрдврд╝рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдзрд╛рд░рд╛ рдЗрд╕ рдЪрд░ рдХрд╛ рдореВрд▓реНрдп рдкрдврд╝рддреА рд╣реИ рдФрд░ рдЗрд╕реЗ рдЪрд░ seq_num рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд seq_num ред рдлрд┐рд░ TSC рдкрдврд╝рддрд╛ рд╣реИред рдлрд┐рд░ рдпрд╣ рдПрдХ-рдПрдХ рдХрд░рдХреЗ seq_counter рдХреЛ рдкрд░рдорд╛рдгреБ рд░реВрдк рд╕реЗ рдмрдврд╝рд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рддрдм рд╣реА рдЬрдм рдЪрд░ рдХреЛ рдкрдврд╝рд╛ рдирд╣реАрдВ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рдСрдкрд░реЗрд╢рди рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рдереНрд░реЗрдб рдорд╛рдкрд╛ TSC рдорд╛рди рдХреЗ рдкреАрдЫреЗ seq_num рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдЕрдиреБрдХреНрд░рдо рд╕рдВрдЦреНрдпрд╛ "рджрд╛рдВрд╡" рдореЗрдВ seq_num рд░рд╣рд╛ред рдЕрдЧрд▓рд╛ рд╕реАрд░рд┐рдпрд▓ рдирдВрдмрд░, рдЬреЛ рдХрд┐ рд╣рд┐рд╕реНрд╕реЗрджрд╛рд░реА рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдЧрд╛ (рд╕рдВрднрд╡рддрдГ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рджреВрд╕рд░реЗ рдзрд╛рдЧреЗ рдореЗрдВ) рдПрдХ рдФрд░ рд╣реЛрдЧрд╛ред рдЗрд╕ рдирдВрдмрд░ рдХреЗ рд▓рд┐рдП seq_counter рд╡реИрд░рд┐рдПрдмрд▓ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ __atomic_compare_exchange_n() рдкреНрд░рддреНрдпреЗрдХ рд╕рдлрд▓ рдХреЙрд▓ рд╕реЗ рдЗрд╕ рд╡реИрд░рд┐рдПрдмрд▓ рдореЗрдВ рдПрдХ рд╡реГрджреНрдзрд┐ рд╣реЛрддреА рд╣реИред

__atync __sync рдХреЗ рд╕рд╛рде ???
__atomic , рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЕрдкреНрд░рдЪрд▓рд┐рдд __sync рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рд╛рде-рд╕рд╛рде __atomic рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрджрд╕реВрд░рдд рд▓рдЧрддрд╛ рд╣реИред __sync_synchronize() рдХреЛрдб рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рддрд╛рдХрд┐ рдЕрдкрд╕реНрдЯреНрд░реАрдо рдСрдкрд░реЗрд╢рди рдХреЗ рд╕рд╛рде TSC рд░реАрдб рдСрдкрд░реЗрд╢рди рдХреЛ __sync_synchronize() рдХрд░рдиреЗ рд╕реЗ рдмрдЪрд╛ рдЬрд╛ рд╕рдХреЗред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╕рдВрдкреВрд░реНрдг рдореЗрдореЛрд░реА рдмреИрд░рд┐рдпрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдФрдкрдЪрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ __atomic рдкрд░рд┐рд╡рд╛рд░ рдХреЗ рдкрд╛рд╕ рд╕рдВрдЧрдд рдЧреБрдгреЛрдВ рд╡рд╛рд▓рд╛ рдлрд╝рдВрдХреНрд╢рди рдирд╣реАрдВ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╣реИ: __atomic_signal_fence() ред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╕рд┐рдЧреНрдирд▓ рд╣реИрдВрдбрд▓рд░ рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░реАрдо рдЧрдгрдирд╛ рдХрд╛ рдЖрдпреЛрдЬрди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдХ рд╣реА рд╕реНрдЯреНрд░реАрдо рдкрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддрд╛ рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рдПрдХ рдкреВрд░реНрдг рдЕрд╡рд░реЛрдз рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдирд╣реАрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИред рдФрд░ рдореИрдВ рдЙрд╕ рдХреЛрдб рдХреЛ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рдЬрд┐рд╕рдореЗрдВ рдЫрд┐рдкрд╛ рд╢рдмреНрджрд╛рд░реНрде рдирд╣реАрдВ рд╣реИред рдЗрд╕рд▓рд┐рдП __sync_synchronize() рдПрдХ рд╕реНрдЯреЙрдк-рдлреБрд▓ рдореЗрдореЛрд░реА рдмреИрд░рд┐рдпрд░ рд╣реИред

рдпрд╣рд╛рдВ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдПрдХ рдФрд░ рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдорд╛рдк рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╕рднреА рдкреНрд░рд╡рд╛рд╣ рдПрдХ рд╕рд╛рде рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВред рд╣рдо рдЗрд╕ рддрдереНрдп рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддреЗ рд╣реИрдВ рдХрд┐ рд╡рд┐рднрд┐рдиреНрди рд╕реАрдкреАрдпреВ рдкрд░ рдкрдврд╝реЗ рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЯреАрдПрд╕рд╕реА рдореВрд▓реНрдп рдпрдерд╛рд╕рдВрднрд╡ рдорд┐рд╢реНрд░рд┐рдд рд╣реИрдВред рд╣рдо рдЙрд╕ рд╕реНрдерд┐рддрд┐ рд╕реЗ рд╕рдВрддреБрд╖реНрдЯ рдирд╣реАрдВ рд╣реИрдВ рдЬрдм, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдзрд╛рдЧрд╛ рдкрд╣рд▓реЗ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИ, рдЕрдкрдирд╛ рдХрд╛рдо рдкреВрд░рд╛ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЙрд╕рдХреЗ рдмрд╛рдж рд╣реА рдЕрдиреНрдп рд╕рднреА рд╢реБрд░реВ рд╣реЛрддреЗ рд╣реИрдВред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдЯреАрдПрд╕рд╕реА рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рдмреЗрдХрд╛рд░ рдЧреБрдг рд╣реЛрдВрдЧреЗред рдЗрд╕рд╕реЗ рдХреЛрдИ рдЕрдиреБрдорд╛рди рдирд╣реАрдВ рд▓рдЧрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╕рднреА рдереНрд░реЗрдбреНрд╕ рдХреА рдПрдХ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ - рдФрд░ рдЗрд╕рдХреЗ рд▓рд┐рдП, рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдЙрдкрд╛рдп рдХрд┐рдП рдЧрдП рд╣реИрдВред

рдордХреНрдЦреА рдкрд░ рдЯрд┐рдХреЛ рдХреЛ рдиреИрдиреЛрд╕реЗрдХрдВрдб рдореЗрдВ рдмрджрд▓реЗрдВ


рдЯреАрдПрд╕рд╕реА рдХреА рд╡рд┐рд╢реНрд╡рд╕рдиреАрдпрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рджреВрд╕рд░рд╛ рдкреНрд░рдореБрдЦ рдЙрджреНрджреЗрд╢реНрдп рдЯрд┐рдХреЛрдВ рдХреЛ рдордХреНрдЦреА рдкрд░ рдиреИрдиреЛрд╕реЗрдХрдВрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕ рд░реВрдкрд╛рдВрддрд░рдг рдХрд╛ рд╡рд┐рдЪрд╛рд░ рдкрд╣рд▓реЗ рд╕реЗ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдП рдЧрдП рдлрд┐рдпреЛ рд╕реЗ рд▓рд┐рдпрд╛ рдерд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдореБрдЭреЗ рдХреБрдЫ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдкрдбрд╝реЗ, рдХреНрдпреЛрдВрдХрд┐ рдЬреИрд╕рд╛ рдХрд┐ рдореЗрд░реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ, рдлрд┐рдпреЛ рдореЗрдВ рд╣реА рд░реВрдкрд╛рдВрддрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреА рд╣реИред рд╡рд╣рд╛рдВ рдЖрдкрдХреЛ рдХрдо рд╕рдЯреАрдХрддрд╛ рдорд┐рд▓рддреА рд╣реИред

рдореИрдВ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рд╛рде рд╢реБрд░реБрдЖрдд рдХрд░реВрдВрдЧрд╛ред

рдЖрджрд░реНрд╢ рд░реВрдк рдореЗрдВ, рдореИрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдиреИрдиреЛ рд╕реЗрдХреЗрдВрдб рдореЗрдВ рдЯрд┐рдХ рдмрджрд▓рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛:
ns_time = tsc_ticks / tsc_per_ns
рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рд░реВрдкрд╛рдВрддрд░рдг рдкрд░ рдЦрд░реНрдЪ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рд╕рдордп рдХрдо рд╕реЗ рдХрдо рд╣реЛред рдЗрд╕рд▓рд┐рдП, рд╣рдо рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдкреВрд░реНрдгрд╛рдВрдХ рдЕрдВрдХрдЧрдгрд┐рдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд▓рдХреНрд╖реНрдп рд░рдЦрддреЗ рд╣реИрдВред рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рд╣рдореЗрдВ рдХрд┐рд╕ рддрд░рд╣ рд╕реЗ рдЦрддрд░реЗ рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддрд╛ рд╣реИред

рдпрджрд┐ tsc_per_ns = 3 , рддреЛ рд╕рдЯреАрдХрддрд╛ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкреВрд░реНрдгрд╛рдВрдХ рд╡рд┐рднрд╛рдЬрди, рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: ns_time = tsc_ticks / 3 ред

рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдЕрдЧрд░ tsc_per_ns = 3.333 ?рдпрджрд┐ рдпрд╣ рд╕рдВрдЦреНрдпрд╛ 3 рд╕реЗ рдЧреЛрд▓ рд╣реИ, рддреЛ рд░реВрдкрд╛рдВрддрд░рдг рд╕рдЯреАрдХрддрд╛ рдмрд╣реБрдд рдХрдо рд╣реЛрдЧреАред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП:
ns_time = (tsc_ticks * factor) / (3.333 * factor)ред

рдпрджрд┐ рдХрд╛рд░рдХ factorрдкрд░реНрдпрд╛рдкреНрдд рдмрдбрд╝рд╛ рд╣реИ, рддреЛ рд╕рдЯреАрдХрддрд╛ рдЕрдЪреНрдЫреА рд╣реЛрдЧреАред рд▓реЗрдХрд┐рди рдХреБрдЫ рдмреБрд░рд╛ рд░рд╣реЗрдЧрд╛ред рдЕрд░реНрдерд╛рддреН, рдУрд╡рд░рд╣реЗрдб рд░реВрдкрд╛рдВрддрд░рдгред рдЗрдВрдЯреАрдЬрд░ рдбрд┐рд╡реАрдЬрди рдмрд╣реБрдд рдорд╣рдВрдЧрд╛ рдСрдкрд░реЗрд╢рди рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, x86 рдкрд░ рдЗрд╕реЗ 10+ рдШрдбрд╝реА рдЪрдХреНрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдкреВрд░реНрдгрд╛рдВрдХ рд╡рд┐рднрд╛рдЬрди рд╕рдВрдЪрд╛рд▓рди рд╣рдореЗрд╢рд╛ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╣рдо рдмрд░рд╛рдмрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдорд╛рд░реЗ рд╕реВрддреНрд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ
ns_time = (tsc_ticks * factor / 3.333) / factorред

рдкрд╣рд▓рд╛ рд╡рд┐рднрд╛рдЬрди рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (factor / 3.333)ред рд▓реЗрдХрд┐рди рджреВрд╕рд░рд╛ рд╡рд┐рднрд╛рдЬрди рдЕрднреА рднреА рджрд░реНрдж рд╣реИред рдЙрд╕рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдЪреБрдирддреЗ рд╣реИрдВfactorрджреЛ рдХреА рд╢рдХреНрддрд┐ рдХреЗ рдмрд░рд╛рдмрд░ред рдЙрд╕рдХреЗ рдмрд╛рдж, рдПрдХ рд╕рд░рд▓ рдФрд░ рддреЗрдЬ рдСрдкрд░реЗрд╢рди - рджреВрд╕рд░реЗ рдбрд┐рд╡реАрдЬрди рдХреЛ рдереЛрдбрд╝рд╛ рдмрджрд▓рд╛рд╡ рд╕реЗ рдмрджрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдЖрдк рдХрд┐рддрдирд╛ рдмрдбрд╝рд╛ рдЪреБрди рд╕рдХрддреЗ рд╣реИрдВ factor? рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, factorрдпрд╣ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдмрдбрд╝рд╛ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ред рдпрд╣ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рд╕реЗ рд╕реАрдорд┐рдд рд╣реИ рдХрд┐ рдЕрдВрд╢ рдореЗрдВ рдЧреБрдгрд╛ 64-рдмрд┐рдЯ рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрддрд┐рдкреНрд░рд╡рд╛рд╣ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рд╣рд╛рдВ, рд╣рдо рдХреЗрд╡рд▓ "рджреЗрд╢реА" рдкреНрд░рдХрд╛рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдлрд┐рд░ рд╕реЗ, рд░реВрдкрд╛рдВрддрд░рдг рдУрд╡рд░рд╣реЗрдбреНрд╕ рдХреЛ рдиреНрдпреВрдирддрдо рд░рдЦрдиреЗ рдХреЗ рд▓рд┐рдПред

рдЕрдм рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ factorрд╣рдорд╛рд░реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдХрд┐рддрдирд╛ рдмрдбрд╝рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ ред рдорд╛рди рд▓реАрдЬрд┐рдП рд╣рдо рдПрдХ рд╡рд░реНрд╖ рддрдХ рдХреЗ рд╕рдордп рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╡рд░реНрд╖ рдХреЗ рджреМрд░рд╛рди рдЯреАрдПрд╕рд╕реА рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╕рдордп tiknet: 3.333 * 1000000000 * 60 * 60 * 24 * 365 = 105109488000000000ред рд╡рд┐рднрд╛рдЬрд┐рдд 64-рдмрд┐рдЯ рдкреНрд░рдХрд╛рд░ рд╕рдВрдЦреНрдпрд╛ рдХреА рдПрдХ рдЕрдзрд┐рдХрддрдо рдореВрд▓реНрдп рд╣реИ: 18446744073709551615 / 105109488000000000 ~ 175.5ред рддреЛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐(factor / 3.333)рдЗрд╕ рдорд╛рди рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рддреЛ рдлрд┐рд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ factor <= 175.5 * 3.333 ~ 584.9ред рджреЛ рдХреА рд╕рдмрд╕реЗ рдмрдбрд╝реА рд╢рдХреНрддрд┐ рдЬреЛ рдЗрд╕ рд╕рдВрдЦреНрдпрд╛ рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реИ 512 рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рд░реВрдкрд╛рдВрддрд░рдг рд╕реВрддреНрд░ рдХрд╛ рд░реВрдк рд▓реЗрддрд╛ рд╣реИ:

ns_time = (tsc_ticks * 512 / 3.333) / 512

рдпрд╛:

ns_time = tsc_ticks * 153 / 512

рдареАрдХ рд╣реИред рдЖрдЗрдП рдЕрдм рджреЗрдЦреЗрдВ рдХрд┐ рдЗрд╕ рд╕реВрддреНрд░ рдореЗрдВ рд╕рдЯреАрдХрддрд╛ рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рд╣реИред рдПрдХ рд╡рд░реНрд╖ рдореЗрдВ 1000000000 * 60 * 60 * 24 * 365 = 31536000000000000рдиреИрдиреЛрд╕реЗрдХрдВрдб рд╣реЛрддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рд╕реВрддреНрд░ рджреЗрддрд╛ рд╣реИ: 105109488000000000 * 153 / 512 = 31409671218750000ред рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдЕрдВрддрд░ 126328781250000 рдиреИрдиреЛрд╕реЗрдХрдВрдб рдпрд╛ 126328781250000 / 1000000000 / 60 / 60 ~ 35рдШрдВрдЯреЗ рд╣реИред

рдпрд╣ рдПрдХ рдмрдбрд╝реА рдЧрд▓рддреА рд╣реИред рд╣рдо рдмреЗрд╣рддрд░ рд╕рдЯреАрдХрддрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдо рдПрдХ рдШрдВрдЯреЗ рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рдХреЗ рдЕрдВрддрд░рд╛рд▓ рдХреЛ рдорд╛рдкреЗрдВ? рдореИрдВ рдЧрдгрдирд╛рдУрдВ рдХреЛ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ред рд╡реЗ рд╕рд┐рд░реНрдл рдХрд┐рдП рдЧрдП рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд╛рди рд╣реИрдВред рдЕрдВрддрд┐рдо рд╕реВрддреНрд░ рд╣реЛрдЧрд╛:

ns_time = tsc_ticks * 1258417 / 4194304(1)

рд░реВрдкрд╛рдВрддрд░рдг рддреНрд░реБрдЯрд┐ рдкреНрд░рддрд┐ рдШрдВрдЯреЗ рдХреЗрд╡рд▓ 119,305 рдиреИрдиреЛрд╕реЗрдХрдВрдб (рдЬреЛ 0.2 рдорд┐рд▓реАрд╕реЗрдХрдВрдб рд╕реЗ рдХрдо рд╣реИ) рд╣реЛрдЧреАред рдмрд╣реБрдд, рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ред рдпрджрд┐ рдЕрдзрд┐рдХрддрдо рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдореВрд▓реНрдп рдПрдХ рдШрдВрдЯреЗ рд╕реЗ рднреА рдХрдо рд╣реИ, рддреЛ рд╕рдЯреАрдХрддрд╛ рднреА рдмреЗрд╣рддрд░ рд╣реЛрдЧреАред рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ? рд╕рдордп рдорд╛рдк рдХреЛ рдПрдХ рдШрдВрдЯреЗ рддрдХ рд╕реАрдорд┐рдд рди рдХрд░реЗрдВ?

рдЖрдЗрдП рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреНрд╖рдг рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ:

tsc_ticks = (tsc_ticks_per_1_hour * number_of_hours) + tsc_ticks_remainder

рдпрджрд┐ рд╣рдо рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ tsc_ticks_per_1_hour, рддреЛ рд╣рдо рдЗрд╕рдореЗрдВ number_of_hoursрд╕реЗ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ tsc_ticksред рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рдШрдВрдЯреЗ рдореЗрдВ рдХрд┐рддрдиреЗ рдиреИрдиреЛрд╕реЗрдХрдВрдб рдирд┐рд╣рд┐рдд рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдиреИрдиреЛрд╕реЗрдХрдВрдб рдореЗрдВ рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛ tsc_ticksрдЬреЛ рдкреВрд░реЗ рдШрдВрдЯреЗ рдХреЗ рд▓рд┐рдП рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рд░реВрдкрд╛рдВрддрд░рдг рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдиреИрдиреЛрд╕реЗрдХрдВрдб рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рд╣реЛрдЧрд╛tsc_ticks_remainderред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╕рдВрдЦреНрдпрд╛ рдПрдХ рдШрдВрдЯреЗ рд╕реЗ рднреА рдХрдо рд╕рдордп рдореЗрдВ рдЖрдИред рддреЛ, рдЗрд╕реЗ рдиреИрдиреЛрд╕реЗрдХрдВрдб рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╕реВрддреНрд░ (1) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╣реЛ рдЧрдпрд╛ред рдРрд╕рд╛ рд░реВрдкрд╛рдВрддрд░рдг рддрдВрддреНрд░ рд╣рдореЗрдВ рд╕реВрдЯ рдХрд░рддрд╛ рд╣реИред рдЖрдЗрдП рдЕрдм рдЗрд╕реЗ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдФрд░ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рд░реВрдкрд╛рдВрддрд░рдг рддреНрд░реБрдЯрд┐рдпреЛрдВ рдкрд░ рд▓рдЪреАрд▓рд╛ рдирд┐рдпрдВрддреНрд░рдг рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдо рд░реВрдкрд╛рдВрддрд░рдг рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ 1 рдШрдВрдЯреЗ рдХреЗ рд╕рдордп рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ рдмрд╛рдВрдзрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕реЗ рдПрдХ рдордирдорд╛рдирд╛ рд╕рдордп рдЕрдВрддрд░рд╛рд▓ рд╣реЛрдиреЗ рджреЗрдВ:

tsc_ticks = modulus * number_of_moduli_periods + tsc_ticks_remainder

рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рд╢реЗрд╖ рдХреЛ рдиреИрдиреЛрд╕реЗрдХрдВрдб рдореЗрдВ рдХреИрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП:

ns_per_remainder = (tsc_ticks_remainder * factor / tsc_per_nsec) / factor

рд╣рдо рд░реВрдкрд╛рдВрддрд░рдг рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ (рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ tsc_ticks_remainder < modulus):

modulus * (factor / tsc_per_nsec) <= UINT64_MAX
factor <= (UINT64_MAX / modulus) * tsc_per_nsec
2 ^ shift <= (UINT64_MAX / modulus) * tsc_per_nsec


рдердХрд╛рдКрдкрди рдХреЗ рд▓рд┐рдП, рдпрд╣ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдЕрдВрддрд┐рдо рдЕрд╕рдорд╛рдирддрд╛ рдкреВрд░реНрдгрд╛рдВрдХ рдЕрдВрдХрдЧрдгрд┐рдд рдХреЗ рдврд╛рдВрдЪреЗ рдореЗрдВ рдкрд╣рд▓реЗ рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рд▓рдВрдмреЗ рд╕рдордп рддрдХ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреВрдВрдЧрд╛ред рдореИрдВ рдХреЗрд╡рд▓ рдпрд╣ рдХрд╣ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдЕрдВрддрд┐рдо рдЕрд╕рдорд╛рдирддрд╛ рдкрд╣рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрдзрд┐рдХ рдЧрдВрднреАрд░ рд╣реИ, рдФрд░ рдЗрд╕рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд░рдХреНрд╖рд┐рдд рд╣реИред

рдЕрдВрддрд┐рдо рдЕрд╕рдорд╛рдирддрд╛ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж shift, рд╣рдо рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ: рдФрд░ рдлрд┐рд░ рдЗрди рдорд╛рдкрджрдВрдбреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢реЗрд╖ рдХреЛ рдиреИрдиреЛрд╕реЗрдХрдВрдб рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдЗрд╕рд▓рд┐рдП, рд╣рдордиреЗ рд╢реЗрд╖ рд░реВрдкрд╛рдВрддрд░рдг рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛ рд▓рд┐рдпрд╛ред рдЕрдЧрд▓реЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП - рдХреЗ рд╣рдЯрд╛рдиреЗ рд╣реИ рдФрд░ рд╕реЗ ред рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рд╣рдо рдЗрд╕реЗ рддреЗрдЬреА рд╕реЗ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣, рд╣рдо рд╡рд┐рднрд╛рдЬрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдХреЗрд╡рд▓ рджреЛ рдХреА рд╢рдХреНрддрд┐ рдХреЗ рдмрд░рд╛рдмрд░ рдЪреБрдирддреЗ рд╣реИрдВ : рдлрд┐рд░:

factor = 2 ^ shift
mult = factor / tsc_per_nsec




ns_per_remainder = (tsc_ticks_remainder * mult) >> shift


tsc_ticks_remaindernumber_of_moduli_periodstsc_ticksmodulus

modulus = 2 ^ remainder_bit_length



number_of_moduli_periods = tsc_ticks >> remainder_bit_length
tsc_ticks_remainder = tsc_ticks & (modulus - 1)


рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛редрдЕрдм рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ tsc_ticks number_of_moduli_periodsрдФрд░ рд╕реЗ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП tsc_ticks_remainderред рдФрд░ рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ tsc_ticks_remainderрдиреИрдиреЛрд╕реЗрдХрдВрдб рдореЗрдВ рдХреИрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдпрд╣ рд╕рдордЭрдирд╛ рдмрд╛рдХреА рд╣реИ рдХрд┐ рдЯрд┐рдХ рдХреЗ рдЙрд╕ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдХреИрд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЬреЛ рдХрд┐ рдПрдХ рдмрд╣реБ рд╣реИ, рдиреИрдиреЛрд╕реЗрдХрдВрдб рдореЗрдВ modulusред рд▓реЗрдХрд┐рди рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ:

ns_per_moduli = ns_per_modulus * number_of_moduli_periods

ns_per_modulusрдЖрдк рдЕрдЧреНрд░рд┐рдо рдореЗрдВ рдЧрдгрдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЙрд╕реА рд╕реВрддреНрд░ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рд╣рдо рд╢реЗрд╖ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рд╕реВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЙрди рдЕрд╡рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдЕрдм рдирд╣реАрдВ рд╣реИрдВ modulusред рдЦреБрдж modulus, рдЬрд╝рд╛рд╣рд┐рд░ рд╣реИ, рдЕрдм рд╕реЗ рдирд╣реАрдВ modulusред

ns_per_modulus = (modulus * mult) >> shift

рд╡рд╣ рд╕рдм рд╣реИ! рд╣рдо рдЯрд┐рдХреЛрдВ рдХреЛ рдиреИрдиреЛрдХреИрдиреНрдбреНрд╕ рдкрд░ рдордХреНрдЦреА рдореЗрдВ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗред рдЕрдм рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░реЗрдВ:

  1. рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИ tsc_ticks
  2. number_of_moduli_periods = tsc_ticks >> remainder_bit_length
  3. tsc_ticks_remainder = tsc_ticks & (modulus - 1)
  4. ns = ns_per_modulus * number_of_moduli_periods + (tsc_ticks_remainder * mult) >> shift

рдЗрд╕ рдкреНрд░рдХреНрд░рд┐рдпрд╛, рдорд╛рдирдХреЛрдВ рдореЗрдВ remainder_bit_length, modulus, ns_per_modulus, multрдФрд░ shiftprecalculation рдЕрдЧреНрд░рд┐рдоред

рдпрджрд┐ рдЖрдк рдЕрднреА рднреА рдЗрд╕ рдкреЛрд╕реНрдЯ рдХреЛ рдкрдврд╝ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рдорд╣рд╛рди рдпрд╛ рдорд╣рд╛рди рд╣реИрдВред рдпрд╣ рднреА рд╕рдВрднрд╡ рд╣реИ рдХрд┐ рдЖрдк рдПрдХ рдкреНрд░рджрд░реНрд╢рди рд╡рд┐рд╢реНрд▓реЗрд╖рдХ рдпрд╛ рдЙрдЪреНрдЪ-рдкреНрд░рджрд░реНрд╢рди рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреЗ рдбреЗрд╡рд▓рдкрд░ рд╣реЛрдВред

рддреЛ рдпрд╣рд╛рдБ рд╣реИредрдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╣рдо рдЕрднреА рддрдХ рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реБрдП рд╣реИрдВ :)

рдпрд╛рдж рд░рдЦреЗрдВ рдХрд┐ рд╣рдордиреЗ рдкреИрд░рд╛рдореАрдЯрд░ рдХреА рдЧрдгрдирд╛ рдХреИрд╕реЗ рдХреА mult? рдпрд╣ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдерд╛:

mult = factor / tsc_per_nsec

рдкреНрд░рд╢реНрди: рдпрд╣ рдХрд╣рд╛рдВ рд╕реЗ рдЖрддрд╛ рд╣реИ tsc_per_nsec?
рдПрдХ рдиреИрдиреЛрд╕реЗрдХрдВрдб рдореЗрдВ рдЯрд┐рдХреНрд╕ рдХреА рд╕рдВрдЦреНрдпрд╛ рдмрд╣реБрдд рдХрдо рдореВрд▓реНрдп рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдореЗрд░реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ tsc_per_nsecрдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (tsc_per_sec / 1000000000)ред рдпрд╣ рд╣реИ:

mult = factor * 1000000000 / tsc_per_sec

рдФрд░ рджреЛ рджрд┐рд▓рдЪрд╕реНрдк рд╕рд╡рд╛рд▓ рд╣реИрдВ:

  1. рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП tsc_per_sec, рдХреНрдпреЛрдВ рдФрд░ рдХреНрдпреЛрдВ рдирд╣реАрдВ tsc_per_msec?
  2. рдпреЗ рдХрд╣рд╛рдВ рд╕реЗ рд▓рд╛рдПрдВ tsc_per_sec?

рдкрд╣рд▓реЗ рдПрдХ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдлрд┐рдпреЛ рдЕрдм рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреНрд░рддрд┐ рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдФрд░ рдЙрд╕ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВред рдорд╢реАрди рдкрд░, рдорд╛рдирдХреЛрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдореИрдВ рдКрдкрд░ рдирд╛рдо tsc_per_msec = 2599998ред рдЬрдмрдХрд┐ tsc_per_sec = 2599998971ред рдЕрдЧрд░ рд╣рдо рдЗрди рдирдВрдмрд░реЛрдВ рдХреЛ рдПрдХ рдкреИрдорд╛рдиреЗ рдкрд░ рд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдЙрдирдХрд╛ рдЕрдиреБрдкрд╛рдд рдПрдХрддрд╛ рдХреЗ рдмрд╣реБрдд рдХрд░реАрдм рд╣реЛрдЧрд╛: 0.999999626 рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдо рдкрд╣рд▓реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рджреВрд╕рд░реЗ рдХрд╛ рдирд╣реАрдВ, рддреЛ рд╣рд░ рджреВрд╕рд░реЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 374 рдиреИрдиреЛрд╕реЗрдХрдВрдб рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреАред рддреЛ - tsc_per_secред

рдЖрдЧреЗ ... рдХреИрд╕реЗ рдЧрд┐рдиреЗрдВ tsc_per_sec?

рдпрд╣ рдкреНрд░рддреНрдпрдХреНрд╖ рдорд╛рдк рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: "рдХреБрдЫ рд╕рдордп" рдПрдХ рд╡рд┐рдиреНрдпрд╛рд╕ рдпреЛрдЧреНрдп рдкреИрд░рд╛рдореАрдЯрд░ рд╣реИред рдпрд╣ рдмрдбрд╝рд╛, рдЫреЛрдЯрд╛ рдпрд╛ рдПрдХ рд╕реЗрдХрдВрдб рдХреЗ рдмрд░рд╛рдмрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдпрд╣ рдЖрдзрд╛ рд╕реЗрдХрдВрдб рд╣реИред рдЖрдЧреЗ рдорд╛рди рд▓реЗрдВ рдХрд┐ рдмреАрдЪ рдореЗрдВ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдВрддрд░ рдФрд░ 0.6 рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рдирд┐рдХрд▓рд╛ред рддрдм ред

start_sytem_time = clock_gettime()
start_tsc = WTMLIB_GET_TSC()
-
end_system_time = clock_gettime()
end_tsc = WTMLIB_GET_TSC()


end_system_timestart_system_timetsc_per_sec = (end_tsc тАУ start_tsc) / 0,6

рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрдИ рдореВрд▓реНрдпреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рд╣реИ tsc_per_secред рдФрд░ рдлрд┐рд░, рдорд╛рдирдХ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдпрд╣ рд╕рд╛рдВрдЦреНрдпрд┐рдХреАрдп рд╢реЛрд░ рдХреЗ "рдЙрдиреНрд╣реЗрдВ" рд╕рд╛рдл рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдПрдХрд▓ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ tsc_per_secрднрд░реЛрд╕рд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдКрдкрд░ рджрд┐рдП рдЧрдП рд╕рдордп рдорд╛рдк рдЖрд░реЗрдЦ рдореЗрдВ, рдХреЙрд▓ рдХрд╛ рдХреНрд░рдо clock_gettime()рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ WTMLIB_GET_TSC()ред рдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ WTMLIB_GET_TSC()рдХрд┐ рдПрдХ рд╣реА рд╕рдордп рджреЛ рдХреЙрд▓реЛрдВ рдХреЗ рдмреАрдЪ рдореЗрдВ рджреЛ рдХреЙрд▓реЛрдВ рдХреЗ рдмреАрдЪ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдП clock_gettime()ред рдлрд┐рд░ рдЯреАрдПрд╕рд╕реА рдЯрд┐рдХ рдХреЗ рд╕рд╛рде рд╕рд┐рд╕реНрдЯрдо рд╕рдордп рдХреЛ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕рд╣рд╕рдВрдмрдВрдзрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред рдФрд░ рдлрд┐рд░ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдмрд┐рдЦрд░рд╛рд╡ tsc_per_secрд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдк рдпреЛрдЬрдирд╛ рдХреЗ рд╕рд╛рде, рдорд╛рди tsc_per_secрд╕рдорд╛рди рд╕рдВрднрд╛рд╡рдирд╛ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рджрд┐рд╢рд╛ рдореЗрдВ рдФрд╕рдд рдореВрд▓реНрдп рд╕реЗ рд╡рд┐рдЪрд▓рд┐рдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдФрд░ рдЙрдирдХреЗ рд▓рд┐рдП рдорд╛рдирдХ рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред

рдирд┐рд╖реНрдХрд░реНрд╖


рд╢рд╛рдпрдж рдмрд╕ рдЗрддрдирд╛ рд╣реАред

рд▓реЗрдХрд┐рди рдкреНрд░рднрд╛рд╡реА рд╕рдордп рдорд╛рдкрди рдХрд╛ рд╡рд┐рд╖рдп рдпрд╣реАрдВ рддрдХ рд╕реАрдорд┐рдд рдирд╣реАрдВ рд╣реИред рдХрдИ рдмрд╛рд░реАрдХрд┐рдпрд╛рдВ рд╣реИрдВред рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдореБрджреНрджреЛрдВ рдкрд░ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рд╕реНрддрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ:

  • рд╕рдВрдЪрдп рдкрд░ рдпрд╛ рддреЛ - рдпрд╛ рддреЛ рдХреИрд╢ рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рдг рдорд╛рдкрджрдВрдбреЛрдВ рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рдирд╛
  • рдХрд┐рди рд╕реАрдорд╛рдУрдВ рдХреЛ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ modulus(рдЬрд┐рд╕рд╕реЗ рд░реВрдкрд╛рдВрддрд░рдг рдХреА рд╕рдЯреАрдХрддрд╛ рдмрдврд╝ рд░рд╣реА рд╣реИ)?
  • рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рджреЗрдЦрд╛ рд╣реИ, рд░реВрдкрд╛рдВрддрд░рдг рд╕рдЯреАрдХрддрд╛ рди рдХреЗрд╡рд▓ рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддреА рд╣реИ modulus, рдмрд▓реНрдХрд┐ рд╕рдордп рдЕрдВрддрд░рд╛рд▓ рдХреЗ рдЖрдХрд╛рд░ рд╕реЗ рднреА рдкреНрд░рднрд╛рд╡рд┐рдд рд╣реЛрддреА рд╣реИ, рдЬреЛ рдЯрд┐рдХреНрд╕ ( tsc_per_msecрдпрд╛ tsc_per_sec) рдХреЗ рд╕рд╛рде рд╕рдВрдмрдВрдз рд░рдЦрддреА рд╣реИ ред рджреЛрдиреЛрдВ рдХрд╛рд░рдХреЛрдВ рдХреЗ рдкреНрд░рднрд╛рд╡ рдХреЛ рдХреИрд╕реЗ рд╕рдВрддреБрд▓рд┐рдд рдХрд░реЗрдВ?
  • рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдореЗрдВ рдЯреА.рдПрд╕.рд╕реА. рдХреНрдпрд╛ рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?
  • . , fio timespec. :

    tp->tv_sec = nsecs / 1000000000ULL;

    , TSC . , ,

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдЬрд┐рди рд╡рд┐рдзрд┐рдпреЛрдВ рдкрд░ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╣реИ, рд╡реЗ рд╣рдореЗрдВ рдХрдИ рджрд╕рд┐рдпреЛрдВ рдиреИрдиреЛрд╕реЗрдХрдВрдб рдХреЗ рдХреНрд░рдо рдХреА рд╕рдЯреАрдХрддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рд╕реЗрдХрдВрдб рдХреЗ рд╕рдордп рдХреЗ рдкреИрдорд╛рдиреЗ рдХреЛ рдорд╛рдкрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдпрд╣ рд╡рд╣ рд╕рдЯреАрдХрддрд╛ рд╣реИ рдЬреЛ рдореИрдВ рдЕрдкрдиреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреЗрдЦрддрд╛ рд╣реВрдВред

рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рдлрд┐рдпреЛ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдореИрдВрдиреЗ рдХреБрдЫ рддрд░реАрдХреЛрдВ рдХреЛ рдЙрдзрд╛рд░ рд▓рд┐рдпрд╛ рдерд╛, рдПрдХ рджреВрд╕рд░реЗ рдкреИрдорд╛рдиреЗ рдкрд░ рдмрд┐рд▓реНрдХреБрд▓ 700-900 рдиреИрдиреЛрд╕реЗрдХрдВрдб рдЦреЛ рджреЗрддрд╛ рд╣реИ (рдФрд░ рдЗрд╕рдХреЗ рддреАрди рдХрд╛рд░рдг рд╣реИрдВ)ред рд╕рд╛рде рд╣реА, рдпрд╣ рдорд╛рдирдХ рд▓рд┐рдирдХреНрд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рдордп рдХреЗ рднрдВрдбрд╛рд░рдг рдХреЗ рдХрд╛рд░рдг рд░реВрдкрд╛рдВрддрд░рдг рдХреА рдЧрддрд┐ рдореЗрдВ рдЦреЛ рджреЗрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдореИрдВ рдлрд┐рдпреЛ рдкреНрд░рд╢рдВрд╕рдХреЛрдВ рдХреЛ рдЖрд╢реНрд╡рд╕реНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд▓реНрджрдмрд╛рдЬреА рдХрд░рддрд╛ рд╣реВрдВред рдореИрдВрдиреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЛ рдЙрди рд╕рднреА рд░реВрдкрд╛рдВрддрд░рдг рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╡рд░рдг рднреЗрдЬрд╛ рд╣реИ рдЬрд┐рдиреНрд╣реЗрдВ рдореИрдВрдиреЗ рдЦреЛрдЬрд╛ рдерд╛ ред рд▓реЛрдЧ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╡реЗ рдЗрд╕реЗ рдЬрд▓реНрдж рд╣реА рдареАрдХ рдХрд░ рджреЗрдВрдЧреЗред

рдореИрдВ рдЖрдкрдХреЛ рдХрдИ рд╕реБрдЦрдж рдиреИрдиреЛрд╕реЗрдХрдВрдб рдХреА рдХрд╛рдордирд╛ рдХрд░рддрд╛ рд╣реВрдВ!

Source: https://habr.com/ru/post/hi425237/


All Articles