lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Thu, 25 Sep 2014 23:10:31 +0000
From:	"Elliott, Robert (Server Storage)" <Elliott@...com>
To:	Steven Rostedt <rostedt@...dmis.org>,
	Andi Kleen <andi@...stfloor.org>
CC:	"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
	"Jens Axboe <axboe@...nel.dk> (axboe@...nel.dk)" <axboe@...nel.dk>,
	"Christoph Hellwig" <hch@....de>,
	Frederic Weisbecker <fweisbec@...il.com>
Subject: RE: ftrace function-graph and interprocessor interrupts



> -----Original Message-----
> From: Steven Rostedt [mailto:rostedt@...dmis.org]
...
> Does, this patch fix it for you?
> 
> -- Steve
...

> -	if (type == TRACE_GRAPH_ENT)
> -		ret = trace_seq_puts(s, "==========>");
> -	else
> +	if (trace_flags & TRACE_ITER_LATENCY_FMT) {
> +		ret = print_graph_lat_fmt(s, ent);
> +		if (ret == TRACE_TYPE_PARTIAL_LINE)
> +			return TRACE_TYPE_PARTIAL_LINE;
> +	}
> +
> +	if (*cpu_in_irq) {
>  		ret = trace_seq_puts(s, "<==========");
> +		*cpu_in_irq = 0;
> +	} else {
> +		ret = trace_seq_puts(s, "==========>");
> +		*cpu_in_irq = in_irq;
> +	}

That changes the direction of the arrows (which is fine, if
intended).

Results:
The beginning and end of do_IRQ are marked, but it drops off
during the middle.  The normal function trace shows all of those
still in hardirq context.


 10)   <========== |
 10)               |                            do_IRQ() {
 10)               |                              irq_enter() {
 10)   0.082 us    |                                rcu_irq_enter();
 10)   0.101 us    |                                irqtime_account_irq();
 10)   1.321 us    |                              } /* irq_enter */
 10)   ==========> |
 10)   0.058 us    |                              exit_idle();
 10)               |                              handle_irq() {
 10)   0.091 us    |                                irq_to_desc();
 10)               |                                handle_edge_irq() {
 10)   0.068 us    |                                  _raw_spin_lock();
 10)   0.142 us    |                                  ir_ack_apic_edge();
 10)               |                                  handle_irq_event() {
 10)               |                                    handle_irq_event_percpu() {
...
 10)   0.092 us    |                                      add_interrupt_randomness();
 10)   0.080 us    |                                      note_interrupt();
 10)   9.510 us    |                                    } /* handle_irq_event_percpu */
 10)   0.071 us    |                                    _raw_spin_lock();
 10) + 10.577 us   |                                  } /* handle_irq_event */
 10) + 12.310 us   |                                } /* handle_edge_irq */
 10) + 13.901 us   |                              } /* handle_irq */
 10)               |                              irq_exit() {
 10)   0.111 us    |                                irqtime_account_irq();
 10)   <========== |
 10)   0.074 us    |                                idle_cpu();
 10)   0.080 us    |                                rcu_irq_exit();
 10)   1.800 us    |                              } /* irq_exit */
 10) + 19.132 us   |                            } /* do_IRQ */
 10)   ==========> |


Same with smp_apic_timer_interrupt:
 10)   <========== |
 10)               |                              smp_apic_timer_interrupt() {
 10)               |                                irq_enter() {
 10)   0.072 us    |                                  rcu_irq_enter();
 10)   0.099 us    |                                  irqtime_account_irq();
 10)   1.069 us    |                                } /* irq_enter */
 10)   ==========> |
 10)   0.060 us    |                                exit_idle();
 10)               |                                local_apic_timer_interrupt() {
 10)               |                                  hrtimer_interrupt() {
...
 10)   1.810 us    |                                    } /* tick_program_event */
 10) + 32.361 us   |                                  } /* hrtimer_interrupt */
 10) + 32.904 us   |                                } /* local_apic_timer_interrupt */
 10)               |                                irq_exit() {
 10)   0.111 us    |                                  irqtime_account_irq();
 10)   <========== |
 10)               |                                  __do_softirq() {
 10)   0.058 us    |                                    msecs_to_jiffies();
 10)   0.099 us    |                                    irqtime_account_irq();
 10)               |                                    smp_call_function_single_interrupt() {
 10)               |                                      irq_enter() {
 10)   0.069 us    |                                        rcu_irq_enter();
 10)   0.100 us    |                                        irqtime_account_irq();
 10)   1.251 us    |                                      } /* irq_enter */
 10)   ==========> |


generic_smp_call_function_single_interrupt doesn't
seem to be getting marked, even though function trace 
finds many that are in hardirq context.

             fio-7146  [010] d...  2968.183376: smp_call_function_single_interrupt <-call_function_single_interrupt
             fio-7146  [010] d...  2968.183376: irq_enter <-smp_call_function_single_interrupt
             fio-7146  [010] d...  2968.183377: rcu_irq_enter <-irq_enter
             fio-7146  [010] d...  2968.183377: irqtime_account_irq <-irq_enter
             fio-7146  [010] d.h.  2968.183377: generic_smp_call_function_single_interrupt <-smp_call_function_single_interrupt
             fio-7146  [010] d.h.  2968.183377: flush_smp_call_function_queue <-generic_smp_call_function_single_interrupt
             fio-7146  [010] d.h.  2968.183378: __blk_mq_complete_request_remote <-flush_smp_call_function_queue
             fio-7146  [010] d.h.  2968.183378: scsi_softirq_done <-__blk_mq_complete_request_remote
             fio-7146  [010] d.h.  2968.183378: scsi_decide_disposition <-scsi_softirq_done

Here's a longer excerpt starting with back-to-back arrows.
After that they seem flipped again.  This shows a
generic_smp_call_function_single_interrupt call.


 10)   0.079 us    |                                          rcu_irq_exit();
 10)   1.829 us    |                                        } /* irq_exit */
 10) + 26.462 us   |                                      } /* do_IRQ */
 10)   <========== |
 10)   ==========> |
 10)               |                                      do_IRQ() {
 10)               |                                        irq_enter() {
 10)   0.078 us    |                                          rcu_irq_enter();
 10)   0.108 us    |                                          irqtime_account_irq();
 10)   1.200 us    |                                        } /* irq_enter */
 10)   0.053 us    |                                        exit_idle();
 10)               |                                        handle_irq() {
 10)   0.104 us    |                                          irq_to_desc();
 10)               |                                          handle_edge_irq() {
 10)   0.072 us    |                                            _raw_spin_lock();
 10)   0.153 us    |                                            ir_ack_apic_edge();
 10)               |                                            handle_irq_event() {
 10)               |                                              handle_irq_event_percpu() {
 10)               |                                                do_hpsa_intr_msi [hpsa]() {
 10)   0.144 us    |                                                  SA5_performant_completed [hpsa]();
 10)   0.749 us    |                                                } /* do_hpsa_intr_msi [hpsa] */
 10)   0.082 us    |                                                add_interrupt_randomness();
 10)   0.075 us    |                                                note_interrupt();
 10)   2.470 us    |                                              } /* handle_irq_event_percpu */
 10)   0.062 us    |                                              _raw_spin_lock();
 10)   3.556 us    |                                            } /* handle_irq_event */
 10)   5.332 us    |                                          } /* handle_edge_irq */
 10)   6.521 us    |                                        } /* handle_irq */
 10)               |                                        irq_exit() {
 10)   0.108 us    |                                          irqtime_account_irq();
 10)   0.060 us    |                                          idle_cpu();
 10)   0.079 us    |                                          rcu_irq_exit();
 10)   1.752 us    |                                        } /* irq_exit */
 10) + 11.513 us   |                                      } /* do_IRQ */
 10)   <========== |
 10)               |                                      scsi_init_io() {
 10)               |                                        scsi_init_sgtable() {
 10)   0.109 us    |                                          scsi_alloc_sgtable();
 10)               |                                          blk_rq_map_sg() {
 10)   0.134 us    |                                            __blk_bios_map_sg();
 10)   0.697 us    |                                          } /* blk_rq_map_sg */
 10)   1.864 us    |                                        } /* scsi_init_sgtable */
 10)   2.436 us    |                                      } /* scsi_init_io */
 10) + 42.767 us   |                                    } /* sd_setup_read_write_cmnd [sd_mod] */
 10) + 43.329 us   |                                  } /* sd_init_command [sd_mod] */
 10) + 43.886 us   |                                } /* scsi_setup_cmnd */
 10) + 45.100 us   |                              } /* scsi_mq_prep_fn */
 10)   0.080 us    |                              scsi_init_cmd_errh();
 10)               |                              scsi_dispatch_cmd() {
 10)   0.057 us    |                                scsi_log_send();
 10)               |                                hpsa_scsi_queue_command [hpsa]() {
 10)   0.125 us    |                                  cmd_tagged_alloc [hpsa]();
 10)               |                                  hpsa_ioaccel_submit [hpsa]() {
 10)   0.193 us    |                                    hpsa_cmd_init [hpsa]();
 10)               |                                    hpsa_scsi_ioaccel_queue_command [hpsa]() {
 10)               |                                      hpsa_scsi_ioaccel2_queue_command [hpsa]() {
 10)   0.057 us    |                                        fixup_ioaccel_cdb [hpsa]();
 10)   0.112 us    |                                        scsi_dma_map();
 10)               |                                        enqueue_cmd_and_start_io [hpsa]() {
 10)   0.087 us    |                                          __enqueue_cmd_and_start_io [hpsa]();
 10)   0.701 us    |                                        } /* enqueue_cmd_and_start_io [hpsa] */
 10)   2.627 us    |                                      } /* hpsa_scsi_ioaccel2_queue_command [hpsa] */
 10)   3.146 us    |                                    } /* hpsa_scsi_ioaccel_queue_command [hpsa] */
 10)   4.394 us    |                                  } /* hpsa_ioaccel_submit [hpsa] */
 10)   5.909 us    |                                } /* hpsa_scsi_queue_command [hpsa] */
 10)   7.034 us    |                              } /* scsi_dispatch_cmd */
 10) + 54.950 us   |                            } /* scsi_queue_rq */
 10) + 60.213 us   |                          } /* __blk_mq_run_hw_queue */
 10) + 60.760 us   |                        } /* blk_mq_run_hw_queue */
 10) ! 112.938 us  |                      } /* blk_sq_make_request */
 10) ! 115.912 us  |                    } /* generic_make_request */
 10) ! 116.470 us  |                  } /* submit_bio */
 10)               |                  blk_finish_plug() {
 10)   0.063 us    |                    blk_flush_plug_list();
 10)   0.695 us    |                  } /* blk_finish_plug */
 10)   0.104 us    |                  _raw_spin_lock_irqsave();
 10)   0.086 us    |                  _raw_spin_unlock_irqrestore();
 10) ! 179.456 us  |                } /* __blockdev_direct_IO */
 10) ! 180.009 us  |              } /* blkdev_direct_IO */
 10) ! 181.178 us  |            } /* generic_file_read_iter */
 10) ! 181.742 us  |          } /* blkdev_read_iter */
 10) ! 185.747 us  |        } /* aio_run_iocb */
 10) ! 189.350 us  |      } /* io_submit_one */
 10)               |      blk_finish_plug() {
 10)   0.060 us    |        blk_flush_plug_list();
 10)   0.576 us    |      } /* blk_finish_plug */
 10) ! 192.194 us  |    } /* do_io_submit */
 10) ! 192.749 us  |  } /* SyS_io_submit */
 10)               |  SyS_io_submit() {
 10)               |    do_io_submit() {
 10)   0.181 us    |      lookup_ioctx();
 10)   0.060 us    |      blk_start_plug();
 10)               |      io_submit_one() {
 10)               |        kmem_cache_alloc() {
 10)   0.061 us    |          _cond_resched();
 10)   0.062 us    |          kmemleak_alloc();
 10)   1.213 us    |        } /* kmem_cache_alloc */
 10)               |        fget() {
 10)   0.126 us    |          __fget();
 10)   0.638 us    |        } /* fget */
 10)               |        aio_run_iocb() {
 10)               |          rw_verify_area() {
 10)               |            security_file_permission() {
 10)   0.061 us    |              cap_file_permission();
 10)   0.062 us    |              __fsnotify_parent();
 10)   0.072 us    |              fsnotify();
 10)   1.761 us    |            } /* security_file_permission */
 10)   2.312 us    |          } /* rw_verify_area */
 10)   0.068 us    |          iov_iter_init();
 10)               |          blkdev_read_iter() {
 10)               |            generic_file_read_iter() {
 10)   0.064 us    |              filemap_write_and_wait_range();
 10)               |              blkdev_direct_IO() {
 10)               |                __blockdev_direct_IO() {
 10)   0.064 us    |                  iov_iter_alignment();
 10)               |                  kmem_cache_alloc() {
 10)   0.071 us    |                    _cond_resched();
 10)   0.070 us    |                    kmemleak_alloc();
 10)   1.467 us    |                  } /* kmem_cache_alloc */
 10)   0.072 us    |                  iov_iter_npages();
 10)   0.073 us    |                  blk_start_plug();
 10)               |                  do_direct_IO() {
 10)               |                    iov_iter_get_pages() {
 10)               |                      get_user_pages_fast() {
 10)               |                        gup_pud_range() {
 10)   0.263 us    |                          gup_pte_range();
 10)   0.857 us    |                        } /* gup_pud_range */
 10)   1.441 us    |                      } /* get_user_pages_fast */
 10)   2.043 us    |                    } /* iov_iter_get_pages */
 10)   ==========> |
 10)               |                    do_IRQ() {
 10)               |                      irq_enter() {
 10)   0.083 us    |                        rcu_irq_enter();
 10)   0.110 us    |                        irqtime_account_irq();
 10)   1.174 us    |                      } /* irq_enter */
 10)   0.068 us    |                      exit_idle();
 10)               |                      handle_irq() {
 10)   0.089 us    |                        irq_to_desc();
 10)               |                        handle_edge_irq() {
 10)   0.056 us    |                          _raw_spin_lock();
 10)   0.133 us    |                          ir_ack_apic_edge();
 10)               |                          handle_irq_event() {
 10)               |                            handle_irq_event_percpu() {
 10)               |                              do_hpsa_intr_msi [hpsa]() {
 10)   0.205 us    |                                SA5_performant_completed [hpsa]();
 10)               |                                complete_scsi_command [hpsa]() {
 10)   0.161 us    |                                  scsi_dma_unmap();
 10)               |                                  process_ioaccel2_completion [hpsa]() {
 10)               |                                    scsi_mq_done() {
 10)               |                                      blk_mq_complete_request() {
 10)               |                                        __blk_mq_complete_request() {
 10)               |                                          smp_call_function_single_async() {
 10)               |                                            generic_exec_single() {
 10)               |                                              native_send_call_func_single_ipi() {
 10)               |                                                x2apic_send_IPI_mask() {
 10)   0.337 us    |                                                  __x2apic_send_IPI_mask();
 10)   0.855 us    |                                                } /* x2apic_send_IPI_mask */
 10)   1.385 us    |                                              } /* native_send_call_func_single_ipi */
 10)   2.072 us    |                                            } /* generic_exec_single */
 10)   2.708 us    |                                          } /* smp_call_function_single_async */
 10)   3.347 us    |                                        } /* __blk_mq_complete_request */
 10)   3.952 us    |                                      } /* blk_mq_complete_request */
 10)   4.509 us    |                                    } /* scsi_mq_done */
 10)   5.265 us    |                                  } /* process_ioaccel2_completion [hpsa] */
 10)   6.650 us    |                                } /* complete_scsi_command [hpsa] */
 10)   8.007 us    |                              } /* do_hpsa_intr_msi [hpsa] */
 10)   0.089 us    |                              add_interrupt_randomness();
 10)   0.072 us    |                              note_interrupt();
 10)   9.711 us    |                            } /* handle_irq_event_percpu */
 10)   0.062 us    |                            _raw_spin_lock();
 10) + 10.808 us   |                          } /* handle_irq_event */
 10) + 12.396 us   |                        } /* handle_edge_irq */
 10) + 13.472 us   |                      } /* handle_irq */
 10)               |                      irq_exit() {
 10)   0.097 us    |                        irqtime_account_irq();
 10)   0.055 us    |                        idle_cpu();
 10)   0.086 us    |                        rcu_irq_exit();
 10)   1.773 us    |                      } /* irq_exit */
 10) + 18.513 us   |                    } /* do_IRQ */
 10)   <========== |
 10)               |                    smp_call_function_single_interrupt() {
 10)               |                      irq_enter() {
 10)   0.081 us    |                        rcu_irq_enter();
 10)   0.094 us    |                        irqtime_account_irq();
 10)   1.307 us    |                      } /* irq_enter */
 10)   ==========> |
 10)               |                      generic_smp_call_function_single_interrupt() {
 10)               |                        flush_smp_call_function_queue() {
 10)               |                          __blk_mq_complete_request_remote() {
 10)               |                            scsi_softirq_done() {
 10)               |                              scsi_decide_disposition() {
 10)   0.069 us    |                                scsi_handle_queue_ramp_up();
 10)   0.693 us    |                              } /* scsi_decide_disposition */
 10)   0.062 us    |                              scsi_log_completion();
 10)               |                              scsi_finish_command() {
 10)   0.113 us    |                                scsi_device_unbusy();

---
Rob Elliott    HP Server Storage



--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ