1. 06 6月, 2009 2 次提交
    • I
      perf_counter: Separate out attr->type from attr->config · a21ca2ca
      Ingo Molnar 提交于
      Counter type is a frequently used value and we do a lot of
      bit juggling by encoding and decoding it from attr->config.
      
      Clean this up by creating a separate attr->type field.
      
      Also clean up the various similarly complex user-space bits
      all around counter attribute management.
      
      The net improvement is significant, and it will be easier
      to add a new major type (which is what triggered this cleanup).
      
      (This changes the ABI, all tools are adapted.)
      (PowerPC build-tested.)
      
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
      Cc: Marcelo Tosatti <mtosatti@redhat.com>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      LKML-Reference: <new-submission>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      a21ca2ca
    • F
      perf top: Fix zero or negative refresh delay · 2f335a02
      Frederic Weisbecker 提交于
      If perf top is executed with a zero value for the refresh rate,
      we get a division by zero exception while computing samples_per_sec.
      
      Also a zero refresh rate is not possible, neither do we want to
      accept negative values.
      
      [ Impact: fix division by zero in perf top ]
      
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
      Cc: Marcelo Tosatti <mtosatti@redhat.com>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      LKML-Reference: <1244223061-5399-1-git-send-email-fweisbec@gmail.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      2f335a02
  2. 05 6月, 2009 3 次提交
    • I
      perf_counter tools: Clarify events/samples naming · 2debbc83
      Ingo Molnar 提交于
      A number of places said 'events' while they should say 'samples'.
      Acked-by: NPeter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      LKML-Reference: <new-submission>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      2debbc83
    • I
      perf record, top: Implement --freq · cf1f4574
      Ingo Molnar 提交于
      Support frequency-based profiling and make it the default.
      
      (Also add a Hz printout in perf top.)
      
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      LKML-Reference: <new-submission>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      cf1f4574
    • F
      perf_counter: Sleep before refresh using poll in perf top · 0f5486b5
      Frederic Weisbecker 提交于
      perf top is refreshed every delay_secs the thread runs in such
      loop:
      
      while (sleep(delay_secs)) {
      	print_sym_table();
      }
      
      At the end of print_sym_table(), poll is used without sleep delay
      to check if we have something from stdin.
      
      It means that this check is done only every delay_secs, which can
      be higher that 2 secs if the user defined a custom refresh rate.
      
      We can drop sleep() here and directly use poll to wait between
      refresh periods, so that the reaction after the user stops perf top
      after typing "Enter" is immediate and doesn't suffer from the
      delay_secs latency.
      
      Nb: poll doesn't add any overhead that can parasite perf top measures
      since it sleeps the entire timeout here.
      Signed-off-by: NFrederic Weisbecker <fweisbec@gmail.com>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
      Cc: Marcelo Tosatti <mtosatti@redhat.com>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Frederic Weisbecker <fweisbec@gmail.com>
      LKML-Reference: <1244141284-7507-1-git-send-email-fweisbec@gmail.com>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      0f5486b5
  3. 04 6月, 2009 6 次提交
    • P
      perf_counter tools: Use fork and remove munmap events · 62fc4453
      Peter Zijlstra 提交于
      Use fork events to clone comm and map data and remove everything
      munmap related
      Signed-off-by: NPeter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      LKML-Reference: <new-submission>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      62fc4453
    • I
      perf_counter tools: Add color terminal output support · 8fc0321f
      Ingo Molnar 提交于
      Add Git's color printing library to util/color.[ch].
      
      Add it to perf report, with a trivial example to print high-overhead
      entries in red, low-overhead entries in green.
      
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      LKML-Reference: <new-submission>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      8fc0321f
    • I
      perf_counter tools: Print out symbol parsing errors only if --verbose · bd74137e
      Ingo Molnar 提交于
      Also, add a suggestion to 'perf report', if the default sort order is
      used.
      
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
      Cc: Marcelo Tosatti <mtosatti@redhat.com>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      LKML-Reference: <new-submission>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      bd74137e
    • I
      perf top: Reduce default filter threshold · 6e53cdf1
      Ingo Molnar 提交于
      On idle systems 'perf top' comes up empty by default, because the event
      count filter is set to 100.
      
      Reduce it to 5 instead.
      
      Also add an option to limit the number of functions displayed.
      Reported-by: NSteven Rostedt <rostedt@goodmis.org>
      Acked-by: NPeter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
      Cc: Marcelo Tosatti <mtosatti@redhat.com>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      LKML-Reference: <new-submission>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      6e53cdf1
    • I
      perf_counter tools: Work around warnings in older GCCs · 233f0b95
      Ingo Molnar 提交于
      GCC 4.1.2 produces:
      
       util/parse-options.c: In function ‘get_value’:
       util/parse-options.c:36: warning: ‘arg’ may be used uninitialized in this function
      
       builtin-top.c: In function ‘display_thread’:
       builtin-top.c:178: warning: ‘printed’ may be used uninitialized in this function
      
      Annotate them away by initializing these variables to 0.
      
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
      Cc: Marcelo Tosatti <mtosatti@redhat.com>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      LKML-Reference: <new-submission>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      233f0b95
    • I
      perf_counter tools: Clean up old kerneltop references · f2521b6e
      Ingo Molnar 提交于
      kerneltop has been replaced with perf top - so fix up a few
      remaining references to it in display text and error messages.
      
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
      Cc: Marcelo Tosatti <mtosatti@redhat.com>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      LKML-Reference: <new-submission>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      f2521b6e
  4. 03 6月, 2009 3 次提交
    • I
      perf_counter tools: Make source code headers more coherent · bf9e1876
      Ingo Molnar 提交于
      The perf commands had different ways of describing themselves,
      introduce a coherent command-file-header format taken from the
      Git project.
      
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
      Cc: Marcelo Tosatti <mtosatti@redhat.com>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: John Kacur <jkacur@redhat.com>
      LKML-Reference: <new-submission>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      bf9e1876
    • P
      perf_counter tools: Fix up the ABI shakeup · c70975bc
      Peter Zijlstra 提交于
      Signed-off-by: NPeter Zijlstra <a.p.zijlstra@chello.nl>
      LKML-Reference: <new-submission>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
      Cc: Marcelo Tosatti <mtosatti@redhat.com>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: John Kacur <jkacur@redhat.com>
      Cc: Stephane Eranian <eranian@googlemail.com>
      LKML-Reference: <new-submission>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      c70975bc
    • P
      perf_counter tools: Remove the last nmi bits · 29c28102
      Peter Zijlstra 提交于
      Everything is nmi these days, remove the userspace bits so that
      the kernel can drop the interface.
      Signed-off-by: NPeter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
      Cc: Marcelo Tosatti <mtosatti@redhat.com>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Thomas Gleixner <tglx@linutronix.de>
      Cc: John Kacur <jkacur@redhat.com>
      LKML-Reference: <new-submission>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      29c28102
  5. 30 5月, 2009 1 次提交
  6. 29 5月, 2009 3 次提交
  7. 27 5月, 2009 1 次提交
    • I
      perf_counter tools: Introduce stricter C code checking · 16f762a2
      Ingo Molnar 提交于
      Tighten up our C code requirements:
      
       - disallow warnings
       - disallow declarations-mixed-with-statements
       - require proper prototypes
       - require C99 (with gcc extensions)
      
      Fix up a ton of problems these measures unearth:
      
       - unused functions
       - needlessly global functions
       - missing prototypes
       - code mixed with declarations
      
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
      Cc: Marcelo Tosatti <mtosatti@redhat.com>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      Cc: John Kacur <jkacur@redhat.com>
      Cc: Steven Rostedt <rostedt@goodmis.org>
      LKML-Reference: <20090526222155.GJ4424@ghostprotocols.net>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      16f762a2
  8. 26 5月, 2009 4 次提交
    • M
      perf top: fix typo in -d option · db20c003
      Mike Galbraith 提交于
      Clean up copy/paste options parsing conversion error.
      
      [ Impact: reactivate -d option ]
      Signed-off-by: NMike Galbraith <efault@gmx.de>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
      Cc: Marcelo Tosatti <mtosatti@redhat.com>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      Cc: John Kacur <jkacur@redhat.com>
      LKML-Reference: <new-submission>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      db20c003
    • M
      perf top: Remove leftover NMI/IRQ bits · f91183fe
      Mike Galbraith 提交于
      79202b removed IRQ/NMI mode selection, so remove it from
      perf top as well.
      
      [ Impact: cleanup ]
      Signed-off-by: NMike Galbraith <efault@gmx.de>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
      Cc: Marcelo Tosatti <mtosatti@redhat.com>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      Cc: John Kacur <jkacur@redhat.com>
      LKML-Reference: <new-submission>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      f91183fe
    • I
      perf top: Convert to Git option parsing · b456bae0
      Ingo Molnar 提交于
      Remove getopt usage and use Git's much more advanced and more compact
      command option library.
      
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
      Cc: Marcelo Tosatti <mtosatti@redhat.com>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      Cc: John Kacur <jkacur@redhat.com>
      LKML-Reference: <new-submission>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      b456bae0
    • I
      perf record: Convert to Git option parsing · 0e9b20b8
      Ingo Molnar 提交于
      Remove getopt usage and use Git's much more advanced and more compact
      command option library.
      
      Git's library (util/parse-options.[ch]) constructs help texts and
      error messages automatically, and has a number of other convenience
      features as well.
      
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Mike Galbraith <efault@gmx.de>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
      Cc: Marcelo Tosatti <mtosatti@redhat.com>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      Cc: John Kacur <jkacur@redhat.com>
      LKML-Reference: <new-submission>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      0e9b20b8
  9. 25 5月, 2009 1 次提交
    • M
      perf top: Reduce display overhead · d94b9430
      Mike Galbraith 提交于
      Iterate over the symbol table once per display interval, and
      copy/sort/tally/decay only those symbols which are active.
      
      Before:
      
       top - 10:14:53 up  4:08, 17 users,  load average: 1.17, 1.53, 1.49
       Tasks: 273 total,   5 running, 268 sleeping,   0 stopped,   0 zombie
       Cpu(s):  6.9%us, 38.2%sy,  0.0%ni, 19.9%id,  0.0%wa,  0.0%hi, 35.0%si,  0.0%st
      
         PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  P COMMAND
       28504 root      20   0  1044  260  164 S   58  0.0   0:04.19 2 netserver
       28499 root      20   0  1040  412  316 R   51  0.0   0:04.15 0 netperf
       28500 root      20   0  1040  408  316 R   50  0.0   0:04.14 1 netperf
       28503 root      20   0  1044  260  164 S   50  0.0   0:04.01 1 netserver
       28501 root      20   0  1044  260  164 S   49  0.0   0:03.99 0 netserver
       28502 root      20   0  1040  412  316 S   43  0.0   0:03.96 2 netperf
       28468 root      20   0 1892m 325m  972 S   16 10.8   0:10.50 3 perf
       28467 root      20   0 1892m 325m  972 R    2 10.8   0:00.72 3 perf
      
      After:
      
       top - 10:16:30 up  4:10, 17 users,  load average: 2.27, 1.88, 1.62
       Tasks: 273 total,   6 running, 267 sleeping,   0 stopped,   0 zombie
       Cpu(s):  2.5%us, 39.7%sy,  0.0%ni, 24.6%id,  0.0%wa,  0.0%hi, 33.3%si,  0.0%st
      
         PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  P COMMAND
       28590 root      20   0  1040  412  316 S   54  0.0   0:07.85 2 netperf
       28589 root      20   0  1044  260  164 R   54  0.0   0:07.84 0 netserver
       28588 root      20   0  1040  412  316 R   50  0.0   0:07.89 1 netperf
       28591 root      20   0  1044  256  164 S   50  0.0   0:07.82 1 netserver
       28587 root      20   0  1040  408  316 R   47  0.0   0:07.61 0 netperf
       28592 root      20   0  1044  260  164 R   47  0.0   0:07.85 2 netserver
       28378 root      20   0  8732 1300  860 R    2  0.0   0:01.81 3 top
       28577 root      20   0 1892m 165m  972 R    2  5.5   0:00.48 3 perf
       28578 root      20   0 1892m 165m  972 S    2  5.5   0:00.04 3 perf
      
      [ Impact: optimization ]
      Signed-off-by: NMike Galbraith <efault@gmx.de>
      Acked-by: NPeter Zijlstra <a.p.zijlstra@chello.nl>
      LKML-Reference: <new-submission>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      d94b9430
  10. 24 5月, 2009 2 次提交
    • M
      perf top: fix segfault · c2990a2a
      Mike Galbraith 提交于
      c6eb13 increased stack usage such that perf-top now croaks on startup.
      
      Take event_array and mmap_array off the stack to prevent segfault on boxen
      with smallish ulimit -s setting.
      Signed-off-by: NMike Galbraith <efault@gmx.de>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      Cc: John Kacur <jkacur@redhat.com>
      LKML-Reference: <new-submission>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      c2990a2a
    • P
      perf_counter: Fix userspace build · 1a482f38
      Peter Zijlstra 提交于
      recent userspace (F11) seems to already include the
      linux/unistd.h bits which means we cannot include the version
      in the kernel sources due to the header guards being the same.
      
      Ensure we include the kernel version first.
      Signed-off-by: NPeter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Paul Mackerras <paulus@samba.org>
      Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
      Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
      Cc: John Kacur <jkacur@redhat.com>
      LKML-Reference: <20090523163012.739756497@chello.nl>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      1a482f38
  11. 15 5月, 2009 1 次提交
  12. 10 5月, 2009 1 次提交
  13. 02 5月, 2009 1 次提交
  14. 01 5月, 2009 1 次提交
  15. 29 4月, 2009 1 次提交
  16. 28 4月, 2009 1 次提交
  17. 27 4月, 2009 1 次提交
  18. 20 4月, 2009 3 次提交
  19. 09 4月, 2009 1 次提交
  20. 07 4月, 2009 1 次提交
    • M
      perf_counter tools: kerneltop: display per function percentage along with event count · 6278af66
      Mike Galbraith 提交于
      ```---------------------------------------------------------------------------
       KernelTop:   90551 irqs/sec  kernel:15.0% [NMI, 100000 CPU cycles],  (all, 4 CPUs)
      ```
      
      ---------------------------------------------------------------------------
      
                   events    pcnt         RIP          kernel function
        ______     ______   _____   ________________   _______________
      
                 16871.00 - 19.1% - ffffffff80328e20 : clear_page_c
                  8810.00 -  9.9% - ffffffff8048ce80 : page_fault
                  4746.00 -  5.4% - ffffffff8048cae2 : _spin_lock
                  4428.00 -  5.0% - ffffffff80328e70 : copy_page_c
                  3340.00 -  3.8% - ffffffff80329090 : copy_user_generic_string!
                  2679.00 -  3.0% - ffffffff8028a16b : get_page_from_freelist
                  2254.00 -  2.5% - ffffffff80296f19 : unmap_vmas
                  2082.00 -  2.4% - ffffffff80297e19 : handle_mm_fault
                  1754.00 -  2.0% - ffffffff80288dc8 : __rmqueue_smallest
                  1553.00 -  1.8% - ffffffff8048ca58 : _spin_lock_irqsave
                  1400.00 -  1.6% - ffffffff8028cdc8 : release_pages
                  1337.00 -  1.5% - ffffffff80285400 : find_get_page
                  1335.00 -  1.5% - ffffffff80225a23 : do_page_fault
                  1299.00 -  1.5% - ffffffff802ba8e7 : __d_lookup
                  1174.00 -  1.3% - ffffffff802b38f3 : __link_path_walk
                  1155.00 -  1.3% - ffffffff802843e1 : perf_swcounter_ctx_event!
                  1137.00 -  1.3% - ffffffff8028d118 : ____pagevec_lru_add
                   963.00 -  1.1% - ffffffff802a670b : kmem_cache_alloc
                   885.00 -  1.0% - ffffffff8024bc61 : __wake_up_bit
      
      Display per function percentage along with event count.
      Signed-off-by: NMike Galbraith <efault@gmx.de>
      Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
      Cc: Paul Mackerras <paulus@samba.org>
      Signed-off-by: NIngo Molnar <mingo@elte.hu>
      6278af66
  21. 06 4月, 2009 2 次提交