Skip to content

Program optimization

프로그램 최적화(program optimization) 또는 소프트웨어 최적화(software optimization)는 정보 공학에서 시스템을 수정하여 어떠한 면의 작업이 더 효과적으로, 또는 자원을 덜 사용하도록 만드는 작업을 말한다. 이를테면, 컴퓨터 프로그램은 더 빠르게 실행되거나 기억 장치나 자원을 덜 차지하게 하여 운영케 하거나, 전력을 덜 쓰게 함으로써 최적화될 수 있다. 이러한 시스템은 인터넷과 같은 완전한 네트워크나 컴퓨터의 모임으로서 단일의 컴퓨터 프로그램이 될 수 있다.

Performance Tuning

Performance tuning is the improvement of system performance. This is typically a computer application, but the same methods can be applied to economic markets, bureaucracies or other complex systems. The motivation for such activity is called a performance problem, which can be real or anticipated. Most systems will respond to increased load with some degree of decreasing performance. A system's ability to accept higher load is called scalability, and modifying a system to handle a higher load is synonymous to performance tuning.

Systematic tuning follows these steps:

  1. Assess the problem and establish numeric values that categorize acceptable behavior.
  2. Measure the performance of the system before modification.
  3. Identify the part of the system that is critical for improving the performance. This is called the bottleneck.
  4. Modify that part of the system to remove the bottleneck.
  5. Measure the performance of the system after modification.
  6. If the modification makes the performance better, adopt it. If the modification makes the performance worse, put it back the way it was.

This is an instance of the measure-evaluate-improve-learn cycle from quality assurance.

A performance problem may be identified by slow or unresponsive systems. This usually occurs because high system loading, causing some part of the system to reach a limit in its ability to respond. This limit within the system is referred to as a bottleneck.

A handful of techniques are used to improve performance. Among them are code optimization, load balancing, caching strategy, distributed computing and self-tuning.

Compiler

Memory

Hardware

CPU

동기화 (Synchronization)

Process/Thread

  • Multi-process
  • Multi-threaded
  • Green threads
  • User level scheduling
  • Work-stealing queue
  • thread pool 설계
  • Coroutine
  • Async-await

Networking

TCP tuning

Load Balancing

  • L4/L7 로드밸런싱
  • Consistent hashing
  • 분산 시스템
  • Connection pooling
  • keep-alive

High Performance Browser Networking

Performance is a feature. This book provides a hands-on overview of what every web developer needs to know about the various types of networks (WiFi, 3G/4G), transport protocols (UDP, TCP, and TLS), application protocols (HTTP/1.1, HTTP/2), and APIs available in the browser (XHR, WebSocket, WebRTC, and more) to deliver the best—fast, reliable, and resilient—user experience.

HTTP/Web

네트워크 토폴로지 (Network topology)

Filesystem

Programming language

Database

확장성 및 아키텍처

수평/수직 확장

  • Stateless 서비스 설계 원칙
  • Session clustering과 분산 캐시
  • Service mesh와 마이크로서비스 패턴
  • Event-driven architecture와 메시지 큐

분산 시스템

  • CAP theorem과 일관성 모델
  • Consensus 알고리즘 (Raft, Paxos)
  • Distributed tracing과 observability
  • Circuit breaker와 bulkhead 패턴

모니터링 및 성능 최적화

시스템 메트릭

  • CPU utilization vs load average 차이
  • Context switch rate와 run queue depth
  • Memory bandwidth와 saturation
  • Disk I/O patterns (sequential vs random)

프로파일링

  • Flame graph로 CPU 병목 분석
  • Memory profiling (heap, leak detection)
  • perf, eBPF 같은 저수준 도구 활용
  • Application Performance Monitoring (APM)

성능 튜닝

  • Amdahl's law와 병렬화 한계
  • Latency percentiles (p50, p95, p99)
  • Queueing theory와 Little's law
  • Batch processing vs Streaming tradeoffs

보안 및 권한

  • Rate limiting과 DDoS 방어
  • TLS/SSL 성능 최적화
  • JWT vs Session 기반 인증
  • Container security와 privilege escalation
  • Filesystem in Userspace (FUSE)

안정성

  • Graceful shutdown과 zero-downtime deployment
  • Health check와 readiness probe 설계
  • Chaos engineering 원칙
  • Backup과 disaster recovery 전략

See also

Favorite site

References


  1. Handling_traffic_on_the_Naver_main_page.pdf 

  2. How-to-check-single-server-load-average.pdf