이 문제는 이번이 세 번째로 발생했으며 특정 인스턴스에 대한 특정 고려 사항을 기반으로 문제를 해결하는 방법을 찾아야 했습니다. 그래서 저는 저를 위해 모든 단계를 수행하고 대부분의 경우에 작동하는 스크립트를 작성하고 싶었습니다.
현재 사용 사례는 랩톱에서 AFL을 실행하는 것입니다. 그것은 말한다 :
CPU는 매우 뜨겁게 작동하므로 적절한 냉각이 필요합니다. 대부분의 경우 냉각이 충분하지 않거나 제대로 작동하지 않으면 CPU 속도가 자동으로 느려집니다. 즉, 특히 적합하지 않은 하드웨어(노트북, 스마트폰 등)에서 퍼징할 때 무언가가 터지는 것이 완전히 불가능한 것은 아닙니다.
대상 프로그램이 비정상적으로 기가바이트의 메모리를 차지하거나 디스크 공간을 정크 파일로 채울 수 있습니다. AFL은 기본 메모리 제한을 적용하려고 시도하지만 발생할 수 있는 모든 사고를 예방할 수는 없습니다. 결론은 데이터 손실 위험이 허용되지 않는 시스템을 퍼징해서는 안 된다는 것입니다.
퍼즈 테스트에는 파일 시스템에 대한 수십억 개의 읽기 및 쓰기가 포함됩니다. 최신 시스템에서는 일반적으로 캐시가 많이 캐시되어 "물리적" I/O가 상당히 적지만 이 방정식을 변경할 수 있는 요소가 많이 있습니다. 잠재적인 문제를 모니터링하는 것은 사용자의 책임입니다. I/O가 매우 많으면 많은 HDD 및 SSD의 수명이 단축될 수 있습니다.
그래서 나는 낮은 우선순위(ok -10 또는 ok 10, 기억나지 않음)(어떻게 하는지 다시 찾아봐야 함)와 몇 가지 추가 제한(cpu_limit를 사용하고 싶습니다)의 램디스크에서 실행할 것입니다.
나는 이전에도 총 디스크 사용량을 제한하고 네트워크 I/O 속도를 늦추는 추가 목표를 가지고 이러한 작업을 수행하고 싶었습니다.
내 목표는 다음과 같이 작동하는 간단한 스크립트를 만드는 것입니다.
./pretend_its_on_a_slow_computer_so_my_computer_doesnt_lag.sh my_program with its arguments
스크립트는 최소한 다음을 수행해야 합니다.
- CPU 사용량 제한
- 디스크 I/O를 제한하여 SSD/HDD 수명 연장
- 네트워크 I/O 제한
- 디스크 사용량 제한
- 메모리 사용량 제한
- 내 컴퓨터를 손상시킬 수 있다고 생각되는 다른 모든 것을 제한하십시오. :)
지금까지 내가 생각해낸 것:
#!/bin/bash
mkdir -p /mnt/temp_ramdisk
mount -t tmpfs -o size=2g tmpfs /mnt/temp_ramdisk
cp -r . /mnt/temp_ramdisk
cd /mnt/temp_ramdisk
# Assumes trickle is installed to limit network i/o
nice 19 trickle "$@"
cp -r /mnt/temp_ramdisk .
umount /mnt/temp_ramdisk
rm -r /mnt/temp_ramdisk
그러나 이는 다소 투박하고(로컬 파일을 램디스크에 저장하는 더 좋은 방법을 생각할 수는 없지만) 램디스크 외부에 쓰거나 너무 많은 메모리를 사용하거나 CPU를 너무 많이 가열하는 데 대한 엄격한 제한이 부족합니다. 또한 cgroup을 사용하여 개선할 수 있는 일이 있다고 생각하지만 아직 충분히 익숙하지 않습니다.
원하는 효과를 얻으려면 어떻게 개선해야 하나요?