2013-08-07 110 views
10

Tôi đã trải qua giấy hệ thống tệp google (GFS), Nó đề cập rằng GFS sử dụng phân bổ không gian lười biếng để giảm phân mảnh nội bộ.
Ai đó có thể giải thích, không gian lười biếng làm giảm sự suy giảm nội bộ như thế nào?Phân bổ không gian lười trong hệ thống tệp Google

Nguồn: http://research.google.com/archive/gfs-sosp2003.pdf

+2

bản sao có thể có của [phân bổ lười biếng là gì?] (Http://stackoverflow.com/questions/712683/what-is-lazy-allocation) – brokenfoot

+0

Nếu bạn tìm thấy một trong các câu trả lời hữu ích, vui lòng chấp nhận nó bằng cách đánh dấu bên trái văn bản trả lời. –

Trả lời

1

Tôi đã không đọc toàn bộ paper..but Tôi hy vọng rằng các đoạn sau đây sẽ giúp bạn theo một cách nhỏ.

Câu hỏi đầu tiên tôi sẽ hỏi là: hiệu ứng của việc có kích thước khối lớn trong hệ thống tệp là gì? Chúng ta hãy nói rằng kích thước khối FS là 64MB. Tin tốt là chúng tôi viết các phần tiếp giáp tốt vào đĩa cứng (nhiều dữ liệu được viết cho mỗi tìm kiếm hơn), ít siêu dữ liệu hơn để giữ các khối gián tiếp, v.v .. Tin xấu là phân mảnh nội bộ .. nếu tệp là 1MB, nhưng kích thước khối tối thiểu là 64MB , có phân mảnh nội bộ là 63MB. Vì vậy, làm thế nào để có được những tin tức tốt và tránh những tin xấu?

Một cách là thực hiện phân bổ không gian lười hoặc HOẶC phân phối không gian bị trễ. Ở đây, chúng tôi giữ kích thước khối nhỏ (nói 1MB), nhưng chúng tôi viết một khối dữ liệu lớn, tức là nhiều khối 1MB cùng nhau khi chúng tôi ghi vào đĩa. Bằng cách này, chúng tôi nhận được sự tốt đẹp của khối lớn viết. Lưu ý rằng điều này có nghĩa là chúng ta ghi vào một bộ đệm incore nhưng nói với write() sys gọi rằng nó được thực hiện ghi vào đĩa ... giống như ghi vào bộ nhớ đệm.

LƯU Ý: Khi "thời gian" đến để thực hiện phân bổ khối thực, chúng tôi cần được đảm bảo dung lượng trên đĩa. Vì vậy, trì hoãn phân bổ khối => không gian đặt trước được thực hiện tại thời điểm viết, nhưng phân bổ không gian được thực hiện tại một thời gian sau khi đủ khối dữ liệu đã tích lũy trong lõi.

+1

nhưng kích thước khối trong GFS không nhỏ (1 MB). Trên thực tế nó nói "Chúng tôi đã chọn 64 MB, đó là lớn hơn nhiều so với hệ thống tập tin điển hình blocksizes. Phân bổ không gian lười biếng tránh lãng phí không gian do phân mảnh nội bộ". Vì vậy, ở đây mặc dù sử dụng kích thước khối lớn hơn, fragmentaion nội bộ được giảm, làm thế nào ?. Có lẽ tôi đang thiếu bất kỳ khái niệm nào ở đây. – user2328404

+0

Xin chào, điều này có nghĩa là đối với tệp 1kb, dung lượng trống trên đĩa là 64MB? – alexsc

0

Dữ liệu được ghi đầu tiên vào bộ đệm. Vì vậy, thay vì phân bổ bộ nhớ thời điểm tệp được tạo, chúng đang đợi cho đến khi ghi thực tế xảy ra. Như trong XFS http://en.wikipedia.org/wiki/XFS#Delayed_allocation

3

Với phân bổ không gian lười, phân bổ không gian vật lý bị trì hoãn càng lâu càng tốt, cho đến khi dữ liệu có kích thước chunk (trong trường hợp của GFS, 64 MB theo giấy năm 2003) được tích lũy. Nói cách khác, quy trình quyết định trước phân bổ một đoạn mới trên đĩa, bị ảnh hưởng nặng nề bởi kích thước của dữ liệu được ghi. Tùy chọn này chờ đợi thay vì phân bổ nhiều khối dựa trên một số đặc điểm khác, giảm thiểu cơ hội phân mảnh nội bộ (tức là các phần không sử dụng của đoạn 64 MB).

Trong bài báo của Google, nó cũng nói: "Phần lớn là đầy đủ vì hầu hết các tập tin chứa nhiều khối, chỉ có phần cuối cùng có thể được lấp đầy một phần." Vì vậy, cách tiếp cận tương tự được áp dụng cho việc tạo tệp.

Nó là tương tự như này: http://duartes.org/gustavo/blog/post/how-the-kernel-manages-your-memory

0

Bạn không cần phải điều chỉnh kích thước tập tin vào việc tạo ra. Và bạn có thể gắn nó vào một tệp lớn hơn. Bạn có thể tham khảo this.