Выполненная fgrep многоядерная Mac OS X

Для любого желающего схожую функциональность, вот сценарий Ruby.

Это поддерживает, несколько приостанавливают подряд (истощение, приостановите, заряжайте, истощение, приостановите...), и максимально устойчиво.

Теперь это также поддерживает libnotify, таким образом, Вы получаете уведомление каждую минуту.

#!/usr/bin/ruby
    require 'eventmachine'
    require 'libnotify'

    period = 40 # poll evey N seconds
    limit = (ARGV[0] || 20).to_i # allow usage N minutes after depletion

    def get(prop)
        File.read("/sys/class/power_supply/BAT0/#{prop}").chomp
    end

    def capacity
        get(:charge_now).to_i
    end

    def onBattery?
        get(:status) != 'Charging'
    end

    def action!
        `sync`
        `systemctl suspend`
    end

    puts 'Starting battery abuse agent.'

    EM.run {
        ticks = 0
        EM.add_periodic_timer(period) {
            if capacity == 0 && onBattery?
                ticks += 1
                if ticks % 5 == 0
                    Libnotify.show summary: 'Baterry being abused',
                        body: "for #{period*ticks} seconds.", timeout: 7.5
                end
            else
                ticks = [ticks-1, 0].max
            end
            if ticks*period > limit*60
                action!
            end
        }
    }
3
22.09.2016, 01:18
3 ответа

На основании http://www.gnu.org/software/parallel/man.html#EXAMPLE:-Grepping-n-lines-for-m-regular-expressions

parallel -k parallel --pipepart --block 100M -a file2 -k grep {} :::: file1

Проще и, возможно, быстрее:

parallel -j0 -k grep {} file2 :::: file1
0
27.01.2020, 21:10

GreeP -F -F IF INGLES.TXT HAYSTACK.LOG - это то, что вы хотите.

-F делает Grep использовать простые сопоставления с рисунком, если вам не нужно полное регулярное выражение. Это имеет тенденцию быть огромным ускорением. В зависимости от того, что вы ищете, вам, возможно, не понадобится регулярное выражение, так что может также получить преимущества более быстрого выполнения прославшего кода.

-F - это файл шаблонов, которые вы ищете. Таким образом, вместо того, чтобы делать полноценные сканирования для N узоров, вы можете сделать это в одном проходе. Это также огромное ускорение на любых файлах, которые слишком велики, чтобы вписаться в ОЗУ.

Поместите файл, который вы ищете на быстрый диск. SSD не обязательно ответ здесь, так как GREP делает сканирование в очень линейной моде, что просто отлично с нормальным прядильным диском, а особенно быстро, когда у вас есть массив их.

Комбинация двух выключателей, плюс скорость жесткого диска может сделать Grep очень быстро. Если ваши данные очень повторяются (красиво сжимаемыми), вы можете попробовать хранить его, и искать через него с ZGrep. Это помогает дополнительно, если ваше хранилище не особенно быстро.

Если вы несете ответственность за то, как данные попадают в файлы, сделайте вещи небольшими. Не тратьте слишком много места для структуры, и выньте данные, которые не носят никакой информации (думают - внутри UUID или пробелов и новых линий между тегами XML) делает журналы меньше, что делает время чтения диска и разборки Время короче.

Иногда это на самом деле быстрее сделать двойной разбор. Это очень зависит от данных. Например, если вы ищете кусок данных, которые сложны для анализа, но это происходит только в небольшом количестве записей, легко идентифицируемых другим простым разбором экспрессии, выполните первый пропуск для легкого выражения. Это сокращает данные, которые необходимо запускать медленное / сложное выражение.

Если они не помогают, то SPLIT -L файлы и запуска GREP с параллельно . Помните, что общее время разделения / записи нескольких файлов, а затем, имеющие несколько процессов, пытающихся использовать один и тот же диск одновременно, могут быть вредными для общего времени, необходимого задания. Если вы можете разделить большой файл в меньшие файлы на нескольких дисках, то да, поиск, вероятно, будет быстрее таким образом.

Одна общая ошибка, которую я видел, люди, постарайтесь поставить разделенные файлы на Ramdisk. Это вы делаете кэширование, плохо. ОС, скорее всего, будет выполнять лучшую работу, используя то же количество оперативной памяти для кэширования того, на самом деле вы на самом деле работаете, а не весь файл.

Кроме того, вы хотите отслеживать свой процессор и дисковую активность, так как вы играете с различными сценариями, и изучите разницу между «узким местом» и «насыщенностью».

4
27.01.2020, 21:10

Есть другой способ сделать вещи быстрее: Используйте GREP -F File1 File2> Opture.txt .

Вы также можете использовать GNU Parallel: http://www.gnu.org/software/prollel/parallel_tutorial.html

5
27.01.2020, 21:10

Теги

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