2012-03-04 30 views

Trả lời

39

Có vẻ như bạn muốn lệnh sync hoặc chức năng sync().

Nếu bạn muốn disk cache đỏ bừng: echo 3 | sudo tee /proc/sys/vm/drop_caches

+6

'sync' là 100% không liên quan. Tôi đang nói về bộ nhớ cache nhiều GB có thời lượng tồn tại lâu dài, không phải là số lượng dữ liệu không có thời gian tồn tại ngắn mà 'đồng bộ' giao dịch với (và được ghi vào đĩa cứ 10 giây một lần). – taw

+7

Bạn đang nói về bộ đệm đĩa? Thử 'echo 3 | sudo tee/proc/sys/vm/drop_caches' –

+0

Tôi chấp nhận bình luận của bạn, nhưng điều đó là không thể. – taw

1

Ngắt kết nối bộ và tái lắp đĩa dưới kiểm tra sẽ đặt lại tất cả bộ nhớ đệm và bộ đệm.

+2

Không phải lúc nào. Ví dụ: 'mount/dev/sda1/mnt', bây giờ hãy xem phân vùng đó đang mở'/dev/sda' (hãy chú ý đến thiếu '1'), sau đó thay đổi một tập tin trong'/mnt'. Bạn có thể thấy rằng điều này không được phản ánh trong '/ dev/sda' vì nó sử dụng các cache khác nhau. 'umount/mnt' không hỗ trợ trong trường hợp đó, vì nó không ảnh hưởng đến'/dev/sda', thậm chí đó là ổ đĩa giống nhau. – Tino

23

Bạn có thể làm điều đó như thế này:

# synC# (move data, modified through FS -> HDD cache) + flush HDD cache 
# echo 3 > /proc/sys/vm/drop_caches # (slab + pagecache) -> HDD (https://www.kernel.org/doc/Documentation/sysctl/vm.txt) 
# blockdev --flushbufs /dev/sda 
# hdparm -F /dev/sda 

# NEXT COMMAND IS NOT FOR BENCHMARKING: 
# should be run before unplug, flushes everything possible guaranteed. 
# echo 1 > /sys/block/sdX/device/delete 

Bạn có thể sử dụng strace để thấy rằng đây là ba syscalls khác nhau

Ngoài ra, nó có thể được mong muốn để tắt HDD bộ nhớ cache bằng hdparm, không chắc chắn những gì bạn điểm chuẩn.

Trong bất kỳ cách nào, bạn không thể ngăn HDD lưu bộ nhớ cache 64/32/16 MB dữ liệu được sử dụng gần đây nhất. Để giết bộ nhớ đệm đó, chỉ cần viết một số số 0 (và tuôn ra) + đọc một số vị trí không liên quan từ HDD. Điều này là bắt buộc vì bộ nhớ cache có thể được chia thành phần đọc và phần ghi. Sau đó bạn có thể benchmark HDD.

+1

+1 'blockdev' chính xác là những gì tôi đang tìm kiếm. – Tino

+3

'blockdev --flushbufs/dev/sda' hoạt động với ổ USB của tôi, nhưng không có hiệu lực với ổ SSD SATA. 'echo 3 | sudo tee/proc/sys/vm/drop_caches' hoạt động với cả hai ổ đĩa. –

+0

Lệnh cuối cùng sẽ loại bỏ đĩa khỏi hạt nhân. Bạn chắc chắn sẽ không thể chuẩn bị đĩa sau (hoặc sử dụng đĩa theo bất kỳ cách nào) và nếu đĩa đang được sử dụng thì sẽ rất nguy hiểm. Không có lý do gì để đưa nó cùng với các lệnh khác. Dưới đây là ví dụ về thời điểm sử dụng lệnh này và lệnh: https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/5/html/Online_Storage_Reconfiguration_Guide/removing_devices.html – ndemou

17

Disk cache tẩy: tài liệu echo 3 | sudo tee /proc/sys/vm/drop_caches

Command: https://www.kernel.org/doc/Documentation/sysctl/vm.txt

Viết để điều này sẽ gây ra hạt nhân để thả cache sạch, dentries và inodes từ bộ nhớ, gây nhớ rằng để trở thành miễn phí.

Để chủBộ nhớ đệm miễn phí:

echo 1 > /proc/sys/vm/drop_caches

Để dentries miễn phí và inodes:

echo 2 > /proc/sys/vm/drop_caches

Để miễn phí chủBộ nhớ đệm, dentries và inodes:

echo 3 > /proc/sys/vm/drop_caches

Vì đây là một hoạt động không phá hoại, và các đối tượng bẩn không thể giải phóng được, người dùng nên chạy "đồng bộ" trước để đảm bảo tất cả các đối tượng được lưu trữ đều được giải phóng.

3

ngắn tốt câu trả lời đủ: (copy dán thân thiện)

DISK=/dev/sdX # <===ADJUST THIS=== 
sync 
echo 3 > /proc/sys/vm/drop_caches 
blockdev --flushbufs $DISK 
hdparm -F $DISK 

Giải thích:

sync: Từ trang người đàn ông: tuôn ra bộ đệm hệ thống tập tin. Lực lượng thay đổi khối vào đĩa, cập nhật khối siêu.

echo 3 > /proc/sys/vm/drop_cache: from the kernel docsnày sẽ gây ra các hạt nhân để thả cache sạch

blockdev --flushbufs /dev/sda: từ trang người đàn ông: IOCTLs gọi khối thiết bị [để] buffers tuôn ra.

hdparm -F /dev/sda: từ trang người đàn ông: Xối ngay đệm ghi bộ nhớ cache trên ổ đĩa (ổ đĩa cũ có thể không thực hiện điều này)

Mặc dù blockdev và hdparm lệnh trông giống như theo an answer above họ phát hành IOCTLs khác nhau để thiết bị.

dài cách có lẽ tốt hơn:

(Tôi sẽ cho rằng bạn đã định dạng đĩa nhưng bạn có thể thích nghi với các lệnh này nếu bạn muốn viết trực tiếp vào đĩa)

Run này chỉ một lần trước khi chuẩn 1:

MOUNT=/mnt/test # <===ADJUST THIS=== 
dd if=/dev/urandom of=$MOUNT/temp-hddread.tmp bs=64M count=16 

Run này mỗi khi bạn muốn để trống cache:

DISK=/dev/sdX # <===ADJUST THIS=== 
MOUNT=/mnt/test # <===AND THIS=== 
dd if=/dev/urandom of=$MOUNT/temp-hddwrite.tmp bs=64M count=16 
rm $MOUNT/temp-hddwrite.tmp 
sync 
echo 3 > /proc/sys/vm/drop_caches 
blockdev --flushbufs $DISK 
hdparm -F $DISK 
dd if=$MOUNT/temp-hddread.tmp of=/dev/null 

Chạy ứng dụng này khi bạn hoàn tất.

MOUNT=/mnt/test # <===ADJUST THIS=== 
rm $MOUNT/temp-hddread.tmp 

Giải thích:

Các HDD có thể có H/W cache đó sẽ không được xóa bởi các lệnh trên. Tôi đang viết và đọc dữ liệu giả ngẫu nhiên để lấp đầy chúng bằng rác. Có bao nhiêu dữ liệu phụ thuộc vào dung lượng bộ đệm HDD lớn. Tôi đang sử dụng/dev/urandom vì nó nhanh và chúng tôi không quan tâm đến số lượng đúng ngẫu nhiên. Tôi đang tạo /mnt/test/temp-hddread.tmp ngay từ đầu và sử dụng nó mỗi khi tôi muốn đọc đủ dữ liệu ngẫu nhiên. Tôi đang tạo và xóa /mnt/test/temp-hddwrite.tmp mỗi khi tôi muốn viết đủ dữ liệu ngẫu nhiên.

Tín

Tôi đã viết câu trả lời này dựa trên phần hay nhất của các câu trả lời đã có.

Các vấn đề liên quan