Size: a a a

2020 February 03

AA

Anton Alferov in ErlangRus
Serge Kozhevnikov
вызов  erlang:system_time() в докере примерно в два раза дороже чем в нативной системе
а есть код, который воспроизводит всегда? или просто цикл до тыщи
источник

SK

Serge Kozhevnikov in ErlangRus
countff@sir:~$ cat /proc/cpuinfo
processor  : 0
vendor_id  : GenuineIntel
cpu family  : 6
model    : 142
model name  : Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz
stepping  : 10
microcode  : 0xca
cpu MHz    : 800.011
cache size  : 8192 KB
physical id  : 0
siblings  : 8
core id    : 0
cpu cores  : 4
apicid    : 0
initial apicid  : 0
fpu    : yes
fpu_exception  : yes
cpuid level  : 22
wp    : yes
flags    : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb invpcid_single pti ssbd ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid fsgsbase tsc_adjust bmi1 avx2 smep bmi2 erms invpcid mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp md_clear flush_l1d
bugs    : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs itlb_multihit
bogomips  : 3984.00
clflush size  : 64
cache_alignment  : 64
address sizes  : 39 bits physical, 48 bits virtual
power management:
источник

SK

Serge Kozhevnikov in ErlangRus
код есть, если оооочень нужно могу выложить
источник

SK

Serge Kozhevnikov in ErlangRus
-module(tw).
-compile([export_all]).

-include("logger.hrl").
-include("lct.hrl").



ok() ->
   test(3000000),
   test(3000000),
   test(3000000),
   test(3000000),
   test(3000000).


test(Count) ->
   %%cache_tab:insert(local, tickWaveTstCounter, 0, fun() -> pass end),
   Buf = [],

   T1 = erlang:system_time(),
   t(0, Count, Buf),
   T2 = erlang:system_time(),
   io:format("DT: ~p~n", [T2-T1]).

pass(_Log) ->
   %%io:format(":~p~n", [length(Log)]),
   pass.

t(Count, Max, Buf) when Count >= Max->
   io:format("~p~n", [{Count, Max, Buf}]),
   done;
t(Count, Max, Buf) ->
%    io:format("C: ~p~n", [Count]),
   PoppedBuf = n(7, Count, Buf),
   t(Count + 2, Max, PoppedBuf).

n(0, _Tick, Buf) ->
   Buf;
n(NodeId, Tick, Buf) ->
   Node = utl:to_list(NodeId),
   Msg = <<0>>,%%utl:to_binary(erlang:system_time()), % УБРАТЬ ЭТО!!!
   %%LocalTick = Tick,

   Buf1 = event2(Node, Tick, Msg, Buf),
   Buf2 = event2(Node, Tick+1, Msg, Buf1),
   n(NodeId-1, Tick, Buf2).


event2(Node, Tick, Msg, Buf) ->
   case Tick rem 20 of
       0 -> [];
       _ -> Buf ++ [{Node, Tick, Msg}]
   end.
источник

SK

Serge Kozhevnikov in ErlangRus
ага, даже с моим комментом, про то что бы это убрать и протестировать без неё
источник

SK

Serge Kozhevnikov in ErlangRus
код немного замучаный по логике, но это из за того что я обрезал куски от изначального функционала, что бы добраться до причины
источник

A

Alexey in ErlangRus
А почему не сделать чисто вызов одной функции, если подозрение на неё?
источник

SK

Serge Kozhevnikov in ErlangRus
так и было изначально. она немного сложнее.... уфф.  короче, какая разница что вызывать, если проблема остается и падает производительность?
источник

SK

Serge Kozhevnikov in ErlangRus
изначально функция event в своей логике тоже содержала вызов таймера - считалось латенси обработки событий
источник

SK

Serge Kozhevnikov in ErlangRus
нюансы объяснять долго да и честно говоря не охота
источник

ŹR

Źmićer Rubinštejn in ErlangRus
Anton Alferov
а докер разве система виртуализации?
Докер это обертка над системой виртуализации
источник

AA

Anton Alferov in ErlangRus
Źmićer Rubinštejn
Докер это обертка над системой виртуализации
над какой?
источник

A

Alexey in ErlangRus
Źmićer Rubinštejn
Докер это обертка над системой виртуализации
Слом стереотипов)
источник

ŹR

Źmićer Rubinštejn in ErlangRus
Anton Alferov
над какой?
Вроде как LXC
источник

ŹR

Źmićer Rubinštejn in ErlangRus
Хотя вот пишут, что с 1.10 они на что-то другое перешли
источник

AV

Andrey Velikiy in ErlangRus
так тогда и в systemd это должно наблюдаться? там тот же механизм cgroups...
источник

RP

Roman Pushkov in ErlangRus
примитивно и не оч показательно конечно, но ради интереса прогнал

в докере
docker run -i elixir iex
Interactive Elixir (1.10.0) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> for _ <- 1..100, do: ({a, _} = :timer.tc(fn -> for _ <- 1..10000, do: :erlang.system_time() end); a)
[31721, 28983, 26288, 25473, 26513, 27266, 27454, 27571, 27959, 28072, 27673,
28501, 27598, 27657, 27760, 27731, 28572, 28317, 28576, 27911, 27826, 28023,
27616, 27832, 29121, 28563, 28362, 27988, 28155, 28358, 28067, 28173, 28814,
28497, 28258, 27923, 28107, 28063, 27983, 27936, 28831, 28641, 28582, 28421,
28533, 28320, 28353, 28520, 28533, 27872, ...]
вне докера (ubuntu)
iex
Erlang/OTP 21 [erts-10.3] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [hipe]

Interactive Elixir (1.9.4) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> for _ <- 1..100, do: ({a, _} = :timer.tc(fn -> for _ <- 1..10000, do: :erlang.system_time() end); a)
[13120, 12601, 10323, 10300, 9661, 9405, 9472, 9323, 8862, 8585, 8682, 9496,
10001, 8319, 8650, 8226, 8033, 8533, 8268, 8685, 7754, 8128, 7707, 7857, 8154,
8395, 8335, 8026, 7965, 7775, 9008, 9761, 9203, 9026, 8255, 7785, 7713, 8116,
8219, 8178, 8459, 7805, 7826, 7963, 8136, 8373, 8787, 8971, 7966, 8230, ...]
источник

ŹR

Źmićer Rubinštejn in ErlangRus
На маке до Catalina докер вообще запускался в виртуалбоксах отдельных
источник

ŹR

Źmićer Rubinštejn in ErlangRus
Roman Pushkov
примитивно и не оч показательно конечно, но ради интереса прогнал

в докере
docker run -i elixir iex
Interactive Elixir (1.10.0) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> for _ <- 1..100, do: ({a, _} = :timer.tc(fn -> for _ <- 1..10000, do: :erlang.system_time() end); a)
[31721, 28983, 26288, 25473, 26513, 27266, 27454, 27571, 27959, 28072, 27673,
28501, 27598, 27657, 27760, 27731, 28572, 28317, 28576, 27911, 27826, 28023,
27616, 27832, 29121, 28563, 28362, 27988, 28155, 28358, 28067, 28173, 28814,
28497, 28258, 27923, 28107, 28063, 27983, 27936, 28831, 28641, 28582, 28421,
28533, 28320, 28353, 28520, 28533, 27872, ...]
вне докера (ubuntu)
iex
Erlang/OTP 21 [erts-10.3] [source] [64-bit] [smp:8:8] [ds:8:8:10] [async-threads:1] [hipe]

Interactive Elixir (1.9.4) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> for _ <- 1..100, do: ({a, _} = :timer.tc(fn -> for _ <- 1..10000, do: :erlang.system_time() end); a)
[13120, 12601, 10323, 10300, 9661, 9405, 9472, 9323, 8862, 8585, 8682, 9496,
10001, 8319, 8650, 8226, 8033, 8533, 8268, 8685, 7754, 8128, 7707, 7857, 8154,
8395, 8335, 8026, 7965, 7775, 9008, 9761, 9203, 9026, 8255, 7785, 7713, 8116,
8219, 8178, 8459, 7805, 7826, 7963, 8136, 8373, 8787, 8971, 7966, 8230, ...]
Как то это не 50%... это 70%
источник

SK

Serge Kozhevnikov in ErlangRus
я сказал 50% - но думал что больше )). чистого теста на таймер без работы с массивами я же не делал, они тоже что-то жрут
источник