내 프로젝트에는 파일을 작성한 후 디스크에 저장할 수 없는 상황이 있기 때문에 이 두 스크립트를 백그라운드에 추가했습니다. 시스템 성능에 영향을 미치나요?
장치가 재부팅되거나 종료되는 대신 예상치 못한 정전이 자주 발생할 수 있습니다. 비정상적인 정전이 발생하기 1초 전에 파일에 기록된 데이터도 디스크에 저장할 수 있기를 바라지만, 실제 상황은 디스크에 저장할 수 없는 경우가 많습니다.
내 장비에는 UPS(무정전 전원 공급 장치 시스템)가 있습니다. 저는 C++로 프로그래밍을 하고 있습니다.
자동 동기화.sh:
#!/bin/sh
while true; do
sync
sleep 1
done
autoCacheFree.sh:
#!/bin/sh
drop_caches() {
echo "Drop caches."
sync
echo 1 > /proc/sys/vm/drop_caches &
return 0
}
while true; do
sleep 600
drop_caches
done
/etc/fstab:
#device mount-point type options dump fsck order
/dev/mmcblk3p3 /dobot ext3 defaults 0 0
/dev/mmcblk3p6 /dobot/userdata ext3 defaults 0 0
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0
var /dev tmpfs defaults 0 0
ramfs /dev ramfs defaults 0 0
답변1
autoSync.sh
sync
초당 한 번 실행됩니다. 즉, 보류 중인 모든 디스크 쓰기가 매초마다 디스크에 강제로 적용됩니다. 이것이 미치는 영향은 기본 저장소에 따라 다르지만 모든 경우에 기록되는 데이터의 양이 늘어납니다. 정상적인 작업에서는 많은 쓰기가 결국 불필요해집니다(나중에 동일한 데이터를 다루는 쓰기로 인해 초과되거나 대체되기 때문입니다). 빠르게 삭제되는 임시 파일에 쓰기)을 sync
정기적으로 실행하면 불필요한 쓰기를 방지하는 데 걸리는 시간이 줄어듭니다.
autoCacheFree.sh
sync
10분마다 실행되고 페이지 캐시를 지웁니다. 효과는 sync
앞서 설명한 것과 동일합니다. 페이지 캐시를 지우면 모든 후속 읽기를 기본 스토리지에서 읽어야 하며 이는 성능에도 영향을 미칩니다.
근본적인 문제를 해결하는 것이 더 나을 것입니다. "파일을 작성한 후 디스크에 저장할 수 없습니다"가 무엇을 의미하는지 명확하지 않지만 편집된 질문에서 귀하가 프로그램을 작성 중이고 데이터가 파일에 있는지 확인하고 싶다는 것을 이해합니다. 쓰기는 가능한 한 빨리 디스크에 저장됩니다. 올바른 방법은 전화하는 것입니다.fsync
각 쓰기 후에 쓰기에 신경을 쓰면 이러한 쓰기 및 디스크 쓰기가 성능에 미치는 영향이 스크립트보다 훨씬 작습니다.
또한 루프를 중지하는 것이 더 쉽기 때문에 이것이 while sleep ...; do ...; done
보다 낫다는 점에 유의하십시오(취소하면 루프가 종료됩니다).while true; do ...; sleep ...; done
sleep