Hai ổ cứng: cùng thông số kỹ thuật, tốc độ khác nhau. Cần tìm vấn đề cấu hình


4

Tôi có hai nút (với 3 ổ dữ liệu chuyên dụng mỗi nút) đang hiển thị tốc độ ghi khác nhau đáng kể. Đầu ra 'hdparm' của chúng trông giống hệt nhau và đầu ra 'hdparm -t -T' của chúng tương đương nhau nhưng chạy lệnh 'dd' trên hệ thống tệp được gắn sẽ mang lại tốc độ ghi khác nhau đáng kể. Sử dụng 'dd' để kiểm tra tốc độ đọc lại mang lại kết quả tương tự.

Các máy chủ và ổ cứng là cùng một mô hình, cả hai đều chạy cùng một gói phần mềm (chúng tôi sử dụng đầu bếp để đẩy các gói ra khỏi cụm của chúng tôi).

Tôi đang tìm ý tưởng về các tham số để kiểm tra hoặc các thử nghiệm khác để chạy có thể giúp tôi phân loại sự khác biệt về hiệu suất. Có vẻ như nó ở cấp độ OS / FS nhưng tôi không biết phải nhìn gì nữa. Cả hai hệ thống tệp được gắn kết đều là EXT4 với kích hoạt noatime và user_xattr.

Máy chủ nhanh:

hdparm -t -T đầu ra:

/dev/sdb1:
 Timing cached reads:   2138 MB in  2.00 seconds = 1070.08 MB/sec
 Timing buffered disk reads:  232 MB in  3.02 seconds =  76.84 MB/sec

viết ra một tệp thử nghiệm 4GB

$ dd bs=4K if=/dev/zero of=/mnt/vol1/test.file count=1M
1048576+0 records in
1048576+0 records out
4294967296 bytes (4.3 GB) copied, 40.1102 s, 107 MB/s
0.20user 10.91system 0:40.14elapsed 27%CPU (0avgtext+0avgdata 3472maxresident)k
16inputs+8388608outputs (1major+263minor)pagefaults 0swaps

Đọc tập tin đó ra khỏi đĩa (và đến / dev / null)

$ dd bs=4K of=/dev/null if=/mnt/vol1/test.file count=1M
1048576+0 records in
1048576+0 records out
4294967296 bytes (4.3 GB) copied, 53.3914 s, 80.4 MB/s
0.19user 5.80system 0:53.53elapsed 11%CPU (0avgtext+0avgdata 3488maxresident)k
8389872inputs+0outputs (2major+264minor)pagefaults 0swaps

Nút chậm:

hdparm -t -T đầu ra

/dev/sdc1:
 Timing cached reads:   1982 MB in  2.00 seconds = 991.27 MB/sec
 Timing buffered disk reads:  224 MB in  3.02 seconds =  74.16 MB/sec

$ dd bs=4K if=/dev/zero of=/mnt/vol1/test.file count=1M
1048576+0 records in
1048576+0 records out
4294967296 bytes (4.3 GB) copied, 98.1583 s, 43.8 MB/s
0.35user 17.58system 1:38.17elapsed 18%CPU (0avgtext+0avgdata 3456maxresident)k
8inputs+8388608outputs (0major+263minor)pagefaults 0swaps


$ dd bs=4k of=/dev/null if=/mnt/vol1/test.file count=1M
1048576+0 records in
1048576+0 records out
4294967296 bytes (4.3 GB) copied, 54.7789 s, 78.4 MB/s
0.25user 10.84system 0:54.92elapsed 20%CPU (0avgtext+0avgdata 3488maxresident)k
8389864inputs+0outputs (2major+263minor)pagefaults 0swaps

Chạy lại các ddlệnh bằng cách sử dụng time, vì vậy chúng ta có thể thấy việc sử dụng CPU. Ngoài ra, hai nút hiển thị tốc độ ghi khác nhau trong điều kiện thực tế hay chỉ trong điều kiện thử nghiệm nhân tạo? (Hai tệp có thể nằm trên các vị trí vật lý khác nhau trên ổ đĩa.) Ổ đĩa tạo / kiểu gì?
David Schwartz

Hai ổ đĩa trống khá nhiều, vì vậy chúng nên được sử dụng, hy vọng, các phần tương tự của đĩa. Việc ghi là trong các điều kiện nhân tạo nhưng các hành vi tương tự được nhìn thấy trong các điều kiện trong thế giới thực (chúng tôi đang thực hiện một số điểm chuẩn của hệ thống tệp phân tán trên các nút này).
Buck

Đã thêm timeđầu ra, theo yêu cầu
Buck

Ngoài ra, nếu tôi thực hiện ddlệnh với ghi 512 byte, thay vì ghi 4K, tốc độ là như nhau.
Buck

Câu trả lời:


1

Thử

hdparm -i -I /dev/sda

Đối với cả hai ổ đĩa và khác biệt đầu ra, điều đó sẽ cho bạn thấy nếu có cài đặt dma hoặc lookahead khác nhau cho cả hai.

Tùy thuộc vào bản phân phối của bạn, nên có một nơi để đặt cài đặt hdparm để đảm bảo chúng giống nhau.

Tôi cũng sẽ kiểm tra lại các dây cáp. Nó chỉ có thể là một ổ đĩa là quá tệ, bạn có thể muốn kiểm tra tỷ lệ ECC thông minh và như vậy.

/usr/sbin/smartctl -A -H /dev/sda
/usr/sbin/smartctl -a /dev/sda

Là những gì tôi sử dụng để kiểm tra thông minh trên ổ đĩa của tôi.


0
  1. Có lẽ một đĩa là xấu. Kiểm tra lỗi. (cũng kiểm tra đầu ra để xem chúng có thực sự giống nhau không: mô hình, phần sụn, kích thước và kích thước cung)

    smartctl -a / dev / sdb smartctl -a / dev / sdc

    Nếu bạn gặp lỗi, hãy chạy thử nghiệm ngắn (mất 2 phút):

    smartctl -t ngắn / dev / sdb

    Nếu bài kiểm tra vượt qua mà không có lỗi, thì hãy chạy lại với "dài" thay vì "ngắn" (mất hàng giờ).

    Và sau đó khi hoàn thành, kiểm tra lại "-a" và ghi số không vào đĩa của bạn tại khu vực đó để di chuyển chúng (Điều này sẽ phá hủy dữ liệu! Hãy cẩn thận với những gì bạn đưa vào = vì đó là những gì được ghi đè vào mức độ thô với số không).

    ví dụ. nếu kích thước cung của bạn là 512 và LBA 555 không tốt, hãy nhập lệnh này (hủy dữ liệu!)

    dd if = / dev / zero of = / dev / sdb bs = 512 đếm = 1 tìm kiếm = 555

    Tôi sẽ làm một số lượng cao hơn, vì vậy bạn không cần phải lặp lại kiểm tra và viết số không thường xuyên, vì các thành phần xấu thường nằm cạnh nhau. (phá hủy nhiều dữ liệu hơn!)

    dd if = / dev / zero of = / dev / sdb bs = 512 đếm = 500 tìm kiếm = 555

  2. Có thể sự liên kết của bạn là sai. Đảm bảo tất cả các phân vùng bắt đầu vào hoặc sau 63 và nếu kích thước khu vực logic của bạn nhỏ hơn kích thước khu vực vật lý của bạn, hãy đảm bảo căn chỉnh của bạn chia hết cho kích thước vật lý / logic. Điều này sẽ ảnh hưởng lớn đến tốc độ ghi, nhưng không thay đổi tốc độ đọc rất nhiều / không hề.

    ví dụ. nếu vật lý là 4096 và logic là 512, thì khu vực bắt đầu của bạn phải chia hết cho 8 (4096/512). Và trên một số đĩa, bắt đầu phải cao hơn 63. Trên các đĩa đó, tôi sử dụng 252 làm phân vùng đầu tiên bắt đầu.

    Và nếu bạn đang sử dụng ổ SSD, bạn cũng phải căn chỉnh khối xóa. Số an toàn để căn chỉnh là bội số của 129024 (đáp ứng yêu cầu 63 trên các đĩa cũ, 4096 byte ngành [đĩa định dạng nâng cao, như hầu hết các đĩa Seagate và WD Green], 1024 MB trên hầu hết các ổ SSD và 2048 MB trên SSD hiếm )

    Ngoài ra với SSD, nếu chúng có vẻ chậm, bạn nên xóa chúng bằng các công cụ do nhà cung cấp cung cấp trước khi sử dụng hoặc sử dụng TRIM.

  3. Sử dụng điểm chuẩn thích hợp.

    Bạn không thể thực hiện kiểm tra viết với dd trừ khi bạn sử dụng conv = fdatasync hoặc phương pháp khác. David Schwartz đã đề xuất sử dụng "thời gian dd ...", nhưng nếu bạn sử dụng conv = fdatasync, nó sẽ cho bạn biết thời gian và tốc độ chính xác trong dd mà không cần phải tự tính toán lại. Nếu bạn có nhiều RAM hoặc ghi bộ đệm, bạn đang đo RAM cộng với đĩa nếu bạn không sử dụng tùy chọn như conv = fdatasync. http://romanrm.ru/en/dd-benchmark

    ví dụ.

    dd bs = 4K if = / dev / zero of = / mnt / vol1 / test.file Count = 1M conv = fdatasync

  4. Sử dụng điểm chuẩn thích hợp. (phần 2)

    Nhiều hệ thống tệp hoặc đĩa sẽ thực hiện RẤT khác nhau khi ghi số không. Bạn cần sử dụng các tập tin ngẫu nhiên để có kết quả tốt nhất.

    ví dụ.

    bản sao đầu tiên vào RAM

    cp /somewhere/with/big/files/bigfile.iso / dev / shm

    chạy thử

    dd bs = 4K if = / dev / shm / bigfile.iso of = / mnt / vol1 / test.file Count = 1M conv = fdatasync

    hoặc là

    chuẩn bị tập tin ngẫu nhiên

    dd if = / dev / ngẫu nhiên của = / dev / shm / randfile bs = 1M đếm = 500

    chạy thử

    dd bs = 4K if = / dev / shm / randfile of = / mnt / vol1 / test.file Count = 1M conv = fdatasync

  5. Ngoài ra, nếu các đĩa của bạn không thực sự giống nhau hoặc có các hệ thống tệp khác nhau, chúng sẽ hoạt động rất khác nhau với kích thước khối 4k. Cũng kiểm tra 128k và 1M.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.