Как использовать выделение памяти SLAB вместо выделения SLUB в ядре Linux?

Проблема с вашим решением заключается в том, что вы вызываете grepдля каждой строки. На самом деле, grep также анализирует каждую строку. Таким образом, для файла с n строками эти строки анализируются n^2 раз, а загрузка grep— довольно затратный вызов.

Используйте однострочный буфер -, в этом примере называемый PrevLine, например:

#!/bin/bash
CurLine=''
isFirstLine=true
while IFS='' read -r LineBelow; do
  if $isFirstLine; then
    echo "This is the first line, so no previous."
  else
    echo "Current line read: ${CurLine}"
    echo "Line below: ${LineBelow}"
  fi
  CurLine="${LineBelow}"
  isFirstLine=false
done <"$1"

На самом деле присвоение trueк isFirstLine— это присваивание строки, а простое упоминание$isFirstLine(в условии if -)— это выполнение команды этой строки. Поскольку trueи falseявляются встроенными в bash -, их можно использовать напрямую без существенного влияния на скорость, но с большим увеличением читабельности.

В последней строке упоминается $1как имя входного файла, поэтому вызовите с помощью:

./test.sh inputfile.txt
0
21.06.2021, 18:07
1 ответ

Нет переключателя во время выполнения :вы переключаетесь между SLAB и SLUB (и если вы включаете режим EXPERT, SLOB)путем перекомпиляции ядра. Эта опция находится в «Общие настройки -> Выбрать распределитель SLAB».

Я не нашел никаких причин для изменения значения по умолчанию, но ответ на этот предыдущий вопрос SE указывает на то, что причин для использования SLAB, вероятно, мало или вообще нет.

1
28.07.2021, 11:23

Теги

Похожие вопросы