Hiệu suất NTFS kém


21

Tại sao hiệu năng NTFS lại quá tệ so với, ví dụ, Linux / ext3? Thông thường tôi thấy điều này khi kiểm tra cây nguồn (lớn) từ Subversion. Checkout mất khoảng 10-15 phút trên NTFS, trong khi thanh toán tương ứng trên Linux (trên phần cứng gần như giống hệt nhau) sẽ có thứ tự cường độ nhanh hơn (1 - 1,5 phút).

Có lẽ điều này là cụ thể để xử lý nhiều tệp nhỏ và NTFS tốt hơn khi nói đến các tệp lớn, nhưng tại sao phải như vậy? Sẽ không cải thiện hiệu suất NTFS cho các tệp nhỏ có lợi cho hiệu năng Windows nói chung?

EDIT: Điều này không có nghĩa là một câu hỏi viêm "NTFS hút so với ext3"; Tôi thực sự quan tâm đến việc tại sao NTFS hoạt động kém trong một số trường hợp nhất định. Có phải đó chỉ là thiết kế tồi (mà tôi nghi ngờ), hoặc có vấn đề nào khác xảy ra không?


4
Có lẽ điều này có thể được điều chỉnh lại để bạn hỏi làm thế nào để cải thiện hiệu suất của NTFS khi xử lý nhiều tệp nhỏ, thay vì hỏi tại sao NTFS hút so với ext3?
ChrisInEd hôm

Đồng ý với @Chris, câu hỏi này là vô nghĩa.
Sasha Chedygov

4
Chà, tôi thực sự quan tâm đến việc tại sao NTFS lại hoạt động kém. Nếu câu trả lời là "làm X để làm cho nó nhanh hơn", thì thật tuyệt, nhưng tôi sẽ giải quyết để hiểu vấn đề.
JesperE

À, được rồi, xin lỗi vì đã hiểu lầm bạn.
Sasha Chedygov

2
BTW khi bạn đang sử dụng SVN trên máy Windows, máy đó có quét vi-rút có bật bảo vệ thời gian thực không? Điều đó có thể là xấu.
dlamblin

Câu trả lời:


35

NTFS có một thứ gọi là Bảng tệp chính . Nghe có vẻ rất tuyệt khi bạn đọc về nó.

Bạn có thể thấy rằng ext3 thực hiện ổn định khoảng 95% sử dụng đĩa, trong khi sự tồn tại của MFT có nghĩa là NTFS không thực sự muốn bạn sử dụng hơn 90% ổ đĩa của bạn. Nhưng tôi sẽ cho rằng đó không phải là vấn đề của bạn và vấn đề của bạn là do nhiều thao tác trên nhiều tệp nhỏ.

Một trong những khác biệt ở đây là những gì xảy ra khi bạn tạo một tệp nhỏ. Nếu một tệp nhỏ hơn kích thước khối, nó không được ghi vào khối riêng mà thay vào đó được lưu trữ trong MFT. Điều này là tốt nếu tập tin vẫn chính xác như khi nó được tạo ra. Trong thực tế, điều đó có nghĩa là khi svn chạm vào một tệp để tạo tệp, sau đó thêm vào tệp đó, xóa khỏi tệp đó hoặc chỉ sửa đổi nó bằng cách không đủ để di chuyển nó sang khối riêng của nó, hoạt động khá chậm. Ngoài ra, chỉ cần đọc nhiều tệp nhỏ cũng gây ra một số căng thẳng cho MFT nơi tất cả chúng đều cư trú, với bội số trên mỗi khối. Tại sao nó sẽ làm điều này? Đó là tránh sự phân mảnh và sử dụng nhiều khối hiệu quả hơn, và nói chung đó là một điều tốt.

Ngược lại, trong ext2 và 3, các khối tệp cho mỗi tệp được lưu trữ bên cạnh nơi siêu dữ liệu thư mục dành cho thư mục mà chúng nằm trong (khi có thể, nếu đĩa của bạn không bị phân mảnh và bạn có khoảng trống 20%). Điều này có nghĩa là vì svn đang mở các thư mục, một số khối về cơ bản được lưu trữ miễn phí trong bộ đệm 16mb đó trên ổ đĩa của bạn, và sau đó lại vào bộ đệm của kernel. Các tệp đó có thể bao gồm tệp .svn và các tệp sửa đổi cho bản cập nhật cuối cùng của bạn. Điều này rất hữu ích vì có khả năng một số tệp svn đang xem tiếp theo. NTFS không thực hiện được điều này, mặc dù các phần lớn của MFT nên được lưu trong bộ nhớ cache trong hệ thống, chúng có thể không phải là phần bạn muốn tiếp theo.


2
Bạn đúng rằng đây là nơi chứa các tệp nhỏ, nhưng tôi không chắc tại sao điều này lại gây căng thẳng cho MFT. Sẽ không làm cho việc đọc các tệp này dễ dàng hơn nhiều, vì bạn là tất cả nhưng được đảm bảo sẽ kéo nhiều tệp này vào bộ đệm khi bạn kéo bất kỳ tệp nào trong số đó?
ChrisInEd hôm

1
@ChrisInEdmont Đó là các bản cập nhật cho MFT nhấn mạnh nó, bởi vì bạn không chạm vào các khối nơi có không gian lân cận, cuối cùng bạn sẽ di chuyển mọi thứ xung quanh và cũng làm mất hiệu lực các phần được lưu trong bộ nhớ cache của MFT. Tôi sẽ cấp cho bạn rằng trên giấy tờ MFT phải là một cách xử lý các tệp nhỏ rất nhanh. Nó chỉ không chịu được trong thực tế.
dlamblin

6

Vâng, vấn đề cụ thể của bạn là bởi vì

  1. Subversion đến từ thế giới UNIX, phiên bản Windows do đó có các đặc điểm hiệu suất tương tự.
  2. Hiệu suất NTFS thực sự không tuyệt vời với những tập tin nhỏ.

Những gì bạn đang thấy chỉ đơn giản là một tạo tác của một thứ được thiết kế cho một hệ điều hành cụ thể với các giả định hiệu suất trên các hệ điều hành đó. Điều này thường bị hỏng nặng, khi được đưa đến các hệ thống khác. Các ví dụ khác sẽ được rèn so với luồng. Trên UNIX - thích cách truyền thống song song hóa một cái gì đó chỉ là để sinh ra một quy trình khác. Trên Windows, nơi các quá trình mất ít nhất năm lần để bắt đầu, đây là một ý tưởng thực sự tồi tệ.

Nói chung, bạn không thể lấy bất kỳ tạo tác nào của một HĐH cụ thể để được cấp cho bất kỳ hệ điều hành nào khác có kiến ​​trúc khác biệt lớn. Cũng đừng quên rằng NTFS có nhiều tính năng hệ thống tệp không có trong các hệ thống tệp UNIX được sử dụng rộng rãi tại thời điểm đó, chẳng hạn như ghi nhật ký và ACL. Những thứ đó phải trả giá.


Một ngày nào đó, khi tôi có nhiều thời gian rảnh, tôi đã lên kế hoạch viết một mô-đun hệ thống tập tin SVN, tận dụng các tính năng bạn có trên NTFS, như hỗ trợ giao dịch (nên loại bỏ "vấn đề hàng triệu tệp nhỏ") và thay thế dữ liệu các luồng (nên loại bỏ sự cần thiết của .svnthư mục riêng ). Đó là một điều tốt đẹp để có nhưng tôi nghi ngờ các nhà phát triển SVN sẽ xoay quanh việc thực hiện những điều như vậy trong tương lai gần.

Lưu ý bên lề: Một bản cập nhật duy nhất trên kho lưu trữ SVN lớn mà tôi đang sử dụng đã chiếm khoảng 250.000 thao tác tệp. Một số giọng nói nhỏ cho tôi biết rằng điều này thực sự rất nhiều cho 24 tệp đã thay đổi ...


1
Nhưng tại sao hiệu năng NTFS lại tệ khi xử lý hàng đống tệp nhỏ? Điều đó có phải được hy sinh để có được thứ gì khác không?
JesperE

3

Đây là thông tin của Microsoft về cách thức NTFS hoạt động. Nó có thể là quá mức cần thiết cho những gì bạn đang tìm kiếm nhưng nghiên cứu nó có thể làm sáng tỏ những kịch bản mà NTFS có vấn đề.

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.