SlideShare a Scribd company logo
1 of 44
Download to read offline
Бутылочное
горлышко
Епихин Михаил, Яндекс
Узкое место
4
От всех узких мест
невозможно избавиться.
Узкое место можно
только расширить или
перенести.
Виды анализа
5
Анализ ресурсов
CPU
6
Memory
Disk
Net
Socket 0
Socket 1
Thread 0
Thread 1
Thread 2
Thread 3
Thread 4
Thread 5
Thread 6
Thread 7
Анализ ресурсов
CPU
7
Memory
Disk
Net
Socket 0
Socket 1
Thread 0
Thread 1
Thread 2
Thread 3
Thread 4
Thread 5
Thread 6
Thread 7
usr% sys%
iowait%
softirq%
hirq%
steal%
idle%
nice%
LA1
LA5
LA15
run_queue
L1 Cache hit
L1 Cache miss
L2 Cache hit
L2 Cache hit
voluntary csw
nonvoluntary csw
interrupts
NUMA free cached
dirty
used minflt
majflt swapin
rrqm/s
writeback
wrqm/s
r/s
w/s
avgrq-sz
avgqu-szawait
util%
swapout
tcpi
tcpo
udpi
udpo
pcki pcko
erri
erro
drpi
drpo
bandwidth
RTT
interrupts
USE Method
Utilization (Утилизация)
!
8
USE Method
Utilization (Утилизация)
Saturation (Насыщение)
9
USE Method
Utilization (Утилизация)
Saturation (Насыщение)
Errors (Ошибки)
10
USE Method: CPU
Utilization us%, sy%, io%, si%, st%, id%
Saturation run_queue
Errors —
11
USE Method: CPU & Cores
Cpu0 : 3.0%us, 0.3%sy, 0.0%ni, 3.0%id, 0.0%wa, 0.3%hi, 93.4%si!
Cpu1 : 39.3%us, 13.5%sy, 0.0%ni, 45.9%id, 0.0%wa, 0.0%hi, 1.3%si!
Cpu2 : 37.6%us, 14.2%sy, 0.0%ni, 46.2%id, 0.0%wa, 0.0%hi, 2.0%si!
Cpu3 : 36.4%us, 14.2%sy, 0.0%ni, 48.0%id, 0.0%wa, 0.0%hi, 1.3%si!
Cpu4 : 31.8%us, 13.6%sy, 0.0%ni, 52.6%id, 0.0%wa, 0.0%hi, 2.0%si!
Cpu5 : 30.2%us, 12.0%sy, 0.0%ni, 56.1%id, 0.0%wa, 0.0%hi, 1.7%si!
Cpu6 : 29.7%us, 14.2%sy, 0.0%ni, 54.1%id, 0.0%wa, 0.0%hi, 2.0%si!
Cpu7 : 35.0%us, 13.2%sy, 0.0%ni, 50.5%id, 0.0%wa, 0.0%hi, 1.3%si
12
USE Method: CPU & Cores
Cpu0 : 3.0%us, 0.3%sy, 0.0%ni, 3.0%id, 0.0%wa, 0.3%hi, 93.4%si!
Cpu1 : 39.3%us, 13.5%sy, 0.0%ni, 45.9%id, 0.0%wa, 0.0%hi, 1.3%si!
Cpu2 : 37.6%us, 14.2%sy, 0.0%ni, 46.2%id, 0.0%wa, 0.0%hi, 2.0%si!
Cpu3 : 36.4%us, 14.2%sy, 0.0%ni, 48.0%id, 0.0%wa, 0.0%hi, 1.3%si!
Cpu4 : 31.8%us, 13.6%sy, 0.0%ni, 52.6%id, 0.0%wa, 0.0%hi, 2.0%si!
Cpu5 : 30.2%us, 12.0%sy, 0.0%ni, 56.1%id, 0.0%wa, 0.0%hi, 1.7%si!
Cpu6 : 29.7%us, 14.2%sy, 0.0%ni, 54.1%id, 0.0%wa, 0.0%hi, 2.0%si!
Cpu7 : 35.0%us, 13.2%sy, 0.0%ni, 50.5%id, 0.0%wa, 0.0%hi, 1.3%si
13
idle 50%
USE Method: CPU & Cores
Cpu0 : 3.0%us, 0.3%sy, 0.0%ni, 3.0%id, 0.0%wa, 0.3%hi, 93.4%si!
Cpu1 : 39.3%us, 13.5%sy, 0.0%ni, 45.9%id, 0.0%wa, 0.0%hi, 1.3%si!
Cpu2 : 37.6%us, 14.2%sy, 0.0%ni, 46.2%id, 0.0%wa, 0.0%hi, 2.0%si!
Cpu3 : 36.4%us, 14.2%sy, 0.0%ni, 48.0%id, 0.0%wa, 0.0%hi, 1.3%si!
Cpu4 : 31.8%us, 13.6%sy, 0.0%ni, 52.6%id, 0.0%wa, 0.0%hi, 2.0%si!
Cpu5 : 30.2%us, 12.0%sy, 0.0%ni, 56.1%id, 0.0%wa, 0.0%hi, 1.7%si!
Cpu6 : 29.7%us, 14.2%sy, 0.0%ni, 54.1%id, 0.0%wa, 0.0%hi, 2.0%si!
Cpu7 : 35.0%us, 13.2%sy, 0.0%ni, 50.5%id, 0.0%wa, 0.0%hi, 1.3%si
14
bottleneck
USE Method: CPU & Cores
~$ cat /proc/interrupts | tr -s ' ' | grep eth0-TxRx!
91: 2868134299 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-0!
92: 2868146311 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-1!
93: 2868133640 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-2!
94: 2868134872 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-3!
95: 2868144236 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-4!
96: 2868135354 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-5!
97: 2868134226 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-6!
98: 2868134787 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-7
15
USE Method: CPU & Cores
~$ cat /proc/interrupts | tr -s ' ' | grep eth0-TxRx!
91: 2868134299 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-0!
92: 2868146311 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-1!
93: 2868133640 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-2!
94: 2868134872 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-3!
95: 2868144236 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-4!
96: 2868135354 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-5!
97: 2868134226 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-6!
98: 2868134787 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-7
16
USE Method: Memory
Utilization free, used, cached
Saturation swapin, swapout, page fault
Errors malloc() errors
17
USE Method: Network
Utilization bandwidth, pcki, pcko
Saturation overruns, dropped
Errors retransmits
18
USE Method: Disk
Utilization bandwidth, util, r/s, w/s
Saturation iowait, await, avgqu-sz
Errors —
19
USE Method
Utilization (Утилизация)
Saturation (Насыщение)
Errors (Ошибки)
20
Resource: Lock
Utilization time_in_critical_section/s
Saturation queue_size
Errors ?
21
mongostat
1.1.1.1:27017 … db:13.0% 0 0|0 0|0 741k 657k 64 db PRI!
1.1.1.1:27017 … local:149.1% 0 0|0 10|0 336b 3k 3 db SEC
22
bottleneck?
mongostat
1.1.1.1:27017 … db:13.0% 0 0|0 0|0 741k 657k 64 db PRI!
1.1.1.1:27017 … local:149.1% 0 0|0 10|0 336b 3k 3 db SEC
23
NO! QR/QW 0/0
mongostat
1.1.1.1:27017 … db:13.0% 0 0|0 0|0 741k 657k 64 db PRI!
1.1.1.1:27017 … local:149.1% 0 0|0 10|0 336b 3k 3 db SEC
24
AR/AW 10/0
<твой> resource
Thread Pool или Connection Pool
!
Utilization used_objects / pool_capacity
Saturation queue_size
Errors queue_overflow
25
Если в процессе есть
узкое место, то
большинство задач будут
стоять перед ним.
26
Thread State Analysis
D uninterruptible sleep (usually IO)!
R running or runnable (on run queue)!
S interruptible sleep (waiting for an
event to complete)!
! . . .
27
poor man’s profiler
gdb -ex "set pagination 0" -ex "thread
apply all bt” !
--batch -p $(pgrep process) > 1.td
28
TSA Method & GDB
~/research $ grep "#0" 1.td | sort | uniq -c!
2 #0 0x00007fa7298d2cd3 in epoll_wait ()!
17 #0 0x00007fa729b8843c in pthread_cond_wait ()!
13 #0 0x00007fa729b8b054 in __lll_lock_wait ()!
1 #0 0x00007fa729b8c2a5 in sigwait ()!
1 #0 bn_sqr4x_mont () at x86_64-mont.s:1227
29
TSA Method & GDB
~/research $ grep "#0" 1.td | sort | uniq -c | magic!
S 2 #0 0x00007fa7298d2cd3 in epoll_wait ()!
S 17 #0 0x00007fa729b8843c in pthread_cond_wait ()!
S 13 #0 0x00007fa729b8b054 in __lll_lock_wait ()!
S 1 #0 0x00007fa729b8c2a5 in sigwait ()!
R 1 #0 bn_sqr4x_mont () at x86_64-mont.s:1227
30
TSA Method & GDB
~/research $ grep "#0" 4.td | sort | uniq -c | magic!
S 1 #0 0x00007f51ce80cd3a in _int_free ()!
R 1 #0 0x00007f51ce81dba3 in memcpy ()!
S 7 #0 0x00007f51ce87ccd3 in epoll_wait ()!
S 17 #0 0x00007f51ceb3243c in pthread_cond_wait()!
S 1 #0 0x00007f51ceb35a2d in recvmsg ()!
S 1 #0 0x00007f51ceb362a5 in sigwait ()!
R 7 #0 bn_sqr4x_mont ()!
31
TSA Method & GDB
~/research $ grep "#0" 4.td | sort | uniq -c
S 1 #0 0x00007f51ce80cd3a in
R 1 #0 0x00007f51ce81dba3 in
S 7 #0 0x00007f51ce87ccd3 in epoll_wait ()
S 17 #0 0x00007f51ceb3243c in pthread_cond_wait()!
S 1 #0 0x00007f51ceb35a2d in
S 1 #0 0x00007f51ceb362a5 in sigwait ()
R 7 #0
32
250 handshakes/s 3000 handshakes/s
x12 throughput
sed “s/Thread/entity/g”
CPU: usr%, sys%, sirq%, iowait%, …
Socket: ESTAB, TIME-WAIT, SYN-RECV, …
33
strace
perf blktrace
systemtap
high sys time
~ $ sudo strace -f -c -p $(pgrep process) | magic!
% time!seconds! usecs/call!calls! errors!syscall!
48.18! 0.005732! 2! ! 2560! 2560! connect!
15.03! 0.001788! 0! ! 5147! ! ! close!
10.02! 0.001192! 0! ! 7106! ! ! epoll_wait!
5.02! 0.000597! 0! ! 2575! ! ! write!
4.95! 0.000589! 0! ! 13447! ! ! epoll_ctl
34
high sys time
~ $ sudo strace -f -c -p $(pgrep process) | magic!
% time!seconds! usecs/call!calls! errors!syscall!
48.18! 0.005732! 2! ! 2560! 2560! connect!
15.03! 0.001788! 0! ! 5147! ! ! close!
10.02! 0.001192! 0! ! 7106! ! ! epoll_wait!
5.02! 0.000597! 0! ! 2575! ! ! write!
4.95! 0.000589! 0! ! 13447! ! ! epoll_ctl
35
high sys time
~ $ sudo strace -f -c -p $(pgrep process) | magic!
% time!seconds! usecs/call!calls! errors!syscall!
48.18! 0.005732! 2! ! 2560! 2560! connect!
15.03! 0.001788! 0! ! 5147! ! ! close!
10.02! 0.001192! 0! ! 7106! ! ! epoll_wait!
5.02! 0.000597! 0! ! 2575! ! ! write!
4.95! 0.000589! 0! ! 13447! ! ! epoll_ctl
36
socket statistics
schizophrenia@target:~$ ss -s!
TCP: 3 (estab 67, closed 123, orphaned
0, synrecv 45, timewait 60143/0), ports 0
37
socket statistics
schizophrenia@target:~$ ss -s!
TCP: 3 (estab 67, closed 123, orphaned
0, synrecv 45, timewait 60143/0), ports 0
38
socket statistics
schizophrenia@target:~$ ss -s!
TCP: 3 (estab 67, closed 123, orphaned
0, synrecv 45, timewait 60143/0), ports 0
39
net.ipv4.tcp_tw_recycle = 0!
net.ipv4.tcp_tw_reuse = 0
Заключение
1. Управляйте ресурсами (USE Method)
!
!
40
Заключение
1. Управляйте ресурсами (USE Method)
2. Ищите узкие места (TSA Method)
!
41
Заключение
1. Управляйте ресурсами (USE Method)
2. Ищите узкие места (TSA Method)
3. Комбинируйте Workload & Resource
42
Заключение
1. Управляйте ресурсами (USE Method)
2. Ищите узкие места (TSA Method)
3. Комбинируйте Workload & Resource
4. Benchmark / Performance / Load testing
43
Спасибо! Вопросы?
Епихин Михаил
инженер по тестированию производительности
@SCH1Z0PHR3N1A
schizophrenia@yandex-team.ru
44

More Related Content

What's hot

Mango64 u boot 업데이트 하기
Mango64 u boot 업데이트 하기Mango64 u boot 업데이트 하기
Mango64 u boot 업데이트 하기종인 전
 
Эксплуатируем неэксплуатируемые уязвимости SAP
Эксплуатируем неэксплуатируемые уязвимости SAPЭксплуатируем неэксплуатируемые уязвимости SAP
Эксплуатируем неэксплуатируемые уязвимости SAPPositive Hack Days
 
RNASeqR: RNA-Seq workflow for case-control study
RNASeqR: RNA-Seq workflow for case-control studyRNASeqR: RNA-Seq workflow for case-control study
RNASeqR: RNA-Seq workflow for case-control studyKuanHaoChao
 
Performance tweaks and tools for Linux (Joe Damato)
Performance tweaks and tools for Linux (Joe Damato)Performance tweaks and tools for Linux (Joe Damato)
Performance tweaks and tools for Linux (Joe Damato)Ontico
 
Data-driven HAL generation
Data-driven HAL generationData-driven HAL generation
Data-driven HAL generationemBO_Conference
 
[CONFidence 2016] Dmitry Chastuhin, Dmitry Yudin - SAP, dos, dos, race condi...
[CONFidence 2016] Dmitry Chastuhin, Dmitry Yudin -  SAP, dos, dos, race condi...[CONFidence 2016] Dmitry Chastuhin, Dmitry Yudin -  SAP, dos, dos, race condi...
[CONFidence 2016] Dmitry Chastuhin, Dmitry Yudin - SAP, dos, dos, race condi...PROIDEA
 

What's hot (8)

Mango64 u boot 업데이트 하기
Mango64 u boot 업데이트 하기Mango64 u boot 업데이트 하기
Mango64 u boot 업데이트 하기
 
Эксплуатируем неэксплуатируемые уязвимости SAP
Эксплуатируем неэксплуатируемые уязвимости SAPЭксплуатируем неэксплуатируемые уязвимости SAP
Эксплуатируем неэксплуатируемые уязвимости SAP
 
RNASeqR: RNA-Seq workflow for case-control study
RNASeqR: RNA-Seq workflow for case-control studyRNASeqR: RNA-Seq workflow for case-control study
RNASeqR: RNA-Seq workflow for case-control study
 
Performance tweaks and tools for Linux (Joe Damato)
Performance tweaks and tools for Linux (Joe Damato)Performance tweaks and tools for Linux (Joe Damato)
Performance tweaks and tools for Linux (Joe Damato)
 
CM_TX_Devices
CM_TX_DevicesCM_TX_Devices
CM_TX_Devices
 
Unix Monitoring Tools
Unix Monitoring ToolsUnix Monitoring Tools
Unix Monitoring Tools
 
Data-driven HAL generation
Data-driven HAL generationData-driven HAL generation
Data-driven HAL generation
 
[CONFidence 2016] Dmitry Chastuhin, Dmitry Yudin - SAP, dos, dos, race condi...
[CONFidence 2016] Dmitry Chastuhin, Dmitry Yudin -  SAP, dos, dos, race condi...[CONFidence 2016] Dmitry Chastuhin, Dmitry Yudin -  SAP, dos, dos, race condi...
[CONFidence 2016] Dmitry Chastuhin, Dmitry Yudin - SAP, dos, dos, race condi...
 

Similar to Михаил Епихин — Бутылочное горлышко. как найти узкие места сервиса и увеличить производительность

Phd2013 lyamin Высокий пакетрейт на x86-64, берем планку 14.88Mpps
Phd2013 lyamin  Высокий пакетрейт на  x86-64, берем планку 14.88MppsPhd2013 lyamin  Высокий пакетрейт на  x86-64, берем планку 14.88Mpps
Phd2013 lyamin Высокий пакетрейт на x86-64, берем планку 14.88MppsAlexander Lyamin
 
Александр Лямин. HOWTO. Высокий пакетрейт на x86-64: берем планку в 14,88 Mpps
Александр Лямин. HOWTO. Высокий пакетрейт на x86-64: берем планку в 14,88 MppsАлександр Лямин. HOWTO. Высокий пакетрейт на x86-64: берем планку в 14,88 Mpps
Александр Лямин. HOWTO. Высокий пакетрейт на x86-64: берем планку в 14,88 MppsPositive Hack Days
 
Introduction to Java Profiling
Introduction to Java ProfilingIntroduction to Java Profiling
Introduction to Java ProfilingJerry Yoakum
 
MeetBSD2014 Performance Analysis
MeetBSD2014 Performance AnalysisMeetBSD2014 Performance Analysis
MeetBSD2014 Performance AnalysisBrendan Gregg
 
Linux Performance Tools
Linux Performance ToolsLinux Performance Tools
Linux Performance ToolsBrendan Gregg
 
Performance Wins with BPF: Getting Started
Performance Wins with BPF: Getting StartedPerformance Wins with BPF: Getting Started
Performance Wins with BPF: Getting StartedBrendan Gregg
 
marko_go_in_badoo
marko_go_in_badoomarko_go_in_badoo
marko_go_in_badooMarko Kevac
 
Debugging Ruby Systems
Debugging Ruby SystemsDebugging Ruby Systems
Debugging Ruby SystemsEngine Yard
 
OSMC 2015: Linux Performance Profiling and Monitoring by Werner Fischer
OSMC 2015: Linux Performance Profiling and Monitoring by Werner FischerOSMC 2015: Linux Performance Profiling and Monitoring by Werner Fischer
OSMC 2015: Linux Performance Profiling and Monitoring by Werner FischerNETWAYS
 
OSMC 2015 | Linux Performance Profiling and Monitoring by Werner Fischer
OSMC 2015 | Linux Performance Profiling and Monitoring by Werner FischerOSMC 2015 | Linux Performance Profiling and Monitoring by Werner Fischer
OSMC 2015 | Linux Performance Profiling and Monitoring by Werner FischerNETWAYS
 
That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us
That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to usThat Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us
That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to ustakesako
 
OSDC 2017 - Werner Fischer - Linux performance profiling and monitoring
OSDC 2017 - Werner Fischer - Linux performance profiling and monitoringOSDC 2017 - Werner Fischer - Linux performance profiling and monitoring
OSDC 2017 - Werner Fischer - Linux performance profiling and monitoringNETWAYS
 
DEF CON 24 - Patrick Wardle - 99 problems little snitch
DEF CON 24 - Patrick Wardle - 99 problems little snitchDEF CON 24 - Patrick Wardle - 99 problems little snitch
DEF CON 24 - Patrick Wardle - 99 problems little snitchFelipe Prado
 
Getting access to the SAP server via SAP Management Console
Getting access to the SAP server via SAP Management ConsoleGetting access to the SAP server via SAP Management Console
Getting access to the SAP server via SAP Management ConsoleDmitry Iudin
 
Debugging Ruby
Debugging RubyDebugging Ruby
Debugging RubyAman Gupta
 
Oracle cloudworld な〜んでだ?#3
Oracle cloudworld な〜んでだ?#3Oracle cloudworld な〜んでだ?#3
Oracle cloudworld な〜んでだ?#3Hiroshi Sekiguchi
 
realestate and MySQL devops melbourne
realestate and MySQL devops melbournerealestate and MySQL devops melbourne
realestate and MySQL devops melbournemysqldbahelp
 
How deep is your buffer – Demystifying buffers and application performance
How deep is your buffer – Demystifying buffers and application performanceHow deep is your buffer – Demystifying buffers and application performance
How deep is your buffer – Demystifying buffers and application performanceCumulus Networks
 
Go Profiling - John Graham-Cumming
Go Profiling - John Graham-Cumming Go Profiling - John Graham-Cumming
Go Profiling - John Graham-Cumming Cloudflare
 

Similar to Михаил Епихин — Бутылочное горлышко. как найти узкие места сервиса и увеличить производительность (20)

Phd2013 lyamin
Phd2013 lyaminPhd2013 lyamin
Phd2013 lyamin
 
Phd2013 lyamin Высокий пакетрейт на x86-64, берем планку 14.88Mpps
Phd2013 lyamin  Высокий пакетрейт на  x86-64, берем планку 14.88MppsPhd2013 lyamin  Высокий пакетрейт на  x86-64, берем планку 14.88Mpps
Phd2013 lyamin Высокий пакетрейт на x86-64, берем планку 14.88Mpps
 
Александр Лямин. HOWTO. Высокий пакетрейт на x86-64: берем планку в 14,88 Mpps
Александр Лямин. HOWTO. Высокий пакетрейт на x86-64: берем планку в 14,88 MppsАлександр Лямин. HOWTO. Высокий пакетрейт на x86-64: берем планку в 14,88 Mpps
Александр Лямин. HOWTO. Высокий пакетрейт на x86-64: берем планку в 14,88 Mpps
 
Introduction to Java Profiling
Introduction to Java ProfilingIntroduction to Java Profiling
Introduction to Java Profiling
 
MeetBSD2014 Performance Analysis
MeetBSD2014 Performance AnalysisMeetBSD2014 Performance Analysis
MeetBSD2014 Performance Analysis
 
Linux Performance Tools
Linux Performance ToolsLinux Performance Tools
Linux Performance Tools
 
Performance Wins with BPF: Getting Started
Performance Wins with BPF: Getting StartedPerformance Wins with BPF: Getting Started
Performance Wins with BPF: Getting Started
 
marko_go_in_badoo
marko_go_in_badoomarko_go_in_badoo
marko_go_in_badoo
 
Debugging Ruby Systems
Debugging Ruby SystemsDebugging Ruby Systems
Debugging Ruby Systems
 
OSMC 2015: Linux Performance Profiling and Monitoring by Werner Fischer
OSMC 2015: Linux Performance Profiling and Monitoring by Werner FischerOSMC 2015: Linux Performance Profiling and Monitoring by Werner Fischer
OSMC 2015: Linux Performance Profiling and Monitoring by Werner Fischer
 
OSMC 2015 | Linux Performance Profiling and Monitoring by Werner Fischer
OSMC 2015 | Linux Performance Profiling and Monitoring by Werner FischerOSMC 2015 | Linux Performance Profiling and Monitoring by Werner Fischer
OSMC 2015 | Linux Performance Profiling and Monitoring by Werner Fischer
 
That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us
That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to usThat Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us
That Goes Without Alpha-Num (or Does It ?) all your base10 are belong to us
 
OSDC 2017 - Werner Fischer - Linux performance profiling and monitoring
OSDC 2017 - Werner Fischer - Linux performance profiling and monitoringOSDC 2017 - Werner Fischer - Linux performance profiling and monitoring
OSDC 2017 - Werner Fischer - Linux performance profiling and monitoring
 
DEF CON 24 - Patrick Wardle - 99 problems little snitch
DEF CON 24 - Patrick Wardle - 99 problems little snitchDEF CON 24 - Patrick Wardle - 99 problems little snitch
DEF CON 24 - Patrick Wardle - 99 problems little snitch
 
Getting access to the SAP server via SAP Management Console
Getting access to the SAP server via SAP Management ConsoleGetting access to the SAP server via SAP Management Console
Getting access to the SAP server via SAP Management Console
 
Debugging Ruby
Debugging RubyDebugging Ruby
Debugging Ruby
 
Oracle cloudworld な〜んでだ?#3
Oracle cloudworld な〜んでだ?#3Oracle cloudworld な〜んでだ?#3
Oracle cloudworld な〜んでだ?#3
 
realestate and MySQL devops melbourne
realestate and MySQL devops melbournerealestate and MySQL devops melbourne
realestate and MySQL devops melbourne
 
How deep is your buffer – Demystifying buffers and application performance
How deep is your buffer – Demystifying buffers and application performanceHow deep is your buffer – Demystifying buffers and application performance
How deep is your buffer – Demystifying buffers and application performance
 
Go Profiling - John Graham-Cumming
Go Profiling - John Graham-Cumming Go Profiling - John Graham-Cumming
Go Profiling - John Graham-Cumming
 

More from Yandex

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksYandex
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Yandex
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаYandex
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаYandex
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Yandex
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Yandex
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Yandex
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Yandex
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Yandex
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Yandex
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Yandex
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Yandex
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровYandex
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Yandex
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Yandex
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Yandex
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Yandex
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Yandex
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Yandex
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Yandex
 

More from Yandex (20)

Предсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of TanksПредсказание оттока игроков из World of Tanks
Предсказание оттока игроков из World of Tanks
 
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
Как принять/организовать работу по поисковой оптимизации сайта, Сергей Царик,...
 
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров ЯндексаСтруктурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
Структурированные данные, Юлия Тихоход, лекция в Школе вебмастеров Яндекса
 
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров ЯндексаПредставление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
Представление сайта в поиске, Сергей Лысенко, лекция в Школе вебмастеров Яндекса
 
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
Плохие методы продвижения сайта, Екатерины Гладких, лекция в Школе вебмастеро...
 
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
Основные принципы ранжирования, Сергей Царик и Антон Роменский, лекция в Школ...
 
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
Основные принципы индексирования сайта, Александр Смирнов, лекция в Школе веб...
 
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
Мобильное приложение: как и зачем, Александр Лукин, лекция в Школе вебмастеро...
 
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
Сайты на мобильных устройствах, Олег Ножичкин, лекция в Школе вебмастеров Янд...
 
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
Качественная аналитика сайта, Юрий Батиевский, лекция в Школе вебмастеров Янд...
 
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
Что можно и что нужно измерять на сайте, Петр Аброськин, лекция в Школе вебма...
 
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
Как правильно поставить ТЗ на создание сайта, Алексей Бородкин, лекция в Школ...
 
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеровКак защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
Как защитить свой сайт, Пётр Волков, лекция в Школе вебмастеров
 
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
Как правильно составить структуру сайта, Дмитрий Сатин, лекция в Школе вебмас...
 
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
Технические особенности создания сайта, Дмитрий Васильева, лекция в Школе веб...
 
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
Конструкторы для отдельных элементов сайта, Елена Першина, лекция в Школе веб...
 
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
Контент для интернет-магазинов, Катерина Ерошина, лекция в Школе вебмастеров ...
 
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
Как написать хороший текст для сайта, Катерина Ерошина, лекция в Школе вебмас...
 
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
Usability и дизайн - как не помешать пользователю, Алексей Иванов, лекция в Ш...
 
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
Cайт. Зачем он и каким должен быть, Алексей Иванов, лекция в Школе вебмастеро...
 

Recently uploaded

SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machinePadma Pradeep
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024BookNet Canada
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...Fwdays
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDGMarianaLemus7
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitecturePixlogix Infotech
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Wonjun Hwang
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Patryk Bandurski
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphNeo4j
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024The Digital Insurer
 
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024BookNet Canada
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticscarlostorres15106
 
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024BookNet Canada
 
Bluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfBluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfngoud9212
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsAndrey Dotsenko
 

Recently uploaded (20)

SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 
Install Stable Diffusion in windows machine
Install Stable Diffusion in windows machineInstall Stable Diffusion in windows machine
Install Stable Diffusion in windows machine
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
Transcript: #StandardsGoals for 2024: What’s new for BISAC - Tech Forum 2024
 
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks..."LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
APIForce Zurich 5 April Automation LPDG
APIForce Zurich 5 April  Automation LPDGAPIForce Zurich 5 April  Automation LPDG
APIForce Zurich 5 April Automation LPDG
 
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort ServiceHot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
Hot Sexy call girls in Panjabi Bagh 🔝 9953056974 🔝 Delhi escort Service
 
Understanding the Laravel MVC Architecture
Understanding the Laravel MVC ArchitectureUnderstanding the Laravel MVC Architecture
Understanding the Laravel MVC Architecture
 
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
Bun (KitWorks Team Study 노별마루 발표 2024.4.22)
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
Integration and Automation in Practice: CI/CD in Mule Integration and Automat...
 
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge GraphSIEMENS: RAPUNZEL – A Tale About Knowledge Graph
SIEMENS: RAPUNZEL – A Tale About Knowledge Graph
 
My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024My INSURER PTE LTD - Insurtech Innovation Award 2024
My INSURER PTE LTD - Insurtech Innovation Award 2024
 
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
New from BookNet Canada for 2024: BNC BiblioShare - Tech Forum 2024
 
Bluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdfBluetooth Controlled Car with Arduino.pdf
Bluetooth Controlled Car with Arduino.pdf
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmaticsKotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
Kotlin Multiplatform & Compose Multiplatform - Starter kit for pragmatics
 

Михаил Епихин — Бутылочное горлышко. как найти узкие места сервиса и увеличить производительность

  • 1.
  • 4. 4 От всех узких мест невозможно избавиться. Узкое место можно только расширить или перенести.
  • 6. Анализ ресурсов CPU 6 Memory Disk Net Socket 0 Socket 1 Thread 0 Thread 1 Thread 2 Thread 3 Thread 4 Thread 5 Thread 6 Thread 7
  • 7. Анализ ресурсов CPU 7 Memory Disk Net Socket 0 Socket 1 Thread 0 Thread 1 Thread 2 Thread 3 Thread 4 Thread 5 Thread 6 Thread 7 usr% sys% iowait% softirq% hirq% steal% idle% nice% LA1 LA5 LA15 run_queue L1 Cache hit L1 Cache miss L2 Cache hit L2 Cache hit voluntary csw nonvoluntary csw interrupts NUMA free cached dirty used minflt majflt swapin rrqm/s writeback wrqm/s r/s w/s avgrq-sz avgqu-szawait util% swapout tcpi tcpo udpi udpo pcki pcko erri erro drpi drpo bandwidth RTT interrupts
  • 10. USE Method Utilization (Утилизация) Saturation (Насыщение) Errors (Ошибки) 10
  • 11. USE Method: CPU Utilization us%, sy%, io%, si%, st%, id% Saturation run_queue Errors — 11
  • 12. USE Method: CPU & Cores Cpu0 : 3.0%us, 0.3%sy, 0.0%ni, 3.0%id, 0.0%wa, 0.3%hi, 93.4%si! Cpu1 : 39.3%us, 13.5%sy, 0.0%ni, 45.9%id, 0.0%wa, 0.0%hi, 1.3%si! Cpu2 : 37.6%us, 14.2%sy, 0.0%ni, 46.2%id, 0.0%wa, 0.0%hi, 2.0%si! Cpu3 : 36.4%us, 14.2%sy, 0.0%ni, 48.0%id, 0.0%wa, 0.0%hi, 1.3%si! Cpu4 : 31.8%us, 13.6%sy, 0.0%ni, 52.6%id, 0.0%wa, 0.0%hi, 2.0%si! Cpu5 : 30.2%us, 12.0%sy, 0.0%ni, 56.1%id, 0.0%wa, 0.0%hi, 1.7%si! Cpu6 : 29.7%us, 14.2%sy, 0.0%ni, 54.1%id, 0.0%wa, 0.0%hi, 2.0%si! Cpu7 : 35.0%us, 13.2%sy, 0.0%ni, 50.5%id, 0.0%wa, 0.0%hi, 1.3%si 12
  • 13. USE Method: CPU & Cores Cpu0 : 3.0%us, 0.3%sy, 0.0%ni, 3.0%id, 0.0%wa, 0.3%hi, 93.4%si! Cpu1 : 39.3%us, 13.5%sy, 0.0%ni, 45.9%id, 0.0%wa, 0.0%hi, 1.3%si! Cpu2 : 37.6%us, 14.2%sy, 0.0%ni, 46.2%id, 0.0%wa, 0.0%hi, 2.0%si! Cpu3 : 36.4%us, 14.2%sy, 0.0%ni, 48.0%id, 0.0%wa, 0.0%hi, 1.3%si! Cpu4 : 31.8%us, 13.6%sy, 0.0%ni, 52.6%id, 0.0%wa, 0.0%hi, 2.0%si! Cpu5 : 30.2%us, 12.0%sy, 0.0%ni, 56.1%id, 0.0%wa, 0.0%hi, 1.7%si! Cpu6 : 29.7%us, 14.2%sy, 0.0%ni, 54.1%id, 0.0%wa, 0.0%hi, 2.0%si! Cpu7 : 35.0%us, 13.2%sy, 0.0%ni, 50.5%id, 0.0%wa, 0.0%hi, 1.3%si 13 idle 50%
  • 14. USE Method: CPU & Cores Cpu0 : 3.0%us, 0.3%sy, 0.0%ni, 3.0%id, 0.0%wa, 0.3%hi, 93.4%si! Cpu1 : 39.3%us, 13.5%sy, 0.0%ni, 45.9%id, 0.0%wa, 0.0%hi, 1.3%si! Cpu2 : 37.6%us, 14.2%sy, 0.0%ni, 46.2%id, 0.0%wa, 0.0%hi, 2.0%si! Cpu3 : 36.4%us, 14.2%sy, 0.0%ni, 48.0%id, 0.0%wa, 0.0%hi, 1.3%si! Cpu4 : 31.8%us, 13.6%sy, 0.0%ni, 52.6%id, 0.0%wa, 0.0%hi, 2.0%si! Cpu5 : 30.2%us, 12.0%sy, 0.0%ni, 56.1%id, 0.0%wa, 0.0%hi, 1.7%si! Cpu6 : 29.7%us, 14.2%sy, 0.0%ni, 54.1%id, 0.0%wa, 0.0%hi, 2.0%si! Cpu7 : 35.0%us, 13.2%sy, 0.0%ni, 50.5%id, 0.0%wa, 0.0%hi, 1.3%si 14 bottleneck
  • 15. USE Method: CPU & Cores ~$ cat /proc/interrupts | tr -s ' ' | grep eth0-TxRx! 91: 2868134299 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-0! 92: 2868146311 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-1! 93: 2868133640 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-2! 94: 2868134872 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-3! 95: 2868144236 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-4! 96: 2868135354 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-5! 97: 2868134226 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-6! 98: 2868134787 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-7 15
  • 16. USE Method: CPU & Cores ~$ cat /proc/interrupts | tr -s ' ' | grep eth0-TxRx! 91: 2868134299 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-0! 92: 2868146311 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-1! 93: 2868133640 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-2! 94: 2868134872 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-3! 95: 2868144236 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-4! 96: 2868135354 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-5! 97: 2868134226 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-6! 98: 2868134787 0 0 0 0 0 0 0 IR-PCI-MSI-edge eth0-TxRx-7 16
  • 17. USE Method: Memory Utilization free, used, cached Saturation swapin, swapout, page fault Errors malloc() errors 17
  • 18. USE Method: Network Utilization bandwidth, pcki, pcko Saturation overruns, dropped Errors retransmits 18
  • 19. USE Method: Disk Utilization bandwidth, util, r/s, w/s Saturation iowait, await, avgqu-sz Errors — 19
  • 20. USE Method Utilization (Утилизация) Saturation (Насыщение) Errors (Ошибки) 20
  • 22. mongostat 1.1.1.1:27017 … db:13.0% 0 0|0 0|0 741k 657k 64 db PRI! 1.1.1.1:27017 … local:149.1% 0 0|0 10|0 336b 3k 3 db SEC 22 bottleneck?
  • 23. mongostat 1.1.1.1:27017 … db:13.0% 0 0|0 0|0 741k 657k 64 db PRI! 1.1.1.1:27017 … local:149.1% 0 0|0 10|0 336b 3k 3 db SEC 23 NO! QR/QW 0/0
  • 24. mongostat 1.1.1.1:27017 … db:13.0% 0 0|0 0|0 741k 657k 64 db PRI! 1.1.1.1:27017 … local:149.1% 0 0|0 10|0 336b 3k 3 db SEC 24 AR/AW 10/0
  • 25. <твой> resource Thread Pool или Connection Pool ! Utilization used_objects / pool_capacity Saturation queue_size Errors queue_overflow 25
  • 26. Если в процессе есть узкое место, то большинство задач будут стоять перед ним. 26
  • 27. Thread State Analysis D uninterruptible sleep (usually IO)! R running or runnable (on run queue)! S interruptible sleep (waiting for an event to complete)! ! . . . 27
  • 28. poor man’s profiler gdb -ex "set pagination 0" -ex "thread apply all bt” ! --batch -p $(pgrep process) > 1.td 28
  • 29. TSA Method & GDB ~/research $ grep "#0" 1.td | sort | uniq -c! 2 #0 0x00007fa7298d2cd3 in epoll_wait ()! 17 #0 0x00007fa729b8843c in pthread_cond_wait ()! 13 #0 0x00007fa729b8b054 in __lll_lock_wait ()! 1 #0 0x00007fa729b8c2a5 in sigwait ()! 1 #0 bn_sqr4x_mont () at x86_64-mont.s:1227 29
  • 30. TSA Method & GDB ~/research $ grep "#0" 1.td | sort | uniq -c | magic! S 2 #0 0x00007fa7298d2cd3 in epoll_wait ()! S 17 #0 0x00007fa729b8843c in pthread_cond_wait ()! S 13 #0 0x00007fa729b8b054 in __lll_lock_wait ()! S 1 #0 0x00007fa729b8c2a5 in sigwait ()! R 1 #0 bn_sqr4x_mont () at x86_64-mont.s:1227 30
  • 31. TSA Method & GDB ~/research $ grep "#0" 4.td | sort | uniq -c | magic! S 1 #0 0x00007f51ce80cd3a in _int_free ()! R 1 #0 0x00007f51ce81dba3 in memcpy ()! S 7 #0 0x00007f51ce87ccd3 in epoll_wait ()! S 17 #0 0x00007f51ceb3243c in pthread_cond_wait()! S 1 #0 0x00007f51ceb35a2d in recvmsg ()! S 1 #0 0x00007f51ceb362a5 in sigwait ()! R 7 #0 bn_sqr4x_mont ()! 31
  • 32. TSA Method & GDB ~/research $ grep "#0" 4.td | sort | uniq -c S 1 #0 0x00007f51ce80cd3a in R 1 #0 0x00007f51ce81dba3 in S 7 #0 0x00007f51ce87ccd3 in epoll_wait () S 17 #0 0x00007f51ceb3243c in pthread_cond_wait()! S 1 #0 0x00007f51ceb35a2d in S 1 #0 0x00007f51ceb362a5 in sigwait () R 7 #0 32 250 handshakes/s 3000 handshakes/s x12 throughput
  • 33. sed “s/Thread/entity/g” CPU: usr%, sys%, sirq%, iowait%, … Socket: ESTAB, TIME-WAIT, SYN-RECV, … 33 strace perf blktrace systemtap
  • 34. high sys time ~ $ sudo strace -f -c -p $(pgrep process) | magic! % time!seconds! usecs/call!calls! errors!syscall! 48.18! 0.005732! 2! ! 2560! 2560! connect! 15.03! 0.001788! 0! ! 5147! ! ! close! 10.02! 0.001192! 0! ! 7106! ! ! epoll_wait! 5.02! 0.000597! 0! ! 2575! ! ! write! 4.95! 0.000589! 0! ! 13447! ! ! epoll_ctl 34
  • 35. high sys time ~ $ sudo strace -f -c -p $(pgrep process) | magic! % time!seconds! usecs/call!calls! errors!syscall! 48.18! 0.005732! 2! ! 2560! 2560! connect! 15.03! 0.001788! 0! ! 5147! ! ! close! 10.02! 0.001192! 0! ! 7106! ! ! epoll_wait! 5.02! 0.000597! 0! ! 2575! ! ! write! 4.95! 0.000589! 0! ! 13447! ! ! epoll_ctl 35
  • 36. high sys time ~ $ sudo strace -f -c -p $(pgrep process) | magic! % time!seconds! usecs/call!calls! errors!syscall! 48.18! 0.005732! 2! ! 2560! 2560! connect! 15.03! 0.001788! 0! ! 5147! ! ! close! 10.02! 0.001192! 0! ! 7106! ! ! epoll_wait! 5.02! 0.000597! 0! ! 2575! ! ! write! 4.95! 0.000589! 0! ! 13447! ! ! epoll_ctl 36
  • 37. socket statistics schizophrenia@target:~$ ss -s! TCP: 3 (estab 67, closed 123, orphaned 0, synrecv 45, timewait 60143/0), ports 0 37
  • 38. socket statistics schizophrenia@target:~$ ss -s! TCP: 3 (estab 67, closed 123, orphaned 0, synrecv 45, timewait 60143/0), ports 0 38
  • 39. socket statistics schizophrenia@target:~$ ss -s! TCP: 3 (estab 67, closed 123, orphaned 0, synrecv 45, timewait 60143/0), ports 0 39 net.ipv4.tcp_tw_recycle = 0! net.ipv4.tcp_tw_reuse = 0
  • 41. Заключение 1. Управляйте ресурсами (USE Method) 2. Ищите узкие места (TSA Method) ! 41
  • 42. Заключение 1. Управляйте ресурсами (USE Method) 2. Ищите узкие места (TSA Method) 3. Комбинируйте Workload & Resource 42
  • 43. Заключение 1. Управляйте ресурсами (USE Method) 2. Ищите узкие места (TSA Method) 3. Комбинируйте Workload & Resource 4. Benchmark / Performance / Load testing 43
  • 44. Спасибо! Вопросы? Епихин Михаил инженер по тестированию производительности @SCH1Z0PHR3N1A schizophrenia@yandex-team.ru 44