On 03/25/2015 06:22 PM, Neil Horman wrote: > On Wed, Mar 25, 2015 at 04:42:23PM +0100, Olivier MATZ wrote: >> On 03/25/2015 04:22 PM, Neil Horman wrote: >>> On Wed, Mar 25, 2015 at 04:06:10PM +0100, Olivier MATZ wrote: >>>> Hi, >>>> >>>> On 03/24/2015 06:00 PM, Neil Horman wrote: >>>>> On Tue, Mar 24, 2015 at 02:52:59PM +0000, John McNamara wrote: >>>>>> Added a 'make system_info' target to print out system info >>>>>> related to DPDK. This is intended as output that can be >>>>>> attached to bug reports. >>>>>> --- >>>>>> mk/rte.sdkroot.mk | 33 +++++++++++++++++++++++++++++++++ >>>>>> 1 file changed, 33 insertions(+) >>>>>> >>>>>> diff --git a/mk/rte.sdkroot.mk b/mk/rte.sdkroot.mk >>>>>> index e8423b0..b477d09 100644 >>>>>> --- a/mk/rte.sdkroot.mk >>>>>> +++ b/mk/rte.sdkroot.mk >>>>>> @@ -123,3 +123,36 @@ examples examples_clean: >>>>>> %: >>>>>> $(Q)$(MAKE) -f $(RTE_SDK)/mk/rte.sdkconfig.mk checkconfig >>>>>> $(Q)$(MAKE) -f $(RTE_SDK)/mk/rte.sdkbuild.mk $@ >>>>>> + >>>>>> +.PHONY: system_info >>>>>> +system_info: >>>>>> + $(Q)echo >>>>>> + $(Q)echo "CC version" >>>>>> + $(Q)echo "==========" >>>>>> + $(Q)$(CC) --version >>>>>> + $(Q)echo >>>>>> + >>>>>> + $(Q)echo "DPDK version" >>>>>> + $(Q)echo "============" >>>>>> + $(Q)$(MAKE) showversion >>>>>> + $(Q)echo >>>>>> + >>>>>> + $(Q)echo "Git commit" >>>>>> + $(Q)echo "==========" >>>>>> + $(Q)git log --pretty=format:'%H' -1 >>>>>> + $(Q)echo >>>>>> + >>>>>> + $(Q)echo "Uname" >>>>>> + $(Q)echo "=====" >>>>>> + $(Q)uname -srvmpio >>>>>> + $(Q)echo >>>>>> + >>>>>> + $(Q)echo "Hugepages" >>>>>> + $(Q)echo "=========" >>>>>> + $(Q)grep -i huge /proc/meminfo >>>>>> + $(Q)echo >>>>>> + >>>>>> + $(Q)tools/cpu_layout.py >>>>>> + >>>>>> + $(Q)tools/dpdk_nic_bind.py --status >>>>>> + $(Q)echo >>>>>> -- >>>>>> 1.8.1.4 >>>>>> >>>>>> >>>>> Nak, for a few reasons: >>>>> >>>>> 1) While this target is in a common makefile, at least some of the >>>>> information >>>>> it gathers is operating system specfic (e.g. /proc/meminfo). This isn't >>>>> going >>>>> to work on BSD, or other operating systems that we might support in the >>>>> future >>>>> >>>>> 2) This is tied to the build system. Theres no guarantee that users will >>>>> diagnose problems only on the system that they built the DPDK on. >>>>> >>>>> A better solution might be to simply document the sort of information >>>>> that a bug >>>>> reporter is expected to gather, along with some sample tools for doing so. >>>>> There are numerous tools to get the above information, both in isolation >>>>> and in >>>>> aggregate. >>>> >>>> I agree with Neil that the Makefile is probably not the best place to >>>> put that because the target machine may not be the build machine. What >>>> about doing the same in a script? Therefore it could be embedded and >>>> executed on the target. >>>> >>> A script would be fine, as long as its cased for tools available on every >>> OS. >>> >>>> Neil, you talk about tools that do the same kind of things. What tool >>>> are you thinking about? The problem of using external tools is that it >>>> adds a dependency with them. >>>> >>> Yes, but how is that different from the above? running cat /proc/meminfo >>> has a >>> dependency on the existance of /proc/meminfo, which is involate on BSD. >>> Theres >>> another file there that hold simmilar memory information, though, or >>> perhaps a >>> memstat tool (I cant recall which). The point being, to have an >>> appropriate bug >>> reporting tool like this, you need to determine what information you need, >>> then >>> for each operating system you have to do the right things to get it, be that >>> read a file, run a tool, or some other operation. >> >> Agree, there's no guarantee that /proc/some/file exists on a linux >> distribution as there is no guarantee that an application is available. >> > Agreed. > >> For instance, using applications that are packaged in coreutils or >> procps should not be an issue. But I would say that using applications >> included in specific packages should be avoided, and in this case >> the /proc interface can be better. >> > Why? We just agreed that there is no guarantee that a file exists in /proc, > so > its no better or worse than using an application which may or may not be > installed. If the file is available, then great, you can use it, but > otherwise > you have to provide some alternate method for getting the data. Just not > collecting some of it in my mind makes such a script not worthwhile
I'm just saying that on linux it is much more likely to have /proc/meminfo (which is available since at least 2.4.x kernel) instead of having a rare package providing a tool able to format /proc/meminfo. On the other hand, using a common tool is preferable if we can expect it is installed on most distributions. > All I'm saying here is that if we want to provide this functionality we need > to > do one of the following: > > 1) Write a script (to remove ourselves from being bound to a build > environment), > which codifies the data items we wish to collect for debugging. For each > items > we need a case statement of the form: > switch $PLATFORM { > CASE BSD: > <do bsd collection> > CASE LINUX: > <do linux collection> > CASE OSV: > <do osv collection> > } > > Where each case either cats a file or runs an appropriate tool (making the > appropriate check for its avilability when needed). > > Or > > 2) Document the kind of data that we need when debugging, and make suggestions > in said document for what types of tools/files might provide that data, and > leaving it up to users to do the collection on their own. > > Given that we are likely to be talking about developers here, I'm inclined to > go > with option 2, given that its less maintenence to keep up with. > I think providing a script is a good idea to help people to give the most common info when they report a problem. I don't think we will have a lot of maintenance cost from this script. Regards, Olivier