[WIP] 확장 가능한 작업

5242 단어 benchmark-ips

묘사

Hi@evanphx
나는 분배된 대상수나 실행된 조회수 등을 추가하기 위해 benchmark-ips을 자주 확장하고 싶다는 것을 발견했다.
예를 들면https://github.com/michaelherold/benchmark-memory(또 하나, 찾을 수 없다) 하지만 솔직히 말하면 이 기본적으로 흔히 볼 수 있는 코드는 기초가 하나밖에 없으면 좋겠다.나는 benchmark-ips을 기초 접착제로 유지하고 다양한 유형의 기준 테스트를 실행할 수 있기를 바란다.(당신의 주요 목표가 아닐 수도 있습니다)
나는 앞의 두 가지 약속은 모두 생각하지 않은 것이라고 생각한다.
어쩌면 세 번째도
만약 네가 원한다면, 나는 그 중 일부를 단독 관계로 끌어들여서 거기서부터 시작할 수 있다.

토론 #1

이거 대박!그것을 첨가하는 것은 정말 의심의 여지가 없다.혹시 기억나세요? 저희도 발표에 추가할 수 있을까요?

토론 #2

@evanphxsweet - 이 길이 정확한지 확인하기 위해 이것들을 함께 놓았습니다.
내가 사용한 원시 코드는 원숭이 패치/해커 같다.나는 그것을 이 추상적인 것으로 바꿀 것이다.이것도 그것이 추상과 함께 일할 수 있는지를 시험할 것이다.
뭘 보충할 수 있는지 보자.
그것은 benchmark-memory만큼 광범위하지는 않지만, 여러 측정에서 예시를 실행할 수 있다. 코드를 읽을 때 @michaelherold가 이 코드를 사용하여 얼마나 훌륭한 작업을 했는지 깨달았다.

토론 #셋

감사합니다, @kbrock!
나는 나의 프로젝트 명세서에 이미 오랫동안 있었다. (나는 2016년 루비콘프에서 에반과 이 일을 이야기한 적이 있다. 하!)benchmark-ipsbenchmark-memory을 결합한 포장보석을 제작한다.나는 심지어 그것의 이름을 지어주었다: benchmark-time_and_space!😆
내가 해야 할 일은 'hold' 서열화 형식을 줄 기반이 아니라 JSON 기반으로 바꾸는 것이다.
여기서 큰 소리로 생각하자. 나는 benchmark-ips을 확장성 있게 하는 것을 좋아하고, 또한 benchmark-memory을 더욱 쉽게 사용할 수 있도록 하기를 좋아한다.

토론 #4

홀드의 전체적인 개념을 알고 싶습니다.
너는 두 가지 기준 테스트를 실행할 수 있다. (더 많을 수도 있지만...)
일련의 같은 방법으로 이루어진 1 파일e、 g:fast-ruby
B.1 파일에는 다양한 접근 방식이 포함되어 있습니다.e、 g:ruby benchhold은 사례 B에 적용되는 것처럼 보이지만 매우 수동적으로 변경됩니다.한 가지 방법을 개선한 후에 두 가지 실현을 실행하는 것이 많은 절차를 증가시킨 것 같다.CI에서 모든 버전을 실행하는 라이브러리가 좋을 수도 있습니다.
api (즉: Benchmark.fyi) 만 사용하여 여러 개의 실현에서 실행하는 것이 더 의미가 있습니까?이것이 바로 hold.csv 파일의 본질이다.맞습니까?여러 개의 실행 중인 공공 데이터.파일을 저장하거나 API가 있는 프로세스일 수 있습니다.
우리는 메모리, 조회, 시간을 저장하기 위해blob/json의 통계 데이터를 더 많이 필요로 한다.
우리는 이 특정한 테스트 운행을 위한 실현된 메타데이터를 필요로 한다.e, g: 루비 버전, 라이브러리 버전, 시간 운행.
그러나 이 외에도 기준과 매우 비슷하다.단지 참고로 제공하다
하지만 나는 이미 나를 뛰어넘었다고 생각한다.
어쩌면 난 루비벤치를 개조하고 있을지도 몰라.

토론 #5

대기 시스템이 더 좋을 거예요.최초의 설계 목적은 루비가 실행한 변경 사항에 대한 기준 테스트를 돕는 것입니다. 이것은 루비가 저장하고 다시 실행하도록 요구하는 이유입니다.

토론 #6

@evanphx 응, 좋은 대화였어.하지만 미안하지만, 나는 이 두 대화를 혼동했다.나는 몇 가지 생각으로 다른 문제나 홍보를 열 것이다.
@michaelherold 예시를 정의한 다음 이 두 가지/다른 테스트 유형에 사용하려고 합니다.나는 원래 이것이 Suite 인터페이스를 통해 확장할 수 있다고 생각했다.그러나 Suite은 테스트 사이에 발생하는 일에 더 관심을 가지고, 이는 단일 테스트에서 발생하는 일에 더 관심을 갖는다는 것을 깨달았다.

토론 #7

@evanphx는 아주 잘했어. 사실 이것이 내가 그것을 사용하는 목적이야.😄

토론 #8

@evanphxok, 약간의 변화를 추진했습니다.
나는 당신이 나에게 이 기능을 확장할 것을 요구해서 매우 기쁩니다. 왜냐하면 나는 실현 과정에서 몇 가지 문제를 발견했기 때문입니다.
  • 은 내가 예상한 것보다 많다.
  • ~~ 조수인터페이스가 run(full_report)인지 run(job)인지 불확실합니다.
  • ~~ Benchmark::IPS::Objects을 추가할지 모르겠습니다.보아하니 @michaelherold의 업무가 더욱 철저해진 것 같다.적어도 나는 이 평론이 다른 작가들에게 간단한 예가 되기를 바란다
  • 죄송합니다. - 코드 예제가 더 이상 관련되지 않으므로 삭제되었습니다.

    토론 #9

    네, 다녀오겠습니다.
    나는 그것을 기억 보고서에 쓸 것이다. 마이클이 나의 실현을 찢어서 그의 보석처럼 위대하게 하기를 바란다
    데이터는 Report::Entry을 입력해야지

    토론 #10

    require "benchmark/ips"
    require "active_record"
    
    ActiveRecord::Base.establish_connection(ENV.fetch('DATABASE_URL') { "postgres://localhost/user_benchmark" })
    ActiveRecord::Migration.verbose = false
    
    ActiveRecord::Schema.define do
      create_table :users, force: true do |t|
        t.string :name
      end
      #add_index :users, :name
    end
    class User < ActiveRecord::Base ;end
    
    if User.count == 0
      puts "Creating 100 users"
      100.times { |i| User.create name: "user #{i}" }
    end
    
    Benchmark.ips do |x|
      x.report("User.all.first") { User.all.first }
      x.report("User.all.to_a.first") { User.all.to_a.first }
    
      x.compare!
      x.queries!
      x.objects!
    end
    
    을 출력하는 것이 아니라고 생각합니다.
    Creating 100 users
    Warming up --------------------------------------
          User.all.first   287.000  i/100ms
     User.all.to_a.first    81.000  i/100ms
    Calculating -------------------------------------
          User.all.first      2.962k (±14.5%) i/s -     14.637k in   5.081636s
     User.all.to_a.first    955.136  (± 7.2%) i/s -      4.779k in   5.034635s
    Queries:
          User.all.first:   1 queries     1 objects
     User.all.to_a.first:   1 queries   100 objects
    
    Comparison:
          User.all.first:     2962.3 i/s
     User.all.to_a.first:      955.1 i/s - 3.10x  slower
    
    Queries Comparison:
     User.all.to_a.first:   1 queries   100 objects
          User.all.first:   1 queries     1 objects
    
    
    Comparison:
     User.all.to_a.first:       1184 objects
          User.all.first:        148 objects
    

    토론 #11

    제품 상태: 우선 89- 비교 인터페이스 확인(유지/보존 인터페이스도 있을 수 있음)
    현재 궤도에서는 데이텀 IP에 너무 많은 영향을 미칠 수 있습니다.먼저 보고 인터페이스를 주목하고 거기서부터 시작하세요.

    토론 #12

    파일을 닫고 버스트를 계속하시겠습니까?

    토론 #13

    네, 그럴게요.감사합니다.

    좋은 웹페이지 즐겨찾기