Thời gian thực thi của các computer operations điển hình

Năm 2010, trong bài chia sẻ về những bài học từ việc xây dựng Software Systems ở Google với sinh viên Đại học Stanford, Tiến sĩ Jeff Dean – Trưởng khoa của Google’s School of Infrastructure Wizardry, có vai trò quan trọng trong nhiều hệ thống ở Google như: TensorFlow, ProtocolBuffers, Bigtable, MapReduce, LevelDB, … – đã tiết lộ thời gian thực thi của các computer operations điển hình.

Mặc dù các con số trong đó có thể đã không còn đúng với những máy tính mạnh mẽ ngày nay, nhưng chúng ta vẫn có thể dựa vào những con số đó để dễ dàng hình dung về sự nhanh và chậm khác nhau của các computer operations.

OperationThời gian thực thi
L1 cache reference0,5 ns
Branch mispredict5 ns
L2 cache reference7 ns
Mutex lock/unlock100 ns
Main memory reference100 ns
Compress 1K bytes with Zippy10.000 ns = 10 μs
Send 2K bytes over 1 Gbps network20.000 ns = 20 μs
Read 1 MB sequentially from memory250.000 ns = 250 μs
Round trip within same datacenter500.000 ns = 500 μs
Disk seek10.000.000 ns = 10 ms
Read 1 MB sequentially from network10.000.000 ns = 10 ms
Read 1 MB sequentially from disk30.000.000 ns = 30 ms
Send packet CA->Netherlands->CA150.000.000 ns = 150 ms

LƯU Ý

ns = nanosecond, μs = microsecond, ms = millisecond

1 ns = 10⁻⁹ seconds

1 μs= 10⁻⁶ seconds = 1.000 ns

1 ms = 10⁻³ seconds = 1.000 μs = 1.000.000 ns

Sau đó, một software engineer của Google đã xây dựng một công cụ để visualize các số liệu trên của Tiến sĩ Jeff Dean.

Thời gian thực thi của các computer operations điển hình

Bằng cách phân tích các số liệu này, chúng ta có thể dễ dàng hiểu hơn về các lý thuyết mà các thầy cô trên trường hay nhắc đến:

  • Tốc độ đọc dữ liệu từ memory nhanh hơn ổ cứng (disk) nhiều như thế nào.
    • Read 1 MB sequentially from memory (250.000 ns = 250 μs)
    • Read 1 MB sequentially from disk (30.000.000 ns = 30 ms).
  • Hạn chế thực hiện tìm kiếm trên ổ cứng nhất có thể.
    • Disk seek (10.000.000 ns = 10 ms)
  • Các thuật toán nén dữ liệu (compress) cơ bản thực hiện rất nhanh. Hãy thực hiện nén dữ liệu trước khi truyền qua internet nếu có thể.
    • Compress 1K bytes with Zippy (10.000 ns = 10 μs)
  • Các Data Center thường được đặt ở các region khác nhau, vì vậy sẽ có độ trễ giữa thời gian truyền tin giữa chúng.
    • Send packet CA->Netherlands->CA (150.000.000 ns = 150 ms)

Lời nhắn

Bạn có thể tham khảo thêm những bài viết trong series “System Design” của mình trên blog này nhé. Hi vọng kiến thức này hữu ích với bạn.

Follow mình trên Facebook “CLB Lập trình – THPT Ngọc Tảo” hoặc kênh Youtube “Tờ Mờ Sáng học Lập trình” để cùng nhau học tập, chia sẻ những kiến thức công nghệ và lập trình hoàn toàn miễn phí nhé!

Facebook CLB Lập trình – THPT Ngọc Tảo: https://www.facebook.com/clb.it.ngoctao/

Youtube Tờ Mờ Sáng học Lập trình: https://www.youtube.com/@tmsanghoclaptrinh

Hẹn gặp lại 👋

Bạn có thể đọc thêm

Clean Architecture: A Craftsman’s Guide to Software Structure and Design – Robert C. Martin

Designing Data – Insensitive applications – Martin Kleppmann

System Analysis and Design – Alan Dennis, Barbara Haley Wixom, Roberta M. Roth

System Design Interview – Alex Xu

Modern Systems Analysis and Design – Joseph Valacich, Joey George

Head First Design Patterns – Eric Freeman, Elisabeth Robson