Powered by Blogger.

Căn bản về kiến trúc cơ sở hạ tầng, Phần 2: Phát hiện, phòng tránh, và loại trừ các tắc nghẽn hệ thống

Các hệ thống luôn luôn có những giới hạn về tài nguyên. Thuật ngữ nút cổ chai dùng để miêu tả khi một hệ thống xảy ra sự mất cân bằng về tài nguyên và nó làm tốc độ xử lý ở một số giai đoạn bị chậm khiến cho việc sử dụng tài nguyên không được hợp lý. Theo lý thuyết, một hệ thống có thể mở rộng được và có khả năng cân băng tài nguyên tốt, sẽ không bao giờ bị hiện tượng tắc nghẽn và lãng phí tài nguyên. Việc tìm ra các công cụ và phương pháp để phát hiện, loại trừ và tránh các tắc nghẽn hệ thống sẽ giúp bạn có thể cung cấp một hệ thống có hiệu suất cao nhất và với chi phí thấp nhất cho những ứng dụng và người sử dụng.

Đây là bài viết thứ hai trong loạt bài Căn bản về kiến trúc cơ sở hạ tầng. Bài viết này sẽ giúp các nhà thiết kế hệ thống và các nhà kiến trúc giải pháp có các công cụ và phương pháp để giải quyết thành công sự tắc nghẽn. Những dạng tắc nghẽn thường là dải tần, dung lượng, hay giới hạn xử lý, mà ở đó các ứng dụng là bộ xử lý, đầu vào/đầu ra (I/O), bộ nhớ, hay giới hạn lưu trữ. Mặc dù vậy, các ứng dụng thời gian thực cũng có thể có các yêu cầu về độ trễ phản hồi lại các tắc nghẽn.

Tắc nghẽn ở tất cả các biểu mẫu của hệ thống

Nếu bạn muốn tìm hiểu thêm về các hệ thống nhạy với độ trễ và cân bằng tài nguyên, hãy xem Tài nguyên để biết liên kết tới các bài báo về chủ đề này trên IBM® developerWorks và phần các dịch vụ Web.

Yêu cầu đầu tiên của bạn là phải biết cách tránh các tắc nghẽn. Thứ hai, bạn phải biết cách phát hiện các tắc nghẽn trong hệ thống, đó có thể là vấn đề thực thi chậm hoặc vấn đề biến đổi quy mô hệ thống. Cuối cùng, bạn cần nghiên cứu cách sử dụng các công cụ và phương pháp để loại trừ các tắc nghẽn. Trong bài viết này, tôi sẽ miêu tả các công cụ và phương pháp để tránh, phát hiện, và loại trừ các tắc nghẽn, bao gồm: tắc nghẽn I/O, bộ xử lý, và bộ nhớ trên các hệ thống dựa trên Linux® và Microsoft® Windows®. Đã có bài viết về cách tránh, phát hiện, và loại trừ các tắc nghẽn, nhưng bài viết này sẽ cung cấp những ví dụ cụ thể cũng như những giải thích chi tiết hơn, giúp bạn có thể giải quyết được những vấn đề khó khăn của các hệ thống lớn — ở mức độ cơ sở hạ tầng.

Tắc nghẽn I/O

Tắc nghẽn I/O đã trở thành vấn đề rất phổ biến bởi vì sự nâng cấp không ngừng của bộ xử lý và tài nguyên bộ nhớ. Việc tăng tốc độ xung nhịp cho bộ xử lý và truy cập bộ nhớ diễn ra liên tục. Ngày nay, phần lớn các hệ thống có nhiều bộ xử lý, và các bộ xử lý thường là đa lõi và chạy với tốc độ GHz. Ví dụ, một máy chủ cao cấp có thể có 4 bộ xử lý 4 lõi với tốc độ GHz .

Cùng với đó, tốc độ truy cập bộ nhớ cũng đang được nâng cấp để theo kịp với tốc độ của lõi. Hai loại bộ nhớ chủ yếu được sử dụng hiện nay là DDR3 và FB-DIMM (Fully Buffered) cùng với các cây lưu trữ tạm thời L1/L2/L3 lớn hơn. Mặc dù bộ xử lý và bộ nhớ vẫn chủ yếu là những nguồn xảy ra sự tắc nghẽn, nhưng I/O thường bị bỏ qua và không được kiểm tra cẩn thận. Phần này sẽ kiểm tra các công cụ và phương pháp để tránh, phát hiện, và loại trừ các tắc nghẽn trong:
  • Các liên kết cấu trúc và bus có khả năng mở rộng như PCI Express.
  • Kênh máy chủ, các bộ điều hợp mạng bus và các mạch điều khiển I/O.
  • Các thiết bị lưu trữ.

Việc truy cập kho lưu trữ không tuân theo luật Moore

Mặc dù phần lớn điện toán được hưởng lợi từ việc tăng gấp đôi mật độ tích hợp từ 18 tháng đến 2 năm một lần, nhưng việc truy cập kho lưu trữ truyền thông ổ xoay thì không. Dung lượng lưu trữ đã tăng gấp đôi qua từng giai đoạn, nhưng việc truy cập vẫn bị giới hạn bởi cơ chế luân phiên của các đĩa và dẫn động secvô, trong nhiều thập kỷ qua. Thiết bị bán dẫn (SSD) và các dãy đĩa song song là những giải pháp giúp các nhà thiết kế hệ thống giải quyết những tắc nghẽn lớn có thể xảy ra. SSD bao gồm cả đĩa RAM và đĩa flash. Xu hướng sử dụng flash SSD trong các hệ thống lớn đang ngày càng phổ biến, mặc dù nó có chi phí cao và tổng dung lượng cho nội dung thấp. Các dãy đĩa song song lớn đang được xây dựng bằng việc sử dụng các đĩa quay có hệ số biểu mẫu rất nhỏ để tăng mật độ của các bộ dẫn động và trục quay trong các đĩa dự phòng mảng độc lập (RAID) Hệ thống phụ I/O.

Kiến thức và kỹ năng: Tránh các tắc nghẽn I/O

Cách tốt nhất để tránh một tắc nghẽn I/O là cần đánh giá và thiết kế cẩn thận giao diện I/O từ giao diện của tổ hợp bộ xử lý xuống tới các kênh I/O, và bao gồm cả các nguồn và bộ chứa cơ bản dành cho dữ liệu tốc độ cao, như là các thiết bị lưu trữ và mạng cũng như các hệ thống phụ. Phương pháp giáp mối (end-to-end) này rất quan trọng bất kể đối với một hệ thống được thiết kế sẵn (OTS) hay được được thiết kế tùy chỉnh. Các hệ thống OTS vẫn yêu cầu lựa chọn cẩn thận các thành phần và các hệ thống phụ quan trọng như dưới đấy:
  • Lựa chọn mạch điều khiển bộ nhớ và chipset I/O, đặc biệt với khóa chuyển mạch PCI-e dành cho việc mở rộng kênh I/O
  • Hiệu năng của mạch điểu khiển giao diện mạng (NIC), bộ điều hợp kênh máy chủ (HCA), bộ điều hợp bus máy chủ (HBA), và khả năng cân bằng dải tần và các hoạt động đầu vào và đầu ra để đo các độ trễ
  • Khả năng của thiết bị lưu trữ với công nghệ được lựa chọn dựa trên chi phí không chỉ về dung lượng mà còn sự thực thi truy cập

Bộ nhớ và các chipset mạch điều khiển I/O là một thành phần quan trọng của các hệ thống có thể mở rộng được và thường là nguồn xảy ra tắc nghẽn và vấn đề biến đổi quy mô hệ thống. Phần lớn các tổ hợp bộ xử lý được thiết kế giao diện cho các kênh I/O như là Infiniband, gigE/10GE Ethernet, Fibre Channel, và các mạng và cấu trúc dải tần cao khác, thông qua PCI Express. Vấn đề quan trọng của việc thiết kế là liệu mỗi nút (máy chủ hay nhóm bộ xử lý) trong thiết kế hệ thống tổng thể có đủ các kênh I/O dành cho:
  • Kết nối với kho lưu trữ.
  • Kết nối tới các mạng dịch vụ máy khách.
  • Kết nối với các mạng hay cấu trúc có hiệu lực cao. Điều này cung cấp sự mở rộng khung lưới hay các cụm máy.

Phần lớn các nhà thiết kế quan tâm trước tiên tới các yêu cầu về mạng và lưu trữ và đảm bảo rằng có đủ các kênh I/O, nhưng họ thường quên chú ý tới sự tương thích của các kênh I/O đối với các kết nối mạng hay cấu trúc biến đổi quy mô. Biến đổi quy mô các kênh I/O rất quan trọng vì nó giúp các vấn đề tắc nghẽn hệ thống có thể được giải quyết trong tương lại. Kích cỡ của một nút không cần phải lớn, nhưng một khối xây dựng cho biến đổi quy mô hệ khung lưới và các cụm máy cần được cân bằng tốt vì điều này rất quan trọng. Xem Tài nguyên để có liên kết tới các giải pháp khóa chuyển mạch PCI-e dành cho các kênh I/O.

Các kết nối tới kho lưu trữ và các mạng dịch vụ máy khách dành cho việc biến đổi quy mô hệ thống bao gồm việc sử dụng của NIC, HCA, hay HBA. Những bus máy chủ có giao diện mạch điều khiển I/O có thể mở rộng này giống như PCI-e đối với các mạng, cấu trúc, và các mạng vùng lưu trữ (SAN). Để tránh bị tắc nghẽn ở một trong những mạch điều kiện này, hãy kiểm tra đơn thể sự thực thi, và xem xét cẩn thận các kỹ thuật bên dưới. Ví dụ, một NIC đơn giản sẽ cần xử lý quan trọng trên hệ thống máy chủ để chạy một cấu trúc giao thức truyền tải, trong khi một động cơ giảm tải TCP (TOE) và phần lớn SAN HBA cung cấp xử lý giao thức quan trọng trên mạch điều kiện hơn là nạp hệ thống máy chủ.

Tốc độ truyền tải và sự cân bằng giữa khoảng cách, nguồn điện, và tốc độ truyền (bit) cũng cần được xem xét kỹ lưỡng. Ví dụ, Infiniband có thể hỗ trợ tốc độ dữ liệu chập bốn (QDRs) của 40Gbps dành cho các cụm máy, mặc dù Ethernet có thể tốt hơn cho tính khả vận nội tại. Sự so sánh tổng thể của các giao thức này không phải là mục đích của bài viết này, nhưng những phần phát hiện và loại trừ cung cấp các công cụ đánh giá tốt cho việc kiểm tra lựa chọn.

Ngày nay, phần lớn lưu trữ có thề mở rộng được là thiết bị lưu trữ được đính kèm SAN hay đính kèm mạng (NAS) hơn là một đính kèm trực tiếp với các mạch điều khiển ATA hay SCSI, nên các mạng và đính kèm lưu trữ đang hội tụ. Lưu trữ mạng có thể được đính kèm SAN, nơi hệ thống phụ SAN cung cấp truy cập khối cho các tập hợp của các đĩa tới các máy chủ khởi đầu dành cho việc truy cập cả hai bộ đĩa (JBOD) hay các dãy đĩa RAID. NAS chủ yếu được truy cập bởi các máy khách hệ thống tệp mạng (NFS) (hay các giao thức các cụm máy hay hệ thống tệp được phân phối khác) qua một đầu hay cổng nối NAS và thỉnh thoảng bởi lưu trữ được đính kèm trực tiếp.

Các công cụ và kỹ thuật: Phát hiện các tắc nghẽn I/O

Điều khiển các kênh I/O và NIC/HBA/HCA với một máy phát điện tải trọng có thể cung cấp cùng lúc hai hoạt động Đọc và Ghi với nhiều I/O với kích cỡ khác nhau. Đây là một trong những cách tốt nhất để tìm ra các tắc nghẽn I/O. Mặc dù vậy, điều khiển tải trọng với một công cụ như IOzone dành cho Linux và Windows hay Iometer dành cho Windows và Linux (xem Tài nguyên) cũng rất hữu ích trong việc giám sát các số liệu cho các truyền tải I/O. Đối với Linux, bạn có thể giải quyết việc này bằng SYSSTAT (hay iostat); đối với Windows, bạn có thể thực hiện với giám sát thực thi (PerfMon — xem Tài nguyên).

Chú ý rằng IOzone làm việc tương đối tốt trên Windows như là trên Linux và chạy qua một hệ thống tệp. Việc chạy qua hệ thống tệp giúp thuận tiện trong việc kiểm tra thực thi của hệ thống tệp (các tính năng lưu trữ tạm thời và bộ nhớ đệm I/O) cùng với sự thực thi khối I/O ở dưới, nhưng nó yêu cầu sự phân tích cẩn thận để phân biệt giữa các vận chuyển I/O được trữ và hoạt động thực của kênh I/O. Iometer có thể chạy trên cả ổ đĩa vật lý không được định dạng và ổ đĩa với hệ thống tệp NTFS trong Windows. Khả năng chạy trên các ổ đĩa vật lý cung cấp một phương pháp cho việc quyết định một kênh I/O không có lưu trữ tạm thời và bộ nhớ đệm để lưu trữ thực thi. Iometer trong Linux chủ yếu chỉ chạy qua một hệ thống tệp. Bạn có thể chạy IOzone với các tệp đủ lớn và với đủ người vận hành I/O cùng lúc mà bạn có thể đạt tới đỉnh lưu trữ tạm thời — điểm mà tại đó các I/O không thể đáp ứng của việc Đọc từ lưu trữ tạm thời và Ghi tới các bộ đệm.

Việc sử dụng IOzone trong Windows để phân tích lưu lượng đĩa (xem Hình 1), độ trễ của đĩa và độ sâu của hàng đợi (xem Hình 2), và các đặc điểm kích cỡ vận chuyển của đĩa I/O (xem Hình 3) tương đối đơn giản. Bạn có thể sử dụng các tệp cấu hình Perfmon.msc có trong phần Tải xuống, minh họa bằng biểu đồ cho các tham số thực thi này bằng cách chạy tải trọng với lệnh:

iozone.exe -i0 -i1 -i2 -R -s100M -r128K -t32 -T


Lệnh này chạy lần lượt Ghi qua với các luồng 32 người dùng, các yêu cầu chuyển giao 128KB I/O sử dụng các tệp 100MB sau một Đọc tuần tự, và sau đó chạy lệnh Đọc ngẫu nhiên, tiếp theo là việc Ghi. Đọc Ngẫu nhiên và Ghi có mức thực thi thấp hơn nhiều so với tuần tự, bởi vì đĩa phải tìm kiểm và xoay vòng những vị trí ngẫu nhiên trên phương tiện lưu trữ.
Hình 1. Đĩa Ghi/Đọc qua nút cổ chai


Chú ý rằng Hình 1 biểu thị việc Ghi sau khi quá trình Ghi đầu tiên hoàn thành một nửa như trên biểu đồ, đối với việc chạy -i0, và sau đó biểu thị thực thi việc Đọc cho -i1 cho một nửa còn lại trên biểu đồ, như trong Hình 2 và Hình 3. Rõ ràng, ổ đĩa SATA 2.5" trong chiếc máy tính xách tay của tôi bị một tắc nghẽn với tốc độ của I/O khoảng 20MB/sec. Đối với thực thi truy cập lớn hơn đến dữ liệu lưu trữ, tôi cần một thiết bị nhanh hơn, như ổ đĩa SAS (10,000 RPM), dãy đĩa RAID, hay một SSD.
Hình 2. Tốc độ vận chuyển của đĩa I/O dành cho việc Ghi/Đọc



Trong Hình 2, tốc độ vận chuyển 64K của đĩa I/O dường như phù hợp với hệ thống tệp NTFS trong cả việc Đọc và Ghi.
Hình 3. Đĩa I/O chờ trong hàng để Ghi/Đọc



Trong Hình 3, bạn có thể thấy rằng với các hệ thống tệp NTFS, có một thuận lợi rất lớn đối với các bộ đệm Ghi, chúng giữ hàng chờ Ghi xuống ít hơn năm I/O và độ trễ dưới 50 mili giây. Mặc dù vậy, đối với việc Đọc, bạn thấy một kịch bản khác hoàn toàn, với độ trễ lên tới 500 mili giây và một hàng chờ đọc với 35 đến 40 I/O. Bảng 1 là kết quả IOzone cho ổ đĩa SATA trong chiếc máy tính xác tay của tôi, IOzone chạy trong một thư mục trên Windows XP với hệ thống tệp NTFS. IOzone cũng chạy giống như trên Linux, và bạn có thể sử dụng iostat để giám sát các số liệu
Bảng 1. Kết quả IOzone biểu thị một tắc nghẽn trong ổ đĩa SATA
Tải trọngKB/sGhi lần đầu 17476.48
Ghi lại 17407.94
Đọc lại 6595.88
Đọc Ngẫu nhiên 6080.07
Ghi Ngẫu nhiên 9378.40


Các công cụ hữu ích khác để điều khiển I/O hay mạch điều khiển mạng và phân tích kết quả:
Netperf, dành cho việc tạo ra các gói tin TCP hay giao thức gói dữ liệu người dùng (UDP) trên Linux.
Wireshark, dành cho giao thức mạng IP và phân tích thực thi trên cả máy chủ Linux và Windows.
SYSSTAT dành cho Linux.
Microsoft SQLIO dành cho Windows, nó cung cấp phân phối độ trễ.

Tôi không trình bày chi tiết các công cụ này ở đây, nhưng tất cả các công cụ này đều dễ nghiên cứu và sử dụng. Khả năng điều khiển I/O tới lưu trữ hay các giao diện mạng và để tập hợp và phân tích lưu lượng I/O, tất cả những điều này đều rất cần để phát hiện ra các tắc nghẽn I/O.
Kiến thức và kỹ năng: Loại trừ các tắc nghẽn I/O

Bạn có thể loại trừ các tắc nghẽn I/O và lưu trữ theo nhiều cách khác nhau, nhưng bạn phải xem xét cẩn thận về mặt chi phí, sự thực thi, và cân bằng dung lượng. Các lựa chọn dành cho việc biến đổi quy mô hệ thống từ các đĩa SATA/SAS được đính kèm trực tiếp, được tìm thấy trong các máy chủ:
Nâng cấp HDD trục xoay lên SSD.
Các bộ đĩa và các mạch điều khiển RAID trong máy chủ (có thể mở rộng lên tới 8 đĩa SFF 2.5" SAS trong 2RU hay 16 trong 4RU— ví dụ, các máy chủ IBM System x®).
Các dãy đĩa RAID được đính kèm SAN có thể mở rộng I/O ngẫu nhiên lên tới petabyte và gigabyte.
Các đầu và cổng NAS cung cấp các dịch vụ tệp cho các máy khách.

Lựa chọn SSD nói chung bao gồm cả đĩa RAM và đĩa flash. Cả hai chi phí rất đắt nhưng tất nhiên chúng cung cấp sự thực thi tối ưu với một dung lượng rất nhỏ. Hiện nay, nhiều nhà cung cấp đã đưa ra các sản phẩm SSD. Thực thi chính xác nhưng chi phí trên một gigabyte ít nhất cũng cao gấp 10 đến 20 lần so ổ đĩa quay. Đĩa RAID tất nhiên có giới hạn, nhưng 16 trục quay có thể loại trừ tắc nghẽn lưu trữ I/O cho nhiều ứng dụng cần tới hàng trăm megabyte để thực thi. Đối với những ứng dụng cần tới hàng gigabyte để thực thi, thì sự lựa chọn tốt nhất là SAN hay NAS. Ở đây, bạn có rất nhiều lựa chọn, nhưng một trong những lựa chọn tốt nhất là thừa số biểu mẫu nhỏ, dãy đĩa dày như là Atrato v1000 (xem Tài nguyên), nó sử dụng một mạch điều khiển IBM System x3650.

Tắc nghẽn bộ xử lý

Các tắc nghẽn bộ xử lý thường xảy ra với các ứng dụng điện toán lớn như là xử lý tệp ảnh hay các thuật toán là các NP-hard. Bình thường, rất nhiều hệ thống có bộ xử lý dự phòng; nhưng thực tế, chúng có thể gây tốn điện hay tỏa nhiệt lớn trong khi nó lại không giúp cải thiện nhiều cho tổng thể thực thi hệ thống. Khi bạn phát hiện một tắc nghẽn bộ xử lý, bạn (cơ bản) có ba tùy chọn để loại trừ nó:
  • Thêm tài nguyên bộ xử lý.
  • Tối ưu các mã trình ứng dụng để sử dụng các tài nguyên bộ xử lý một cách hiệu quả hơn.
  • Thêm các động cơ giảm tải máy chủ cho các xử lý liên quan tới I/O lưu trữ và mạng.

Thêm các tài nguyên bộ xử lý bằng cách thêm các bộ xử lý đa lõi. Việc này giúp các ứng dụng được phân luồng và các hệ thống hoạt động máy chủ có thể cân bằng nạp qua nhiều lõi khác nhau: Điều này rất phổ biến hiện nay. Bạn có thể tối ưu hóa bằng cách sử dụng các công cụ định hình, nhưng thường thực hiện như vậy đòi hỏi người phát triển phải mất nhiều thời gian để mã hóa lại các ứng dụng và kiểm tra hồi quy sau khi kết thúc tối ưu hóa. Đưa thêm các lõi bộ xử lý vào các điểm tắc nghẽn thường là phương pháp đơn giản nhất, nhưng nó sẽ làm tăng lượng tiêu thụ điện. Phương pháp trước đây là nâng cấp tốc độ xung nhịp bộ xử lý không tạo được hiệu quả vì nó tiêu tốn điện lớn, tỏa nhiệt nhiều, và những vấn đề thiết kế phần cứng không đáp ứng tốc độ GHz. Phần này đề cập các công cụ định hình để tối ưu hóa mã trình và luồng đa lõi. Các máy chủ giảm tải với các động cơ giảm tải I/O như là TOE cũng là một lựa chọn đáng để xem xét.

Kiến thức và kỹ năng: Tránh các tắc nghẽn bộ xử lý

Các tài nguyên bộ xử lý có kích cỡ tương ứng dựa trên định hình ứng dụng và phân tích tổ hợp các thuật toán là cách tốt nhất để tránh một tắc nghẽn bộ xử lý. Phép đo lường để đo MIPS và FLOPS cũng rất hữu ích, nhưng nói chung, một trong những cách để thiết lập kích cỡ cho bộ xử lý bạn cần là chạy các kiểm tra với các ứng dụng thực và định hình đơn giản và ước lượng biến đổi quy mô hệ thống với tốc độ xung nhịp và khả năng thực hiện tính toán song song giữa một ứng dụng tồn tại. Xem lại luật Amdahl:
Equation 1. Amdahl's law for speed-up by parallel execution
Speedup = 1 / [(1 - P) + (P/N)]

nơi P là một phần của thuật toán có thể được tạo song song và N là số bộ xử lý. Tất nhiên trong trường hợp tốt nhất, tốc độ là 1/[1/n], trong đó N cho thuật toán song song hay ứng dụng. Rất nhiều ứng dụng có thể song song, những một trong đó không thể như vậy, nên đây là một xem xét cơ bản trước khi đầu tư thêm nhiều lõi bộ xử lý và cố gắng phân luồng một ứng dụng. Việc hiểu rõ tổ hợp thuật toán bên dưới và liệu nó là P, NP-Complete, hay NP-hard, là vấn đề rất cơ bản. (NP có nghĩa là một thuật toán sẽ chạy trong thời gian đa thức, không xác định.)

Hoàn toàn không thực tế khi tin rằng bạn có thể tránh một tắc nghẽn bộ xử lý bằng cách viết lại thuật toán NP thành thuật toán tổ hợp P, nhưng hy vọng điều đó sẽ xảy ra. Nhiều sự tối ưu hóa và các thuật toán đồ thị giao nhau rất hữu ích nhưng NP-hard thì không. Tổ hợp thuật toán có thể cũng đơn giản, nhưng những yêu cầu cao tầng cho các điện toán cũng có thể làm tràn một bộ xử lý; trong những trường hợp này, bạn có thể thường sử dụng giảm tải để tránh tắc nghẽn bộ xử lý. Ví dụ, bạn có thể sử dụng những đơn vị xử lý đồ họa (GPU) để giảm tải cho các hoạt động xử lý hình ảnh đơn giản. Những hoạt động này bao gồm những hoạt động đơn giản nhưng trong đó các hình ảnh có dung lượng hàng triệu pixel. Lý tưởng, phòng tránh là biện pháp tốt nhất, nhưng mã trình thường được sử dụng lại hay các ứng dụng được chứa, và nó cần thiết phải tìm ra nguồn tắc nghẽn của bộ xử lý. May mắn là có rất nhiều công cụ giúp để thực hiện điều này.

Công cụ và kỹ thuật: Phát hiện các tắc nghẽn bộ xử lý

Chi tiết về phân tích tắc nghẽn bộ xử không được đề cập trong bài viết này, nhưng bạn có thể tìm hiểu sâu hơn trong các bài viết như là "Các bài học lớn, Phần 3: Điều chỉnh và giám sát thực thi." Tổng thể, các phương pháp này có thể được tổng kết như dưới đây:
  • Chạy định hình thời gian của các ứng dụng để quyết định độ dài đường dẫn của thuật toán (số lượng của chỉ dẫn cho một khối mã trình).
  • Chạy định hình thời gian để quyết định sự thi hành hiệu quả của một đường dẫn (bao nhiêu thời gian để đi qua một khối các chỉ dẫn).
  • Phân tích hiệu của của đường ống dẫn bộ xử lý (một đường ống dẫn có thể ngưng hoạt động vì thiếu lưu trữ tạm thời, phụ thuộc dữ liệu và I/O, thiếu sự dự báo như là thiếu sự dự báo brand.)
  • Phân tích luồng để quyết định hoạt động luồng và nạp cân bằng cho ánh xạ tới các lõi bộ xử lý.

Bởi vì các công cụ cho những phương pháp này đã được đề cập chi tiết trong các bài viết khác, nên tôi chỉ cung cấp danh sách những công cụ thường được dùng:
  • PerfMon trên Windows
  • Intel® VTune và các công cụ đơn vị giám giát thực thi (PMU) khách dành cho Linux và Windows
  • Oprofile cho Linux
  • pfmon cho Linux
  • Valgrind cho Linux, những công cụ này giúp tìm ra các luồng lõi

Kiến thức và kỹ năng: Loại trừ các tắc nghẽn bộ xử lý

Loại trừ các tắc nghẽn bộ xử lý cũng giống như việc tránh tắc nghẽn bằng sử dụng kích thước tài nguyên bộ xử lý một cách thích hợp, giảm tải, phân luồng cho các điện toán song song, và hiểu tổ hợp thuật toán bên dưới. Điều này thường yêu cầu phải mã hóa lại các ứng dụng, điều này cần một chi phí lớn. Có lẽ cách đơn giản nhất để cải thiện hiệu quả là kiểm tra với các mức độ tối ưu hóa trình biên dịch mà không thay đổi mức nguồn cao, nhưng kiểm tra hồi quy vẫn rất cần thiết trong trường hợp này. Thay vì phân luồng cho các điện toán song song, các phương pháp khác không dược thiết kế từ đầu cho đồng quy tối đa hay giảm tải (ví dụ, GPUs, TOEs) đối với các hàm, loại trừ các tắc nghẽn bộ xử lý yêu cầu tối ưu hóa mã trình bằng thủ công hay kỹ thuật trình biên dịch.

Các tắc nghẽn bộ nhớ

Các tắc nghẽn bộ nhớ rất phổ biến với nhiều ứng dụng khi chúng không thể khít với lưu trữ tạm thời đặc biệt bởi vì thời gian truy cập của bộ nhớ DRAM ngoài chậm hơn tốc độ xung nhịp của lõi bộ xử lý. Các tắc nghẽn bộ nhớ thường xuất hiện như là các tắc nghẽn bộ xử lý, nhưng bạn có thể phân biệt chúng qua sự định hình, nó cho biết thi hành thiếu hiệu quả của các thuật toán bởi vì các đường ống bộ xử lý ngưng hoạt động do phụ thuộc dữ liệu và vòng chờ trong khi dữ liệu được đưa vào lưu trữ tạm thời

Kiến thức và kỹ năng: Tránh các tắc nghẽn bộ nhớ

Tránh các tắc nghẽn bộ nhớ yêu cầu bộ nhớ cần được nâng cấp không chỉ về dung lượng mà còn về truy cập dải tần tại độ trễ hợp lý. Thêm nữa, ánh xạ tới bộ nhớ vật lý cũng rất quan trọng và thường được cung cấp bởi một hệ thống hoạt động, nhưng nó vẫn cần bạn giám sát cẩn thận.
Công cụ và kỹ thuật: Phát hiện các tắc nghẽn bộ nhớ

Bạn có thể phát hiện các tắc nghẽn bộ nhớ bằng cách chạy ứng dụng và định hình truy cập bộ nhớ và thực thi lưu trữ tạm thời. Nếu bạn không lựa chọn chạy ứng dụng, thì việc chạy một tải trọng truy cập bộ nhớ là một sự lựa chọn thay thế tốt nhất (xem Ví dụ 1). Một cách để thực hiện điều này là truy cập bộ nhớ qua một đĩa RAM, sử dụng các công cụ tạo ra tải trọng I/O được miêu tả trong phần Công cụ và kỹ thuật: Phát hiện các tắc nghẽn I/O, của bài viết này.

Ví dụ 1. Chạy kiểm tra bộ nhớ đĩa RAM trên máy chủ 1RU
# mke2fs -m 0 /dev/ram0 # mount /dev/ram0 /mnt/rd1 # dd if=/dev/zero of=/mnt/ramdisk1/newfile bs=128K count=40 40+0 records in 40+0 records out 5242880 bytes (5.2 MB) copied, 0.00413 seconds, 1.3 GB/s # dd if=/mnt/ramdisk1/newfile of=/dev/null bs=128K count=40 40+0 records in 40+0 records out 5242880 bytes (5.2 MB) copied, 0.001595 seconds, 3.3 GB/s # cd /mnt/ramdisk1 #/usr/bin/iozone -R -s512K -r128k -t 16 -T " Initial Write " 1619525.94 " Rewrite " 1410215.12 " Read " 2124526.50 " Re-read " 2178404.50 " Reverse Read " 2207515.50 " Stride Read " 3196584.25 " Random Read " 2655129.25 " Mixed workload " 2638816.00 " Random Write " 1895721.12 " Pwrite " 1827433.56 " Pread " 2196227.25

Kiến thức và kỹ năng: Loại trừ các tắc nghẽn bộ nhớ

Loại trừ các tắc nghẽn bộ nhớ thường bao gồm việc nâng cấp cấu trúc máy chủ và các chipset để giúp hub mạch điều khiển bộ nhớ (MCH) chạy nhanh hơn, kỹ thuật DRAM nhanh hơn, như là, hay việc nâng cấp kích cỡ lưu trữ tạm thời L1/L2/L3 trên cấu trúc máy chủ hiện tại của bạn, nếu thiếu lưu trữ tạm thời sẽ làm quá trình thi hành bị chậm. Trước khi mua thêm lưu trữ tạm thời, bạn cần chắc chắn rằng việc thiếu lưu trữ tạm thời thực sự làm chậm các ứng dụng vì quá trình thi hành không đủ năng lực:
  • Sử dụng các công cụ định hình và PMU, như là VTune để phát hiện các điểm thiếu lưu trữ tạm thời.
  • Sử dụng cat /proc/meminfo trong Linux để giám sát việc sử dụng.
  • Sử dụng lệnh pmap và vmstat trong Linux.
  • Sử dụng valgrind cho Linux, nó giúp tìm ra các lỗi quản lý bộ nhớ

Tóm tắt

Về tổng thể, chỉ hệ thống được cân bằng tài nguyên hoàn hảo dành cho tải trọng được xác định tốt và các thuật toán sẽ không có các nút cổ chai: Tất nhiên, không có một hệ thống nào như vậy tồn tại trên thực tế. Vì vậy, các kiến trúc sư hệ thống và các kỹ sư điều chỉnh thực thi cần phải biết các điểm xảy ra tắc nghẽn và sử dụng các công cụ tiên tiến của công nghệ cũng như các công cụ để phân tích thực thi trên nền tảng cơ bản. Việc thay đổi tải trọng thường làm một hệ thống chứa ứng dụng phát triển một điểm tắc nghẽn mới. Việc tăng tải trọng yêu cầu cần xem xét về các lựa chọn biến đổi quy mô hệ thống. Công việc này sẽ không bao giờ kết thúc
    Blogger Comment
    Facebook Comment