6 years agoRemove erroneous print statement
Kevin Klues [Wed, 28 May 2014 00:22:20 +0000 (17:22 -0700)]
Remove erroneous print statement

6 years agoImplement pthead_kill() and sigmask stuff for pthreads
Kevin Klues [Tue, 27 May 2014 23:24:49 +0000 (16:24 -0700)]
Implement pthead_kill() and sigmask stuff for pthreads

6 years agoFix bug in building files for utest
Kevin Klues [Tue, 27 May 2014 23:24:15 +0000 (16:24 -0700)]
Fix bug in building files for utest

6 years agoFixes KMSG IPI handling bug
Barret Rhoden [Tue, 27 May 2014 20:51:11 +0000 (13:51 -0700)]
Fixes KMSG IPI handling bug

Left over from the x86 change to not have IRQs globally disabled when running
IRQ handlers.

Note that even though RKMs are processed during a routine point, the lock still
needs to be irqsave.  The lock is grabbed from IRQ context, when sending
messages such as the alarm handler or the console IRQs.

6 years agooprof: Fixes warning and #includes
Barret Rhoden [Tue, 27 May 2014 17:18:21 +0000 (10:18 -0700)]
oprof: Fixes warning and #includes

6 years agooprofile
Ronald G. Minnich [Fri, 23 May 2014 22:18:18 +0000 (15:18 -0700)]

The oprofile tools are pretty hardwired to a certain directory structure
that is hard to recreate, and not clearly needed.

Change the output of #K/kpoprofile to the following:
bits 63-4, time in ns; 3-0, number PCs following
[an array of PCs]

I don't think we'll miss the 1 ns precision, because there's no way
we're that accurate. +- 16 ns is fine.

TRACEME now calls oprofile_add_backtrace, which adds the backtrace.

Sadly, we're not seeing any backtrace data, but our Go program finds this output
very easy to digest.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agooprofile: sampling works
Ronald G. Minnich [Fri, 23 May 2014 02:49:46 +0000 (19:49 -0700)]
oprofile: sampling works

ash /ifconfig
echo opstart > /prof/kpctl
do stuff
echo opstop > /prof/kpctl

cat /prof/kpoprofile > /whatever (or 9p place)

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agooprofile: add traceme to clock interrupt, fix bug.
Ronald G. Minnich [Fri, 23 May 2014 00:47:59 +0000 (17:47 -0700)]
oprofile: add traceme to clock interrupt, fix bug.

but nothing is traced yet.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoSteps to make oprofile more IRQ safe
Barret Rhoden [Fri, 23 May 2014 00:19:12 +0000 (17:19 -0700)]
Steps to make oprofile more IRQ safe

Might be missing some things still.

6 years agoTRACEME() helper for oprofile
Barret Rhoden [Fri, 23 May 2014 00:18:31 +0000 (17:18 -0700)]
TRACEME() helper for oprofile

6 years agoqibwrite() irqsafe queue block writes
Barret Rhoden [Fri, 23 May 2014 00:01:51 +0000 (17:01 -0700)]
qibwrite() irqsafe queue block writes

So we can push blocks from IRQ context.

6 years agobacktrace_list()
Barret Rhoden [Thu, 22 May 2014 23:28:25 +0000 (16:28 -0700)]

Extracts the backtrace into an array of PCs.

6 years agoset_frame_pointer() for reset stacks
Barret Rhoden [Thu, 22 May 2014 23:08:21 +0000 (16:08 -0700)]
set_frame_pointer() for reset stacks

Helps with backtraces, so we can check for FP = 0.

6 years agoKprof samples during the timer IRQ
Barret Rhoden [Thu, 22 May 2014 21:54:37 +0000 (14:54 -0700)]
Kprof samples during the timer IRQ

It's a bit cheap, since the timer won't rearm til we handle RKMs.  This means
that during heavy activity, we might not take the samples as frequently.  I've
got some ideas to fix this.  For now, we can at least get a sample from IRQ

6 years agox86: enables IRQs globally during IRQ handling
Barret Rhoden [Thu, 22 May 2014 21:00:16 +0000 (14:00 -0700)]
x86: enables IRQs globally during IRQ handling

This allows IRQs to be preempted by higher priority IRQs.  If handlers need
IRQs disabled, then they need to do so themselves.  IRQ-save spinlocks will
still work, since they disable IRQs on the CPU.

I don't have IRQs enabled during trap processing, notably page faults, yet.
It's probably okay to do so right around handle_page_fault(), though that's
tricky code.  I'll look in to turning it on if it becomes an issue.

6 years agox86: reorganizes IRQ/trap vectors (XCC)
Barret Rhoden [Thu, 22 May 2014 20:07:07 +0000 (13:07 -0700)]
x86: reorganizes IRQ/trap vectors (XCC)

LAPIC IRQs are now the highest priority interrupts on x86.  Bits 7:4 of the
vector define the priority class, and 3:0 are largely ignored.

Higher priority IRQs will interrupt lower priority ones, if CPU IRQs are
enabled.  For instance, a NIC IRQ handler that enables IRQs can be interrupted
by a local timer tick, which is useful for profiling.

You need to rebuild userspace apps.

Also note that while I changed the 32 bit code, we currently don't compile on
32 bit for a few minor reasons.

6 years agoAdd gross hack so we can see how big the oprofile queue is
Ronald G. Minnich [Thu, 15 May 2014 03:24:47 +0000 (20:24 -0700)]
Add gross hack so we can see how big the oprofile queue is

We really need a kprofgen, this is just ugly. FIXME.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoUgly script to add tracing.
Ronald G. Minnich [Thu, 15 May 2014 03:10:42 +0000 (20:10 -0700)]
Ugly script to add tracing.

This could be better but it's a start. I quick tested it with
ip and it seems to produce data.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoGet oprofile working more correctly.
Ronald G. Minnich [Thu, 15 May 2014 00:49:46 +0000 (17:49 -0700)]
Get oprofile working more correctly.

Do this:
echo opstart > /prof/kpctl
echo 8 > /prof/kpoprofile
echo 8 > /prof/kpoprofile
echo 8 > /prof/kpoprofile
echo opstop > /prof/kpctl
cat /prof/kpoprofile

This will return data in oprofile format. Shame that oprofile is obsolete,
this was so easy.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoGet things to work with new gcc
Ronald G. Minnich [Thu, 15 May 2014 00:49:07 +0000 (17:49 -0700)]
Get things to work with new gcc

Not the best way, disabling warnings, but the only one that's going to
work with 4.9

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoProc vcore list only has available vcores
Barret Rhoden [Thu, 15 May 2014 00:09:11 +0000 (17:09 -0700)]
Proc vcore list only has available vcores

Previously, you could see up to vcore 8 on an 8 core machine, even
though you could never get that last vcore.  This commit keeps the list
of vcores in sync with which vcores are available.

Right now, the rules for max_vcores is that it is set at process
creation and never changed.  The ksched could offer a process less than
the number of CG cores in the system, via the max_vcores() function.

6 years agoMonitor command: pip
Barret Rhoden [Thu, 15 May 2014 00:08:09 +0000 (17:08 -0700)]
Monitor command: pip

Short version of "procinfo pid".  I got tired of typing it.

6 years agoVcore timers are stored in ticks (XCC)
Barret Rhoden [Thu, 15 May 2014 00:03:26 +0000 (17:03 -0700)]
Vcore timers are stored in ticks (XCC)

Convert only when we actually care about the value.  Also renames

Reinstall your kernel headers.

6 years agoFixes vcore counters
Barret Rhoden [Wed, 14 May 2014 23:45:31 +0000 (16:45 -0700)]
Fixes vcore counters

I was a little tossed up about putting the accounting in map/unmap or
not.  It'd be correct (if we did a little more unmapping for SCPs), but
in the end I wanted to parallelize the work as much as possible.  Our
'for each' vcore loops are probably long enough as it is.

6 years agoSyscall debugging helper
Barret Rhoden [Wed, 14 May 2014 22:13:21 +0000 (15:13 -0700)]
Syscall debugging helper

Kfunc this from the monitor.  Helps when you want to know details about
a kthread sleeping on a semaphore.  If the process dies or the syscall
completes while you run this, you'll get garbage and might fault.

6 years agoSyscall string debugging
Barret Rhoden [Wed, 14 May 2014 22:07:38 +0000 (15:07 -0700)]
Syscall string debugging

When CONFIG'd, allows certain syscalls to store some text in the name of
its kthread.  You can see the name of a kthread when debugging
semaphores.  Each syscall needs to have its own message, as I've done
for read and open so far.

6 years agoFix a comment.
Ronald G. Minnich [Wed, 14 May 2014 21:27:10 +0000 (14:27 -0700)]
Fix a comment.

6 years agoprofiling: simple test
Ronald G. Minnich [Wed, 14 May 2014 21:21:46 +0000 (14:21 -0700)]
profiling: simple test

vcore.h has inlines for reading resume and total times for the
current vcpu. prot_test will do simple tests to test those values.
prof_test is not running as an mcp currently so prints nothing useful.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoProfiling: counters for the vcore.
Ronald G. Minnich [Wed, 14 May 2014 17:34:52 +0000 (10:34 -0700)]
Profiling: counters for the vcore.

Set a timer (resume) to the ns when a vcore resumes user mode.
This is almost certainly being done at the wrong place.

When a vcore exits user mode, update the total ns timer for that

These two counters should let a user figure out profiling info.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoprofiling in user mode.
Ronald G. Minnich [Wed, 14 May 2014 01:13:24 +0000 (18:13 -0700)]
profiling in user mode.

This change should allow reasonable and accurate user-mode profiling.
An MCP can look at its vcore stats and see at what time (in ns)
it was resumed. It can also see see total ns spent in that process.
Finally, it can compute the current ns spent in the process
by converting the tsc to ns and subtracting the resume value.

Only a proposal, let me know if there's a better way.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agotime: add a convenience function, nsec()
Ronald G. Minnich [Wed, 14 May 2014 01:11:13 +0000 (18:11 -0700)]
time: add a convenience function, nsec()

Simple inline, but it's handy.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoFixes some channel refcnts
Barret Rhoden [Wed, 14 May 2014 00:01:35 +0000 (17:01 -0700)]
Fixes some channel refcnts

Chan refcnting around errors is a little sloppy.

6 years agoMonitor procinfo FD formatting
Barret Rhoden [Tue, 13 May 2014 23:58:48 +0000 (16:58 -0700)]
Monitor procinfo FD formatting

Fixes various formatting issues with the 9ns FDs when you procinfo pid XX.

6 years agoChan refcnting uses a helper
Barret Rhoden [Tue, 13 May 2014 23:56:16 +0000 (16:56 -0700)]
Chan refcnting uses a helper

We needed to backtrace all of our chan increfs to track down a bug.  I have a
feeling we'll need it in the future.

6 years agoAbort all syscalls using a particular FD (XCC)
Barret Rhoden [Tue, 13 May 2014 23:25:07 +0000 (16:25 -0700)]
Abort all syscalls using a particular FD (XCC)

This will abort any syscalls currently blocked on a rendez that operate on a
given FD.  It is possible that some syscalls are still in progress and haven't
rendezed, and those will not be aborted.

6 years agoJenkins: Index should be 3, not 2
Kevin Klues [Tue, 13 May 2014 20:18:28 +0000 (13:18 -0700)]
Jenkins: Index should be 3, not 2

6 years agooprofile: preliminary design for queues between cores and device
Ronald G. Minnich [Mon, 12 May 2014 15:14:54 +0000 (08:14 -0700)]
oprofile: preliminary design for queues between cores and device

Each core will put its results in a block. The per-cpu-buffer
contains a pointer to the block and an offset. Since we know
the block size, reserving space in the block and putting data
into it is easy.

The long term plan is that once the block is out of
room, the per-core code pushes it onto the per-core
fullqueue. The timer code, which runs on core 0, pulls
full blocks off the per-core full queue and pushes
empty blocks onto the per-core empty queue. In this way,
the cores run with very little overhead for saving data
(pointer/offset) and the messy work gets done on core "0".

Further, the per-core code can decide, for an even, that it's been
a long time since data has been pushed and push it even when the
block is not full. We may in the end want an interrupt at, say, once
per second to make sure stale data does not just hang around.

I'm open to changes and improvements in this idea; consider it
a straw man. We should try to work out what we want this week

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agooprofile: moron bug
Ronald G. Minnich [Thu, 8 May 2014 15:23:56 +0000 (08:23 -0700)]
oprofile: moron bug

Just a stupid kmalloc bug, works with 8 cores now.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoJenkins: Should be index 2, not index 3
Kevin Klues [Thu, 8 May 2014 03:58:32 +0000 (20:58 -0700)]
Jenkins: Should be index 2, not index 3

6 years agooprofile: minimally working
Ronald G. Minnich [Thu, 8 May 2014 00:34:24 +0000 (17:34 -0700)]
oprofile: minimally working

We don't have on/off control; that's next.

You can echo something > '#K/kpoprofile' and it will go into
the buffer. You can than cat that file. It's a good way to test.
It works.

Need to get the programs going, see if they work and, if so,
enable the rest of the bits. Probably will implement the real
command interface too.

But, sigh. Will probably have to implement all the hokey oprofile
single-value-for-file files, just for compatibility with the
tools. Oh, yuck.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agooprofile: Allow user mode to read oprofile data via '#K'.
Ronald G. Minnich [Wed, 7 May 2014 23:37:18 +0000 (16:37 -0700)]
oprofile: Allow user mode to read oprofile data via '#K'.

Gee, that was easy. Now if there is data to read, it will be read
in standard oprofile format. This means we need to now build the
oprofile tools for Akaros. Also, time to get poor mans ftrace
so it will patch code for catching oprofile data.

I don't necessarily LIKE oprofile format; it's not endian-clean
and architecture-clean the way plan 9 tends to do it. But it's a
sub-standard now and we might as well just run with it.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years ago82563/i350: Fixes off-by-one issue
Barret Rhoden [Wed, 7 May 2014 23:25:05 +0000 (16:25 -0700)]
82563/i350: Fixes off-by-one issue

We were seeing TX underruns, which made me look closer.  I don't think
the -1s would work with the NEXT_RING macro, which expects the full
length of the ring.  Perhaps 9port had different ring macros?  Or they
wanted to skip that last entry for some reason...

Either way, we don't get the underruns with the removal of the -1s.

6 years agoFirst oprofile file to build
Ronald G. Minnich [Wed, 7 May 2014 23:17:21 +0000 (16:17 -0700)]
First oprofile file to build

This is the one on which all else builds. It takes events of different types
and wedges them into the opq queue (i.e. queue struct that I'm about to
make available via #K).

This is not efficient. In fact it's quite stupid: it calls kzmalloc for each
sample! I have some ideas on how to make it very simply
efficient: just accumulate the cpu samples into a struct block and, when that block
is out of room, qbwrite it.

If that works, and is fast enough, giant gobs of nasty stuff that are in the Linux
driver will vanish in a puff of smoke. I suspect it will be fast enough. qbwrite
is just linked list manipulation, and if we make the block big enough
(64K will hold 16000 samples) I think we'll be able to just sail along.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoFixes c89 NIC detection
Barret Rhoden [Wed, 7 May 2014 22:31:26 +0000 (15:31 -0700)]
Fixes c89 NIC detection

When the i350 driver was in an external repo, we were detecting them
after the e1000s, so the e1000s were #l0 and #l1.  Now, the i350s are
showing up as NICs #l0-#l3.

6 years agoAdd a per-cpu pointer to profiling code.
Ronald G. Minnich [Wed, 7 May 2014 01:31:42 +0000 (18:31 -0700)]
Add a per-cpu pointer to profiling code.

Not intended to be used outside the profiling code.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoChange iNULLim to inilim in qio.c
Ronald G. Minnich [Wed, 7 May 2014 00:59:21 +0000 (17:59 -0700)]
Change iNULLim to inilim in qio.c

This was the result of an errant script.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoExplicitly look for CONFIG_X86_32 in Makefile
Kevin Klues [Wed, 7 May 2014 00:48:09 +0000 (17:48 -0700)]
Explicitly look for CONFIG_X86_32 in Makefile

Before this change, the first pass over the makefile would think we were
a 32 bit kernel even if we were a 64 bit one.  If you didn't have an
i686-ros-gcc compiler installed, then later attempts to execute
$(shell $(OBJDUMP)) in the top level Makefile would error out (albeit

6 years agoEnable sub-ktests by default once ktests enabled
Kevin Klues [Wed, 7 May 2014 00:11:15 +0000 (17:11 -0700)]
Enable sub-ktests by default once ktests enabled

6 years agoDon't rebuild kernel at end of buding BB
Kevin Klues [Wed, 7 May 2014 00:04:44 +0000 (17:04 -0700)]
Don't rebuild kernel at end of buding BB

That's done in a separate step later on.

6 years agoJenkins: Bug in deleting CXX directory on rebuild
Kevin Klues [Tue, 6 May 2014 23:31:05 +0000 (16:31 -0700)]
Jenkins: Bug in deleting CXX directory on rebuild

6 years agoRemoves test_print_info()
Barret Rhoden [Tue, 6 May 2014 23:40:14 +0000 (16:40 -0700)]
Removes test_print_info()

Moves the functionality to the monitor.  The "all cores" option needs to be

6 years agoAborted calls return EINTR
Barret Rhoden [Tue, 6 May 2014 23:21:50 +0000 (16:21 -0700)]
Aborted calls return EINTR

So no one has to strcmp("syscall aborted").

errstrs are for humans; errnos are for computers!

6 years agoSockets shutdown() is just a close()
Barret Rhoden [Tue, 6 May 2014 23:17:38 +0000 (16:17 -0700)]
Sockets shutdown() is just a close()

Since we don't have shutdown in the 9ns stack.

6 years agoJenkins: Rebuild everything if build number wrong
Kevin Klues [Tue, 6 May 2014 22:08:09 +0000 (15:08 -0700)]
Jenkins: Rebuild everything if build number wrong

The build number could mess up if we roll back a change on the branch
and that change happens to be the commit of the last successful build.
Should be rare...

6 years agoJenkins: Use $JOB_NAME instead of hard coding it
Kevin Klues [Tue, 6 May 2014 21:45:37 +0000 (14:45 -0700)]
Jenkins: Use $JOB_NAME instead of hard coding it

6 years agoRestructure ktests into test suites
Kevin Klues [Tue, 6 May 2014 21:32:58 +0000 (14:32 -0700)]
Restructure ktests into test suites

6 years agoJenkins: Don't rebuild kernel with userspace
Kevin Klues [Tue, 6 May 2014 02:59:14 +0000 (19:59 -0700)]
Jenkins: Don't rebuild kernel with userspace

6 years agoJenkins: build the kernel last
Barret Rhoden [Tue, 6 May 2014 01:34:27 +0000 (18:34 -0700)]
Jenkins: build the kernel last

We need to build busybox before the kernel, due to KFS issues with
symlinks.  As a short-term fix, building busybox before the kernel
should work.  Longer term, we should fix up the busybox build steps, and
drop it under tools/ or something.

6 years agoAdd Extra prints surrounding KERNEL TESTS
Kevin Klues [Sat, 3 May 2014 01:55:15 +0000 (18:55 -0700)]
Add Extra prints surrounding KERNEL TESTS

6 years agoClean the output log to remove ^M characters
Kevin Klues [Sat, 3 May 2014 01:43:48 +0000 (18:43 -0700)]
Clean the output log to remove ^M characters

6 years agoMajor overhaul to testing infrastructure
Kevin Klues [Sat, 3 May 2014 00:46:10 +0000 (17:46 -0700)]
Major overhaul to testing infrastructure

6 years agoGet diff from last stable build, not just previous build
Kevin Klues [Thu, 1 May 2014 22:42:37 +0000 (15:42 -0700)]
Get diff from last stable build, not just previous build

Also there is no longer a 'make testsclean' target.

6 years agoTurn on userspace tests and set defaults properly
Kevin Klues [Thu, 1 May 2014 20:49:47 +0000 (13:49 -0700)]
Turn on userspace tests and set defaults properly

We need a make olddefconfig after manually turning on the tests,
otherwise we get prompted to answer some qestions, that we don't want to
answer.  We just want to use the defaults.

6 years agoAdded jenkins testing infrastructure.
alfongj [Thu, 24 Apr 2014 02:04:19 +0000 (19:04 -0700)]
Added jenkins testing infrastructure.

1. launcher.sh: Bash script in charge of compilation and running
   all the testing components.
2. changes.py and compilation_components.json: Script that checks
   for changes (via a git diff) since last commit and decides
   which components of akaros to compile.
3. qemu_launcher.c and Makelocal_qemu: Wrapper for launching qemu
   for akaros in a way that is killable from jenkins without being
4. wait_until.py: Script that checks for a given line in akaros
   output in order to know once it finished testing and stuff so
   we can kill it.
5. test_reporter.py and markup.py: Scripts for parsing akaros
   output for test output and then reporting it in XUnit XML

6 years agoFinished infrastructure that runs all userspace tests.
alfongj [Thu, 1 May 2014 01:45:06 +0000 (18:45 -0700)]
Finished infrastructure that runs all userspace tests.

6 years agoInstall user tests in a subdir of /bin
Kevin Klues [Thu, 1 May 2014 01:23:44 +0000 (18:23 -0700)]
Install user tests in a subdir of /bin

6 years agoMake infrastructure for better organized user testing
Kevin Klues [Wed, 30 Apr 2014 23:20:52 +0000 (16:20 -0700)]
Make infrastructure for better organized user testing

6 years agoSeparated user-space config variable into two.
alfongj [Wed, 30 Apr 2014 21:57:51 +0000 (14:57 -0700)]
Separated user-space config variable into two.

CONFIG_USERSPACE_TESTING: whether tests are activated or not.

6 years agoAdded automatic userspace test launching capability to AKAROS.
alfongj [Wed, 30 Apr 2014 20:43:22 +0000 (13:43 -0700)]
Added automatic userspace test launching capability to AKAROS.

* Created a new config variable (USERSPACE_TESTING) in Kconfig.Testing
  in which to specify a path to a script that should run userspace
* Modified manager.c to support this.

6 years agoFix kbuild make detecting change in file
Kevin Klues [Tue, 29 Apr 2014 20:35:06 +0000 (13:35 -0700)]
Fix kbuild make detecting change in file

Unfortunately, Kconfig doesn't seem to recognize that the tests.c file
needs to be rebuilt unless we explicitly use our CONFIG_TEST_* variables
in the c file instead of generated by the underlying macro. Boo.

6 years agoImplemented Kernel Post-boot testing.
alfongj [Thu, 24 Apr 2014 01:32:42 +0000 (18:32 -0700)]
Implemented Kernel Post-boot testing.

1. Added generic C unit testing macros in kern/include/test_infra..
2. Moved current Postboot tests from kern/src/testing.c to
   kern/src/tests_pb_kernel.c and modified many to use the new unit
   testing standard.
3. Added kern/src/tests.c as a file in which to register all kernel
   testing functions (can be extended in the future with new tests)
4. Modified kern/src/manager.c to run kernel postboot tests if they
   are set up.
5. Modified KConfig to add a config variable for configuring
   whether to run these tests post boot or not.
6. Added Documentation/testing.txt (W.I.P.).
7. Modified necessary headers and KBuild files.

6 years agoMuch less confusing. Tested and works.
Ronald G. Minnich [Mon, 5 May 2014 21:45:32 +0000 (14:45 -0700)]
Much less confusing. Tested and works.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoKprof fixes
Barret Rhoden [Thu, 1 May 2014 00:21:44 +0000 (17:21 -0700)]
Kprof fixes

Lots todo still, check the top of the file.

To process the data:
$ sort -rk3 /prof/kpdata | head -n 50

6 years agoAdds head and sort to bb config
Barret Rhoden [Wed, 30 Apr 2014 20:29:23 +0000 (13:29 -0700)]
Adds head and sort to bb config

You'll need to copy out the config to your bb/.config and rebuild.

I added the symlinks too, since I think that's what we're doing these days for
bb apps.

6 years agoPoor-man's ftrace has more context
Barret Rhoden [Wed, 30 Apr 2014 20:14:41 +0000 (13:14 -0700)]
Poor-man's ftrace has more context

Will output whether we're in a process, IRQ, or ktask context.

Careful using this on certain devices in k/d/dev/, like acpi and console.  One
of the devs locks up if you try to print.

I usually turn off the 'print' bool in kdebug.c for booting, then turn it on
via 'kfunc toggle_print_func'.

To spatch the networking code, try something like:

$ for i in kern/src/net kern/drivers/net kern/drivers/dev/ether.c; do
spatch --sp-file scripts/spatch/poor-ftrace.cocci  --in-place $i; done

6 years agoBrings back the cheap dial()
Barret Rhoden [Wed, 30 Apr 2014 20:11:56 +0000 (13:11 -0700)]
Brings back the cheap dial()

In case you want to bypass the full dial + cs + dialstring parsing.

6 years agoMonitor command showmappings updates
Barret Rhoden [Wed, 30 Apr 2014 00:18:00 +0000 (17:18 -0700)]
Monitor command showmappings updates

Now also called 'sm', it takes a PID.  sm will print the mappings for the given
process's address space.  PID = 0 will show the boot_pgdir.

6 years agoBSD sockets library relies on parlib
Barret Rhoden [Tue, 29 Apr 2014 22:38:09 +0000 (15:38 -0700)]
BSD sockets library relies on parlib

Included via "priv.h".  Had to add some #includes there, since they were
assuming priv.h would be included after some other files.

Also removed ntohl.c.  priv.h includes glibc's version.

I originally did this to make a poor-ftrace of the BSD sockets library.  It's
probably easier to just put -include parlib.h into the user/bsd/Makefile in the
future.  Cleaning out ntohl.c was nice.

6 years agoPoor-man's ftracing for userspace
Barret Rhoden [Tue, 29 Apr 2014 22:37:28 +0000 (15:37 -0700)]
Poor-man's ftracing for userspace

Make sure whatever you trace has #included parlib.h.

6 years agoIncrease buffer size for incoming connections
Kevin Klues [Tue, 29 Apr 2014 22:30:56 +0000 (15:30 -0700)]
Increase buffer size for incoming connections

6 years agoInitial commit of some oprofile support
Ronald G. Minnich [Tue, 29 Apr 2014 14:59:24 +0000 (07:59 -0700)]
Initial commit of some oprofile support

This is going to need some work, but we need it.
It's weird how complicated it is to work with synthetics in linux.
I expect this code to shrink a lot.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoUpdated GETTING_STARTED with busybox info
Barret Rhoden [Sat, 26 Apr 2014 02:18:36 +0000 (19:18 -0700)]
Updated GETTING_STARTED with busybox info

6 years agoAdded .pyc (Python comp files) to gitignore
alfongj [Thu, 24 Apr 2014 01:08:44 +0000 (18:08 -0700)]
Added .pyc (Python comp files) to gitignore

6 years agoMoved busybox patches to their own folder.
alfongj [Thu, 24 Apr 2014 01:07:17 +0000 (18:07 -0700)]
Moved busybox patches to their own folder.

6 years agoFixes short 9ns dirent reads
Barret Rhoden [Sat, 26 Apr 2014 01:27:21 +0000 (18:27 -0700)]
Fixes short 9ns dirent reads

Things like 'ps' were failing.  There might have been others.  The read
method would work, but it was possible to squeeze in multiple Ms in the
buffer for a single kdirent read.  End result, we'd miss entries every
so often.  For devproc, we'd miss the second of three processes.

This didn't take as long to figure this out as when it happened to
devmnt, but still took took long.

I put in a check in devdirread which should trip if our minimum is wrong

6 years agoCorrect the date in the copyright line of ether82563.c
Ronald G. Minnich [Sat, 26 Apr 2014 01:25:40 +0000 (18:25 -0700)]
Correct the date in the copyright line of ether82563.c

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoMake changes to the bsd library to get it to built with netperf.
Ronald G. Minnich [Sat, 26 Apr 2014 01:23:27 +0000 (18:23 -0700)]
Make changes to the bsd library to get it to built with netperf.

More needs doing. I'm going to remove any use of select from netperf.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoAdd early docs on building netperf.
Ronald G. Minnich [Sat, 26 Apr 2014 01:22:53 +0000 (18:22 -0700)]
Add early docs on building netperf.

It's a pretty ugly process.

6 years agoAdd Intel 82563 NIC support.
Ronald G. Minnich [Sat, 26 Apr 2014 01:21:03 +0000 (18:21 -0700)]
Add Intel 82563 NIC support.

This code courtesy of Erik Quanstrom.

6 years agoAdd a short explanation of the kprof device.
Ronald G. Minnich [Sat, 26 Apr 2014 01:01:42 +0000 (18:01 -0700)]
Add a short explanation of the kprof device.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoFix trivial bug in kprof -- pc not getting set correctly
Ronald G. Minnich [Sat, 26 Apr 2014 00:45:50 +0000 (17:45 -0700)]
Fix trivial bug in kprof -- pc not getting set correctly

I was testing with dd bs=64 etc. etc.
Andrew Gallatin tested with cat.

For me, the pc was always right, since each read was a single
record and the pc was recomputed each time. For larger reads, it would be mostly wrong.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>
6 years agoMonitor command bt, alias for backtrace
Barret Rhoden [Sat, 26 Apr 2014 00:15:47 +0000 (17:15 -0700)]
Monitor command bt, alias for backtrace

6 years agoRemoves ping warnings, tries to use cs
Barret Rhoden [Sat, 26 Apr 2014 00:12:10 +0000 (17:12 -0700)]
Removes ping warnings, tries to use cs

CS doesn't actually work completely.  It'll hang if you:

ash ifconfig
echo debug > cs
ping www.google.com

It's fine that we don't have DNS yet, but CS shouldn't hang forever.

6 years agoFixes ifconfig issues
Barret Rhoden [Sat, 26 Apr 2014 00:05:39 +0000 (17:05 -0700)]
Fixes ifconfig issues

On my machine, cs doesn't produce #s/cs before ifconfig tries to mount

Also, cs debugging is pretty loud.  We can turn it on easily if we need
to debug.

6 years agoMonitor access to semaphore debugging info
Barret Rhoden [Fri, 25 Apr 2014 23:49:36 +0000 (16:49 -0700)]
Monitor access to semaphore debugging info

db sem for print_all_sem_info().  Easier than kfuncing.  Feel free to
add other useful things to db.

Also, this adds that much needed newline to print_all_sem_info().  How
many people have looked at that output and not cursed its unreadability?

6 years agoAdds kill to the monitor
Barret Rhoden [Fri, 25 Apr 2014 23:43:25 +0000 (16:43 -0700)]
Adds kill to the monitor

Got tired of procinfo kill PID.  Too much typing.  =)

6 years agoRemoved IRQ routing test
Barret Rhoden [Fri, 25 Apr 2014 23:38:05 +0000 (16:38 -0700)]
Removed IRQ routing test

Was getting sick of those #warnings during compile.

6 years agopthread_switch: fast user-level context switch
Barret Rhoden [Fri, 25 Apr 2014 23:29:04 +0000 (16:29 -0700)]
pthread_switch: fast user-level context switch

This is just an example of what you can do.  Be a little careful if you
use this in another 2LS, since it short-circuits the rest of
uthread_yield.  I think it is okay as is, but future uthread changes
could cause trouble.  If we really need this behavior, I could build it
in to uthread.c.

Also, this adds an interface to pthreads, such that you can create a
thread, but not start running it yet.  Careful with that, too.

6 years agopthread_test can easily be built for linux
Barret Rhoden [Fri, 25 Apr 2014 18:34:43 +0000 (11:34 -0700)]
pthread_test can easily be built for linux

Note the use of misc-compat.h.  Feel free to add things there for other

6 years agoAdd more info to the kprof and fix a big
Ronald G. Minnich [Fri, 25 Apr 2014 21:38:31 +0000 (14:38 -0700)]
Add more info to the kprof and fix a big

In real use, turns out we want that PC. We don't want to
merge the common functions from the kernel either.
We may even decide to stop the >> 3 on the PC, depending.
Memory is cheap.

Fix a bug that came up because of dealing with snprintf behavior,
long story.

Signed-off-by: Ronald G. Minnich <rminnich@google.com>