Kích thước trao đổi mặc định là gì?


16

Làm thế nào để trình cài đặt tính toán kích thước của phân vùng trao đổi để tạo ra? Có lẽ nó dựa trên kích thước RAM được cài đặt, nhưng điều đó phụ thuộc vào dung lượng RAM?


Không có giá trị mặc định, nó phụ thuộc vào lượng RAM bạn có.
Uri Herrera

1
Vâng, nhưng tôi đã tìm kiếm một chút chi tiết hơn "nó phụ thuộc". Có phải nó luôn là một tập hợp nhiều kích thước RAM, hay nó phụ thuộc vào dung lượng RAM là bao nhiêu? Ví dụ: kích thước RAM lớn sẽ không bao giờ cần quá đủ để kích hoạt chế độ ngủ đông, nhưng kích thước RAM rất nhỏ có thể được hưởng lợi từ việc hoán đổi lớn hơn đáng kể 1: 1.
Seret

Câu trả lời:


5

Trên thực tế không có dphys-swapfilechương trình trên CD cài đặt Ubuntu mặc định và nó không được sử dụng để tính kích thước trao đổi .

Điều xảy ra là trình ubiquitycài đặt sử dụng các partman-autotập lệnh và tệp cấu hình (được gọi là công thức nấu ăn ) để xác định kích thước của tất cả các phân vùng. Nó hoạt động như thế này:

  • Partman tìm đúng tệp công thức theo loại máy tính và tùy chọn mà người dùng đã chọn.
  • Ở đó, nó tìm thấy kích thước tối thiểu và tối đa của phân vùng và mức độ ưu tiên của nó. Để hoán đổi, nó có thể là 96 (tối thiểu MB) 512 (ưu tiên) 300% (tối đa).
  • Sau đó, nó có kích thước RAM (thông qua /proc/meminfo).
  • Nó sử dụng thuật toán riêng của mình để tính toán kích thước.

Chi tiết:

Một tập tin công thức có thể trông như thế này:

1 1 1 free
    $iflabel{ gpt }
    method{ biosgrub } .

500 10000 -1 $default_filesystem
    $lvmok{ }
    method{ format }
    format{ }
    mountpoint{ / } .

96 512 300% linux-swap
    $lvmok{ }
    method{ swap }
    format{ } .

Thuật toán để tính toán kích thước:

for(i=1;i<=N;i++) {
   factor[i] = priority[i] - min[i];
}
ready = FALSE;
while (! ready) {
   minsum = min[1] + min[2] + ... + min[N];
   factsum = factor[1] + factor[2] + ... + factor[N];
   ready = TRUE;
   for(i=1;i<=N;i++) {
      x = min[i] + (free_space - minsum) * factor[i] / factsum;
      if (x > max[i])
         x = max[i];
      if (x != min[i]) {
         ready = FALSE;
         min[i] = x;
      }
   }
}

Để xem thêm:


Cuộc tranh luận thú vị: một tài liệu tham khảo tốt hơn một trang web debian lạ?
enzotib

Tôi cũng thấy rằng khi tôi tìm kiếm nó nhưng gói có "Cảnh báo: Gói này chỉ dành cho việc sử dụng để xây dựng hình ảnh trình cài đặt debian. Không cài đặt nó trên hệ thống Ubuntu bình thường." Tôi giả sử điều này không được sử dụng nên tôi đã tìm kiếm và tìm thấy mã cho dphys-exchangefile>: - D Hmm thực sự thú vị.
Rinzwind

@enzotib: sao lạ?
sắp xếp

@arrange: lạ bởi vì không phải là một trang web chính thức của Ubuntu và cũng như một trang web debian dường như không phải là một trang web chính thức.
enzotib

Tôi đã tìm thấy thêm 2 phương pháp tính toán kích thước hoán đổi D: Phương pháp này sử dụng grep ^ Mem: / Proc / meminfo hoặc nếu đó là 0 grep ^ MemTotal: / Proc / meminfo và sau đó nhân với 2 (mặc định) hoặc 3 (hầu hết được đặt thành 300%) với tối thiểu cho mỗi kiến ​​trúc. Một mipsel-sb1-bcm91250a sử dụng 512. i386-efi cố định sử dụng 200%.
Rinzwind

19

Điều này sẽ khá kỹ thuật nhưng rất vui khi tìm hiểu vì vậy hãy đến đây ...

  • Tôi tìm thấy một gói dphys-swapfilevà đây là mã nguồn . Tùy chọn setupđược sử dụng để thiết lập nó:
thiết lập - báo cho dphys-exchangefile tính toán kích thước tệp hoán đổi tối ưu và
(re-) tạo ra một tập tin hoán đổi phù hợp. Mặc định nó có kích thước 2 lần RAM.
Điều này có thể được gọi vào lúc khởi động, vì vậy các tập tin luôn ở lại
đúng kích thước cho RAM hiện tại hoặc chạy bằng tay bất cứ khi nào kích thước RAM có
đã thay đổi
  • Bên trong dphys-swapfilelà cài đặt conf_swapsizecho kích thước được xác định trước (trong Natty, đây là sản phẩm trống):
kích thước chúng tôi muốn buộc nó là, mặc định (trống) cung cấp RAM 2 *
CONF_SWAPSIZE =

và một thiết lập cho swapfactor...

this is what we want, 2 times RAM size
SWAPFACTOR=2
  • Kích thước thực tế được tính thêm một chút về:

    if ["$ {CONF_SWAPSIZE}" = ""]; sau đó
      # tính kích thước tối ưu tự động
      echo -n "kích thước điện toán"
      # đây có vẻ là kích thước RAM vật lý gần nhất, thiếu khoảng 60k
      KCORESIZE = "` ls -l / Proc / kcore | awk '{in $ 5}' `"
      # tạo MByte được làm tròn xuống sẽ chính xác là 1 quá ít, vì vậy hãy thêm 1
      MEMSIZE = "` expr "$ {KCORESIZE}" / 1048576 + 1` "
      # mặc định, không ghi đè tập tin cấu hình, trao đổi = 2 * RAM
      CONF_SWAPSIZE = "` expr "$ {MEMSIZE}" '*' "$ {SWAPFACTOR}" `"
    fi

Như bạn có thể thấy cách họ tính toán nó trong gói này phụ thuộc vào kích thước /proc/kcore, sau đó được chia cho 1048576, +1 để làm tròn nó và sau đó được nhân với hoán đổi. Từ máy của tôi:

nhập mô tả hình ảnh ở đây

Vì vậy, mặc định cho hệ thống này sẽ là 1065349120/1048576 = 1015 + 1 = 1016 * 2 = 2032 MBytes.

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.