AWS Community Day Hong Kong 2025 Recap

Paggamit ng Karagdagang Telemetry Data para sa Mas Mabilis na Pagpapahusay sa Tulong ng AI Agent

Recap Series

Introduksiyon sa Profiling

  • Kahulugan ng Profiler: Ang profiler ay isang uri ng telemetry na nagbibigay ng impormasyon tungkol sa performance ng isang system at sa dami ng system resource na ginagamit nito.
  • Layunin ng Profiling: Tumutulong ang profiling na siyasatin ang pagkonsumo ng resource sa isang program at nagbibigay ng estadistikal na impormasyon tungkol sa paggamit ng partikular na resource sa loob ng isang panahon.
  • Pagkakaiba sa Tracing: Hindi gaya ng tracing na sumusubaybay sa pagkonsumo ng resource bilang time series, nagbibigay ang profiling ng estadistikal na impormasyon para sa kabuuan ng isang partikular na panahon.
  • Mga Kilalang Profiling Tool:
  • Java: Java Flight Recorder (JFR)
  • Python: cProfile (standard library) at line_profiler (third-party tool)
  • Linux: `perf` command para sa anumang executable file

Kahalagahan ng Profiling sa Pagsisiyasat ng Performance

  • Sitwasyon sa Ehersisyo: Isipin ang isang latency issue sa web application kung saan mabagal ang pagtugon sa mga client request sa web server.
  • Layunin: Tukuyin ang sanhi ng performance issue at ayusin ito.
  • Observability: Bagama't madalas na iniuugnay ang observability sa mga log, metric, at trace, nagbibigay ang profiling ng mga karagdagang insight na maaaring kailanganin upang malutas ang mga problema sa performance.

Mga Limitasyon ng mga Log, Metric, at Distributed Trace

  • [ 1 ] Mga Metric:
  • Kahulugan: Ang mga metric ang pinakakaraniwang uri ng telemetry at nagbibigay ng impormasyong gaya ng CPU usage at memory usage.
  • Limitasyon: Sinusubaybayan ng mga metric ang kabuuang pagkonsumo ng resource ng isang instance o serbisyo (hal., container na nagpapatakbo ng web server). Hindi nito ipinapakita kung aling partikular na function o implementation sa application ang kumokonsumo ng mga resource. Halimbawa, maipapakita ng mga metric na gumagamit ng maraming CPU ang isang web server, ngunit hindi nito matutukoy kung aling function ang sanhi ng mataas na CPU usage.
  • [ 2 ] Mga Distributed Trace:
  • Kahulugan: Nagbibigay ang mga distributed trace ng mahalagang impormasyon tungkol sa mga latency issue sa loob ng isang system.
  • Limitasyon: Kailangang lagyan ng instrumentation ang system o program para sa mga karaniwang distributed tracing solution. Kung walang instrumentation ang isang function, walang makukuhang latency information para rito. Matagal lagyan ng instrumentation ang bawat function at maaari rin itong magdulot ng mga problema sa performance.
  • [ 3 ] Mga Log:
  • Kahulugan: Nagbibigay ang mga log ng impormasyon tungkol sa mga partikular na function na nagsasagawa ng mga partikular na aksiyon sa mga partikular na oras.
  • Limitasyon: Ipinapakita lamang ng mga log ang matagumpay na pagkumpleto ng proseso o mga error message. Kung maayos na pinoproseso ng isang function ang request, mga mensahe ng tagumpay lamang ang ipapakita ng mga log at walang pahiwatig ng anumang latency issue. Hindi nagbibigay ang mga log ng impormasyon tungkol sa sanhi ng mga problema sa latency maliban kung may naganap na error.

Konklusyon

  • Problema: Bagama't kapaki-pakinabang ang mga log, metric, at distributed trace, hindi nagbibigay ang mga ito ng kumpletong impormasyon tungkol sa sanhi ng mga latency issue. Kailangan ang profiling upang makakuha ng mas malalim na insight sa pagkonsumo ng resource at matukoy ang mga performance bottleneck.

Buod ng Kasalukuyan at Ninanais na Kalagayan

  • [ 1 ] Layunin:
  • Layunin ng paggamit ng observability na matukoy ang sanhi ng mga performance issue at ayusin ang mga ito.
  • [ 2 ] Kasalukuyang Kalagayan:
  • Kakulangan sa Telemetry: Sa kabila ng mga problema sa latency, biglaang pagtaas ng CPU o memory usage, mga pagbabago sa latency na makikita sa mga distributed trace, at mga log na nagpapakitang maayos na pinoproseso ng mga function ang mga request, hindi pa rin natutukoy ang eksaktong sanhi ng problema sa latency.
  • [ 3 ] Ninanais na Kalagayan:
  • Eksaktong Pagtukoy: Ang ninanais na kalagayan ay matukoy ang eksaktong linya ng code na sanhi ng performance issue upang maisagawa ang tumpak na pag-aayos.

Kahulugan ng Observability

  • Observability sa Control Theory: Ang observability ay inilalarawan bilang sukatan kung gaano kahusay mahihinuha ang internal state ng isang system mula sa mga external output nito (telemetry).
  • Ideyal na Observability: Ang ideyal na kalagayan ng observability ay matukoy ang eksaktong sanhi ng mga issue gamit lamang ang telemetry.

Papel ng Profiling

  • Pagtugon sa Kakulangan: Kailangan ang profiling upang punan ang kakulangang hindi matutugunan ng mga log, metric, at trace.
  • Impormasyon para sa Huling Yugto: Ibinibigay ng profiling ang huling piraso ng impormasyong kailangan upang makarating mula sa data na ibinibigay ng mga log, metric, at trace tungo sa eksaktong sanhi ng problema sa performance.

Tradisyonal na Paggamit ng Profiling

  • Instrumentation: Upang magamit ang profiling, kailangang lagyan ng instrumentation ang iyong program para mangolekta ng telemetry data.
  • Pagsusuri: Suriin ang nakolektang telemetry data upang matukoy at maayos ang mga performance issue.

Paglalagay ng Instrumentation sa Iyong Program para sa Profiling

Go

  • Standard Package: Gamitin ang pprof package na kasama sa Go.
  • Mga Hakbang:
  • I-import ang Pprof package.
  • Gumawa ng instance ng profiler.
  • Simulan ang profiler.
  • Tukuyin kung saan ihihinto ang pagsukat ng profiler.

Python

  • Line Profiler: Gamitin ang Line_profiler package.
  • Mga Hakbang:
  • I-import ang Line_profiler package.
  • I-enable ang profiler.
  • Isulat ang partikular na bahagi ng prosesong ipo-profile.
  • I-disable ang profiler.

Continuous Profiling para sa mga Always-On System

  • [ 1 ] Pagkakaiba:
  • One-Off Profiler: Sinusukat ang oras ng iisang pagtakbo (pagsisimula at paghinto ng timer).
  • Continuous Profiler: Kumukuha ng profile data nang pana-panahon sa mga itinakdang interval (hal., bawat 10 segundo sa loob ng 5 minuto) at iniimbak ito sa external storage (hal., Amazon S3).
  • [ 2 ] Halimbawa ng Paggamit:
  • Angkop para sa mga always-on system gaya ng daemon o web server, lalo na kapag biglang tumataas ang traffic.
  • [ 3 ] Solusyon:
  • AWS: Gamitin ang CodeGuru o pamahalaan ang Grafana gamit ang Pyroscope.
  • Open Source: Pyroscope, na bahagi na ngayon ng mga Grafana solution.

Pagsusuri ng Profile Data

  • Halimbawa ng Screenshot: Amazon Managed Grafana na may Pyroscope plugin na nagpapakita ng estadistikal na paggamit ng resource para sa bawat stack.
  • Susunod na Hakbang: Pagkatapos mangolekta ng data, magpatuloy sa yugto ng pagsusuri upang matukoy at maayos ang mga performance issue.

Pag-visualize ng Profile Data gamit ang mga Flame Graph

  • Flame Graph: Isang kilalang paraan upang i-visualize ang profile data.
  • Hamon: Upang maunawaan kung paano basahin ang isang flame graph, kailangan ang kaalaman sa source code, kahulugan ng visualization, at mga pangunahing konsepto ng computer science.

Pagbasa ng Flame Graph

  • [ 1 ] Halimbawang Graph:
  • Ipinapakita ang CPU usage ng buong program stack.
  • [ 2 ] Interpretasyon:
  • Mahahabang Bar: Nagpapahiwatig ng mataas na pagkonsumo ng resource.
  • sys.call.read: Isang system call para sa pagbabasa na kumokonsumo ng maraming CPU.
  • os.file.read: Isang standard Go library function para sa pagbabasa ng mga physical file, na malamang ay mahusay ang implementation at performance.
  • [ 3 ] Konklusyon: Maaaring nasa paraan ng hindi mahusay na pagtawag ng custom function (ang Cut function na ginagaya ang GNU Cut command) sa Os.file.read ang problema.

Halimbawang Implementation ng Function

  • cut Function: Isang function na ginagaya ang gawi ng GNU Cut command.
  • Susunod na Hakbang: Suriin ang implementation ng Cut function upang matukoy ang mga posibleng inefficiency sa paraan ng pagtawag nito sa os.file.read.

Demo

Kawalan ng Kahusayan sa Pagbasa ng File

  • Natukoy na Issue: Binabasa ng program ang file nang tig-iisang byte, na hindi mahusay dahil nagti-trigger ng system call ang bawat byte na binabasa.
  • Kinakailangang Kaalaman: Upang maunawaan kung bakit hindi ito mahusay, kailangan ang kaalaman sa user land at kernel land, gayundin sa mga prinsipyo ng computer science.

Papel ng mga AI Assistant sa Profiling

  • Tulong ng AI: Makakatulong ang mga AI assistant, lalo na ang mga Large Language Model (LLM), sa pagbibigay-kahulugan sa profile data.
  • Kaangkupan para sa Operations: Mas angkop ang mga LLM sa operations kaysa development dahil mas maliit at mas deterministic ang mga output sa operations (gaya ng pagtukoy ng issue) at mayaman ang context nito (mga system specification, telemetry data, at log).
  • Development kumpara sa Operations: Nangangailangan ang development ng pagbuo ng maraming source code na may hindi tiyak na output, kaya hindi ito gaanong angkop para sa mga LLM.

Paggamit ng mga AI Assistant kasama ang Profile Data

  • Demo: Gumagamit ang isang empleyado ng AWS ng AI assistant upang suriin ang profile data at source code at matukoy ang mga performance issue.
  • Proseso:
  • [ 1 ] Hilingin sa AI assistant na suriin ang profile data at source code.
  • [ 2 ] Tinutukoy ng assistant na kailangan ng mga tool upang i-visualize ang profile data.
  • [ 3 ] Kapag inaprubahan, ipinapakita ng assistant ang CPU usage ayon sa function at tinutukoy ang eksaktong function na sanhi ng issue.
  • [ 4 ] Nagbibigay ang assistant ng impormasyon tungkol sa CPU usage sa bawat linya at nagmumungkahi ng mga pagpapahusay.

Buod

  • Profile Data: Mahalaga sa pag-uugnay ng mga performance issue sa aktuwal na pagpapahusay ng code.
  • Tradisyonal na Pagsusuri: Nangangailangan ng malalim na kaalaman sa mga system at computer science.
  • Tulong ng AI: Ginagamit ang profile data upang maturuan ang mga user kung paano ito magagamit at upang mapabilis ang development.