4.3. Перехватываем cat
export SYSCALL_SPY_LOG="$PWD/cat.log"
LD_PRELOAD="$PWD/libsyscall_spy.so" cat /etc/hostname
Просматриваем:
cat cat.log
4.4. Перехватываем grep
export SYSCALL_SPY_LOG="$PWD/grep.log"
LD_PRELOAD="$PWD/libsyscall_spy.so" grep -n root /etc/passwd
Просматриваем:
cat grep.log
4.5. Получаем количество вызовов
Выполни:
grep -c 'open(' ls.log
grep -c 'openat(' ls.log
grep -c 'read(' ls.log
grep -c 'write(' ls.log
grep -c 'close(' ls.log
Для остальных:
grep -c 'openat(' cat.log
grep -c 'read(' cat.log
grep -c 'write(' cat.log
grep -c 'close(' cat.log
grep -c 'openat(' grep.log
grep -c 'read(' grep.log
grep -c 'write(' grep.log
grep -c 'close(' grep.log
4.6. Копируем результаты в Windows
cp ls.log cat.log grep.log /media/sf_share/
В Windows они будут лежать в:
C:\share\ls.log
C:\share\cat.log
C:\share\grep.log
5. Выполняем задание №2: Benchmark
5.1. Компиляция
cd ~/lab5
gcc -O2 -Wall -Wextra -o benchmark benchmark.c
5.2. Запуск
./benchmark
Получишь четыре результата:
- dummy
- getpid
- open+close
- gettimeofday
Они будут содержать время на одну операцию и количество циклов CPU.
5.3. Сохраняем результаты
./benchmark > benchmark_result.txt
Но тут есть нюанс: программа выводит результат через printf, поэтому он окажется в файле.
Посмотреть:
cat benchmark_result.txt
Скопировать в Windows:
cp benchmark_result.txt /media/sf_share/
5.4. Используем perf
perf stat -e cycles,instructions,context-switches,page-faults ./benchmark
Если работает, получишь:
- cycles;
- instructions;
- context-switches;
- page-faults.
Сохрани результат:
perf stat -e cycles,instructions,context-switches,page-faults ./benchmark 2> perf_result.txt
Копируем:
cp perf_result.txt /media/sf_share/
Если perf не работает из-за ограничений виртуальной машины, попробуй:
sudo perf stat ./benchmark
6. Эксперимент с кешем
Если преподаватель требует сравнить результаты до и после очистки кеша:
Сначала:
./benchmark
Потом:
sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'
И снова:
./benchmark
Важное замечание: drop_caches очищает системные кеши. Это не очистка кеша процессора и не магическая кнопка ускорения компьютера. Делай эксперимент в виртуальной машине, а не на основной системе.
7. Какие скриншоты сделать для отчёта
Вот конкретный список, чтобы не сидеть потом и не гадать, чего преподавателю не хватает.
№ Что должно быть на скриншоте
1 Компиляция libsyscall_spy.so
2 Запуск ls с LD_PRELOAD и журнал ls.log
3 Запуск cat и журнал cat.log
4 Запуск grep и журнал grep.log
5 Результаты подсчёта вызовов
6 Запуск benchmark с четырьмя измерениями
7 Результат perf stat
8 Сравнение benchmark до и после сброса кешей, если выполнялось
Как делать
В Ubuntu:
1. Открой терминал.
2. Выполни нужную команду.
3. Нажми Win + Shift + S.
4. Выдели область терминала.
5. Сохрани изображение в C:\share.
6. Вставь его в Word.
Лучше делать скриншоты в разрешении, где команды и цифры читаются. Фото монитора на телефон, конечно, тоже существует как технология, но не надо.