Как использовать системный вызов posix_fadvise в C

использовать системный вызов posix_fadvise в C Изучение

Программы могут использовать системный вызов posix_fadvise (), чтобы информировать ядро ​​о том, что они планируют просматривать файлы данных в определенном формате в долгосрочной перспективе, что позволяет ядру соответствующим образом оптимизировать. Сохраняя ранее использованные блоки документов в хранилище, системный файловый буфер (буферный кеш) помогает программам быстрее добраться до блоков данных. Когда вы дублируете массивное файловое дерево, это оказывает катастрофическое влияние на буфер, и весь реплицированный контент также оказывается внутри буфера, вытесняя все блоки данных. Это вредит выходу устройства, и все другие действия на машине, которые, кажется, имеют блоки информации внутри буфера даже до начала репликации, должны будут вместо этого считывать данные с диска. Вы скажете ОС исключить эти файловые фреймы из буфера при использовании posix_fadvise.

Мы будем использовать функцию системного вызова posix_fadvise, чтобы сообщить ОС, что вы хотите делать с соответствующей информацией, через открытый дескриптор файла. Буфер любой последующей страницы истощается каждый раз, когда мы применяем posix_fadvise () через POSIX_FADV_DONTNEED. В этой части мы сосредоточимся на использовании системного вызова posix_fadvise, чтобы дать ядру рекомендации по регулярному файловому вводу-выводу. Давайте сначала посмотрим на его синтаксис.

Синтаксис

#include <sys/fcntl.h>
Int posix_fadvise( int fd, off_t offset, off_t len, int advice );

Сначала мы должны включить библиотеку «fcntl.h», чтобы код работал эффективно. Смещение отмечает начало поля, по которому вы предлагаете совет. Ширина поля кажется линзой. Пока длина равна 0, вызов повлияет на все байты, начинающиеся со смещения. Форма рекомендации определяется атрибутом advice.

Advice Parameter

Следующие атрибуты подходят для советов:

POSIX_FADV_NORMAL:
это демонстрирует, что, возможно, программа, похоже, не может предложить никаких советов относительно своего формата доступа к информации. Это стандартное предположение, если для открытого файла не дается никаких указаний.

POSIX_FADV_SEQUENTIAL:
программа предполагает одновременный доступ к требуемой информации (с нижними смещениями, считанными заранее верхними).

POSIX_FADV_RANDOM:
случайным образом будет получена необходимая информация.

POSIX_FADV_NOREUSE:
только один раз можно получить указанные данные.

POSIX_FADV_NOREUSE:
Как и в ближайшем будущем, определенная информация будет собрана.

POSIX_FADV_DONTNEED:
В ближайшем будущем перечисленная информация будет недоступна.

Пример Posix_Fadvise

Приступим к работе над системным вызовом posix_fadvise. Войдите в свою систему Linux как пользователь root и попробуйте открыть терминал командной консоли. Попробуйте открыть его с помощью клавиши «Ctrl + Alt + T». Если это не сработает для вас, попробуйте перейти к панели действий, выделенной в левой части вашей системы Linux. Щелкните по нему, и вы откроете «панель поиска». Введите в нем «терминал» и нажмите кнопку «Ввод». Через несколько секунд терминал откроется, и вы сможете им пользоваться. Но перед тем, как использовать код языка C в каком-либо файле, мы должны установить компилятор языка в нашем дистрибутиве Linux. Мы рекомендуем вам настроить компилятор языка C «GCC» в вашей системе. Для установки попробуйте следующий запрос в консольном терминале, чтобы избежать проблем в будущем. Если он запрашивает пароль вашей учетной записи, напишите, чтобы продолжить.

$ sudo apt install gcc

Если он запрашивает пароль вашей учетной записи, напишите, чтобы продолжить

Теперь компилятор «GCC» эффективно исправлен. Это для работы над сценарием на языке C. По этой причине вам необходимо создать новый файл с расширением «C» в конце. Если вы хотите написать код сразу после создания файла, вы можете сгенерировать его с помощью редактора GNU Nano. Отныне используйте приведенную ниже инструкцию в консоли и нажмите клавишу «Enter», чтобы увидеть результат. Мы использовали «тест» в качестве имени файла; вы также можете это изменить.

$ nano test.c

Открыт редактор GNU Nano 4.8; напишем в нем скрипт C. Во-первых, мы определили некоторые библиотеки, например, fcntl и unistd. Эти библиотеки необходимы, потому что без этого кода; это не сработает. Затем мы указали основную функцию с двумя параметрами. Один из них представляет собой целочисленный тип, а другой — массив символьных типов. В этом вызове метода main () определено целое число «fd», которое будет использоваться в качестве дескриптора. Системный вызов open использовался для открытия содержимого массива относительно его индекса «1». Он прочитает содержимое и вернет его к целочисленному файловому дескриптору «fd». Теперь важный шаг здесь. Мы свяжем этот файловый дескриптор «fd» с ядром с помощью функции «fdatasync», передав этот дескриптор «fd» в качестве аргумента. Итак, мы использовали системный вызов posix_fadvise с «fd» в качестве первого параметра. Мы определили начальное смещение как 0, а длина поля указана как 0. Затем мы использовали POSIX_FADV_DONTNEED как параметр совета. Совет, который мы ищем, называется POSIX_FADV_DONTNEED. Он сообщает операционной системе, что запрошенные байты больше не потребуются. В результате всего этого байты будут выдаваться из системного буфера документа. Сопутствующая мини-программа инструктирует ОС очистить буфер от всей информации, объединенной с определенным файлом. Наконец, системный вызов close будет использован для закрытия файлового дескриптора «fd», и основная функция будет завершена. Нажмите «Ctrl + S», чтобы сохранить код, и «Ctrl + X», чтобы оставить файл. Совет, который мы ищем, называется POSIX_FADV_DONTNEED. Он сообщает операционной системе, что запрошенные байты больше не потребуются. В результате всего этого байты будут выдаваться из системного буфера документа. Сопровождающая мини-программа инструктирует ОС очистить буфер от всей информации, объединенной с определенным файлом. Наконец, системный вызов close будет использован для закрытия файлового дескриптора «fd», и основная функция будет завершена. Нажмите «Ctrl + S», чтобы сохранить код, и «Ctrl + X», чтобы оставить файл. Совет, который мы ищем, называется POSIX_FADV_DONTNEED. Он сообщает операционной системе, что запрошенные байты больше не потребуются. В результате всего этого байты будут выдаваться из системного буфера документа. Сопутствующая мини-программа инструктирует ОС очистить буфер от всей информации, объединенной с определенным файлом. Наконец, системный вызов close будет использован для закрытия файлового дескриптора «fd», и основная функция будет завершена. Нажмите «Ctrl + S», чтобы сохранить код, и «Ctrl + X», чтобы оставить файл. Наконец, системный вызов close будет использован для закрытия файлового дескриптора «fd», и основная функция будет завершена. Нажмите «Ctrl + S», чтобы сохранить код, и «Ctrl + X», чтобы оставить файл. Наконец, системный вызов close будет использован для закрытия файлового дескриптора «fd», и основная функция будет завершена. Нажмите «Ctrl + S», чтобы сохранить код, и «Ctrl + X», чтобы оставить файл.

Читайте также:  Что такое Kubernetes Ingress Controller?

Давайте сначала скомпилируем код, чтобы он работал точно. Для этого используйте инструкцию компиляции «gcc» рядом с именем файла типа C следующим образом:

$ gcc test.c

После компиляции вы должны запустить файл, используя запрос «a.out» в консоли. Он не показывает никаких результатов, потому что ядро ​​было проинформировано и оно работало правильно.

$ ./a.out

Заключение

Мы обсудили системный вызов posix_fadvise вместе с его различными параметрами «совета». Попробуйте другие параметры совета, чтобы понять его полностью.

Оцените статью
bestprogrammer.ru
Добавить комментарий