1. 28 Apr, 2016 11 commits
    • Brad Fitzpatrick's avatar
      os/exec: add Cmd.RunContext and Cmd.WaitContext · 2cc27a7d
      Brad Fitzpatrick authored
      Updates #14660
      
      Change-Id: Ifa5c97ba327ad7ceea0a9a252e3dbd9d079dae54
      Reviewed-on: https://go-review.googlesource.com/22529Reviewed-by: default avatarIan Lance Taylor <iant@golang.org>
      Run-TryBot: Brad Fitzpatrick <bradfitz@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      2cc27a7d
    • Adam Langley's avatar
      crypto/tls: allow renegotiation to be handled by a client. · af125a51
      Adam Langley authored
      This change adds Config.Renegotiation which controls whether a TLS
      client will accept renegotiation requests from a server. This is used,
      for example, by some web servers that wish to “add” a client certificate
      to an HTTPS connection.
      
      This is disabled by default because it significantly complicates the
      state machine.
      
      Originally, handshakeMutex was taken before locking either Conn.in or
      Conn.out. However, if renegotiation is permitted then a handshake may
      be triggered during a Read() call. If Conn.in were unlocked before
      taking handshakeMutex then a concurrent Read() call could see an
      intermediate state and trigger an error. Thus handshakeMutex is now
      locked after Conn.in and the handshake functions assume that Conn.in is
      locked for the duration of the handshake.
      
      Additionally, handshakeMutex used to protect Conn.out also. With the
      possibility of renegotiation that's no longer viable and so
      writeRecordLocked has been split off.
      
      Fixes #5742.
      
      Change-Id: I935914db1f185d507ff39bba8274c148d756a1c8
      Reviewed-on: https://go-review.googlesource.com/22475
      Run-TryBot: Adam Langley <agl@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarRuss Cox <rsc@golang.org>
      af125a51
    • Keith Randall's avatar
      cmd/compile: reorg copyelim to avoid O(n^2) problem · d610d304
      Keith Randall authored
      Make sure we don't do O(n^2) work to eliminate a chain
      of n copies.
      
      benchmark                     old ns/op       new ns/op     delta
      BenchmarkCopyElim1-8          1418            1406          -0.85%
      BenchmarkCopyElim10-8         5289            5162          -2.40%
      BenchmarkCopyElim100-8        52618           41684         -20.78%
      BenchmarkCopyElim1000-8       2473878         424339        -82.85%
      BenchmarkCopyElim10000-8      269373954       6367971       -97.64%
      BenchmarkCopyElim100000-8     31272781165     104357244     -99.67%
      
      Change-Id: I680f906f70f2ee1a8615cb1046bc510c77d59284
      Reviewed-on: https://go-review.googlesource.com/22535Reviewed-by: default avatarAlexandru Moșoi <alexandru@mosoi.ro>
      d610d304
    • David Chase's avatar
      cmd/compile: fix.gc.Type.cmp for map.notBucket cmp map.Bucket · 5ec87ba5
      David Chase authored
      Comparison of certain map types could fail to be antisymmetric.
      This corrects that.
      
      Change-Id: I88c6256053ce29950ced4ba4d538e241ee8591fe
      Reviewed-on: https://go-review.googlesource.com/22552
      Run-TryBot: David Chase <drchase@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarjcd . <jcd@golang.org>
      Reviewed-by: default avatarKeith Randall <khr@golang.org>
      5ec87ba5
    • Dan Peterson's avatar
      net: change type of dnsConfig.timeout from int to time.Duration · 9faf5cdf
      Dan Peterson authored
      Instead of keeping the desired number of seconds and converting to
      time.Duration for every query, convert to time.Duration when
      building the config.
      
      Updates #15473
      
      Change-Id: Ib24c050b593b3109011e359f4ed837a3fb45dc65
      Reviewed-on: https://go-review.googlesource.com/22548Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      9faf5cdf
    • Aliaksandr Valialkin's avatar
      cmd/vet: improve checking unkeyed fields in composite literals · 22db3c5a
      Aliaksandr Valialkin authored
      - Simplified the code.
      
      - Removed types for slice aliases from composite literals' whitelist, since they
      are properly handled by vet.
      
      Fixes #15408
      Updates #9171
      Updates #11041
      
      Change-Id: Ia1806c9eb3f327c09d2e28da4ffdb233b5a159b0
      Reviewed-on: https://go-review.googlesource.com/22318
      Run-TryBot: Rob Pike <r@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarRob Pike <r@golang.org>
      22db3c5a
    • Robert Griesemer's avatar
      cmd/compile: have all or no parameter named in exported signatures · 80e9a7f0
      Robert Griesemer authored
      Binary export format only.
      
      Make sure we don't accidentally export an unnamed parameter
      in signatures which expect all named parameters; otherwise
      we crash during import. Appears to happen for _ (blank)
      parameter names, as observed in method signatures such as
      the one at: x/tools/godoc/analysis/analysis.go:76.
      
      Fixes #15470.
      
      TBR=mdempsky
      
      Change-Id: I1b1184bf08c4c09d8a46946539c4b8c341acdb84
      Reviewed-on: https://go-review.googlesource.com/22543Reviewed-by: default avatarRobert Griesemer <gri@golang.org>
      80e9a7f0
    • Robert Griesemer's avatar
      cmd/compile: use correct (field/method) node for position info · e8d4ffb7
      Robert Griesemer authored
      Position info for fields and methods was based on the wrong node
      in the new export format, leading to position info for empty
      file names and 0 line numbers. Use correct node now.
      
      Due to compact delta encoding, there is no difference in export
      format size. In fact, because encoding of "no line changed" is
      uncommon and thus a bit more expensive, in many cases the data
      is now slightly shorter.
      
      Stats for export data size (pachage, before, after, delta%):
      
                                               archive/tar     5128     5025  -1%
                                               archive/zip     7672     7515  -1%
                                                     bufio     3486     3377  -2%
                                                     bytes     4879     4821   0%
                                             cmd/addr2line       66       66   0%
                                                   cmd/api    14033    13970   0%
                                                   cmd/asm       60       60   0%
                                     cmd/asm/internal/arch    11659    11647   0%
                                      cmd/asm/internal/asm    13858    13766   0%
                                    cmd/asm/internal/flags      306      300  -1%
                                      cmd/asm/internal/lex    15684    15623   0%
                                                   cmd/cgo    15383    15298   0%
                                               cmd/compile       63       63   0%
                                cmd/compile/internal/amd64      838      838   0%
                                  cmd/compile/internal/arm     7333     7323   0%
                                cmd/compile/internal/arm64    19953    19951   0%
                                  cmd/compile/internal/big     8943     9043   1%
                                   cmd/compile/internal/gc    57465    56801   0%
                               cmd/compile/internal/mips64      645      645   0%
                                cmd/compile/internal/ppc64      695      695   0%
                                cmd/compile/internal/s390x      553      553   0%
                                  cmd/compile/internal/ssa    34883    34559   0%
                                  cmd/compile/internal/x86      744      744   0%
                                                 cmd/cover     4961     4892   0%
                                                  cmd/dist      145      145   0%
                                                   cmd/doc     8891     8853   0%
                                               cmd/expdump       67       67   0%
                                                   cmd/fix      422      406  -3%
                                                    cmd/go     9951     9747  -1%
                                                 cmd/gofmt       66       66   0%
                                          cmd/internal/bio     6378     6340   0%
                                       cmd/internal/gcprog      684      644  -5%
                                        cmd/internal/goobj     1276     1193  -6%
                                          cmd/internal/obj    12908    12551  -2%
                                      cmd/internal/obj/arm    10074    10053   0%
                                    cmd/internal/obj/arm64    17723    17699   0%
                                     cmd/internal/obj/mips    12573    12530   0%
                                    cmd/internal/obj/ppc64    15352    15330   0%
                                    cmd/internal/obj/s390x    18785    18769   0%
                                      cmd/internal/obj/x86    23586    23551   0%
                                      cmd/internal/objfile    17148    17359   1%
                               cmd/internal/pprof/commands     1948     1930   0%
                                 cmd/internal/pprof/driver    11123    11095   0%
                                  cmd/internal/pprof/fetch     8931     8907   0%
                                 cmd/internal/pprof/plugin    15335    15221   0%
                                cmd/internal/pprof/profile     8493     8370   0%
                                 cmd/internal/pprof/report     9273     9214   0%
                                    cmd/internal/pprof/svg     1589     1589   0%
                             cmd/internal/pprof/symbolizer     8737     8727   0%
                                cmd/internal/pprof/symbolz     8277     8346   1%
                               cmd/internal/pprof/tempfile     4319     4317   0%
                                          cmd/internal/sys      622      603  -2%
        cmd/internal/unvendor/golang.org/x/arch/arm/armasm    79231    79148   0%
        cmd/internal/unvendor/golang.org/x/arch/x86/x86asm    11761    11726   0%
                                                  cmd/link       60       60   0%
                                   cmd/link/internal/amd64    11190    11178   0%
                                     cmd/link/internal/arm      204      204   0%
                                   cmd/link/internal/arm64      210      210   0%
                                      cmd/link/internal/ld    60670    59758  -1%
                                  cmd/link/internal/mips64      213      213   0%
                                   cmd/link/internal/ppc64      211      211   0%
                                   cmd/link/internal/s390x      210      210   0%
                                     cmd/link/internal/x86      203      203   0%
                                                    cmd/nm       57       57   0%
                                               cmd/objdump       64       64   0%
                                                  cmd/pack     4968     4908   0%
                                                 cmd/pprof       63       63   0%
                                                 cmd/trace      828      782  -5%
                                                   cmd/vet    13485    13503   0%
                                cmd/vet/internal/whitelist      109      109   0%
                                                  cmd/yacc     1315     1269  -2%
                                            compress/bzip2     2561     2506  -1%
                                            compress/flate     4906     4748  -2%
                                             compress/gzip     7788     7717   0%
                                              compress/lzw      406      402   0%
                                             compress/zlib     4739     4712   0%
                                            container/heap      265      257  -2%
                                            container/list     1506     1450  -3%
                                            container/ring      556      536  -3%
                                                   context     3552     3527   0%
                                                    crypto      864      834  -2%
                                                crypto/aes      313      311   0%
                                             crypto/cipher     1139     1138   0%
                                                crypto/des      317      315   0%
                                                crypto/dsa     5326     5304   0%
                                              crypto/ecdsa     6383     6364   0%
                                           crypto/elliptic     5983     6063   1%
                                               crypto/hmac      258      256   0%
                                                crypto/md5      722      700  -2%
                                               crypto/rand     4996     4993   0%
                                                crypto/rc4      327      317  -2%
                                                crypto/rsa     6763     6722   0%
                                               crypto/sha1      767      744  -2%
                                             crypto/sha256      348      348   0%
                                             crypto/sha512      487      487   0%
                                             crypto/subtle      620      620   0%
                                                crypto/tls    24344    24083   0%
                                               crypto/x509    17473    17524   0%
                                          crypto/x509/pkix     9682     9596   0%
                                              database/sql     8099     7831  -2%
                                       database/sql/driver     1556     1500  -3%
                                               debug/dwarf     9358     9010  -3%
                                                 debug/elf    28226    27882   0%
                                               debug/gosym     2472     2333  -5%
                                               debug/macho     9032     8830  -1%
                                                  debug/pe     8561     8328  -2%
                                            debug/plan9obj     1347     1295  -3%
                                                  encoding      275      261  -4%
                                          encoding/ascii85      775      738  -4%
                                             encoding/asn1     1280     1246  -2%
                                           encoding/base32     1207     1146  -4%
                                           encoding/base64     1471     1407  -3%
                                           encoding/binary     2430     2386  -1%
                                              encoding/csv     4347     4280  -1%
                                              encoding/gob    13488    13387   0%
                                              encoding/hex      665      646  -2%
                                             encoding/json    11763    11592   0%
                                              encoding/pem      283      273  -3%
                                              encoding/xml    13804    13631   0%
                                                    errors      166      162  -1%
                                                    expvar     1193     1139  -4%
                                                      flag     6896     6964   1%
                                                       fmt     1247     1213  -2%
                                                    go/ast    15797    15473  -1%
                                                  go/build     6497     6336  -1%
                                               go/constant     1846     1820   0%
                                                    go/doc     3942     3871  -1%
                                                 go/format     1854     1850   0%
                                               go/importer     1702     1695   0%
                                 go/internal/gccgoimporter     2084     2063   0%
                                    go/internal/gcimporter     3236     3253   1%
                                                 go/parser     7377     7371   0%
                                                go/printer     2480     2469   0%
                                                go/scanner     3806     3733  -1%
                                                  go/token     3579     3523  -1%
                                                  go/types    26514    26117   0%
                                                      hash      323      295  -8%
                                              hash/adler32      568      554  -1%
                                                hash/crc32      843      825  -1%
                                                hash/crc64      758      739  -2%
                                                  hash/fnv     1583     1530  -2%
                                                      html      113      113   0%
                                             html/template    16957    16937   0%
                                                     image    11470    11045  -3%
                                               image/color     2566     2503  -1%
                                       image/color/palette      165      163   0%
                                                image/draw     2543     2522   0%
                                                 image/gif     3467     3439   0%
                                  image/internal/imageutil     3481     3479   0%
                                                image/jpeg     2725     2717   0%
                                                 image/png     2702     2689   0%
                                         index/suffixarray     5802     5777   0%
                                             internal/race      274      274   0%
                                     internal/singleflight      756      718  -4%
                           internal/syscall/windows/sysdll      162      162   0%
                                          internal/testenv     5288     5276   0%
                                            internal/trace     1853     1768  -4%
                                                        io     3425     3349  -1%
                                                 io/ioutil     4768     4756   0%
                                                       log     4173     4224   1%
                                                log/syslog     5049     4996   0%
                                                      math     4343     4343   0%
                                                  math/big     8779     8817   0%
                                                math/cmplx     1580     1580   0%
                                                 math/rand      944      982   4%
                                                      mime     2313     2298   0%
                                            mime/multipart     5021     4922  -1%
                                      mime/quotedprintable     2049     2008  -1%
                                                       net    19332    19090   0%
                                                  net/http    50404    49542  -1%
                                              net/http/cgi    22533    22637   0%
                                        net/http/cookiejar     5488     5431   0%
                                             net/http/fcgi    20557    20512   0%
                                         net/http/httptest    30350    30255   0%
                                         net/http/httputil    24045    23964   0%
                                         net/http/internal     2579     2550   0%
                                            net/http/pprof    20307    20258   0%
                                     net/internal/socktest     2227     2159  -2%
                                                  net/mail     5086     5054   0%
                                                   net/rpc    28365    28208   0%
                                           net/rpc/jsonrpc    12805    12722   0%
                                                  net/smtp    19975    19887   0%
                                             net/textproto     4558     4466  -1%
                                                   net/url     1391     1326  -4%
                                                        os    10372    10195  -1%
                                                   os/exec     7814     7928   1%
                                                 os/signal      239      237   0%
                                                   os/user      735      717  -1%
                                                      path      391      391   0%
                                             path/filepath     4136     4136   0%
                                                   reflect     6258     5893  -5%
                                                    regexp     5808     5623  -2%
                                             regexp/syntax     3118     3077   0%
                                                   runtime    11685    10912  -6%
                                               runtime/cgo       18       18   0%
                                             runtime/debug     3320     3304   0%
                                   runtime/internal/atomic      728      728   0%
                                      runtime/internal/sys     2287     2287   0%
                                             runtime/pprof      611      587  -3%
                                              runtime/race       19       19   0%
                                             runtime/trace      145      143   0%
                                                      sort     1229     1206  -1%
                                                   strconv     1752     1744   0%
                                                   strings     3809     3775   0%
                                                      sync     1331     1306  -1%
                                               sync/atomic     1135     1130   0%
                                                   syscall    46280    45722   0%
                                                   testing     7558     7284  -3%
                                            testing/iotest     1122     1071  -4%
                                             testing/quick     5656     5609   0%
                                              text/scanner     3367     3312  -1%
                                            text/tabwriter     2810     2755  -1%
                                             text/template    15613    15595   0%
                                       text/template/parse     9499     9040  -4%
                                                      time     5515     5395  -1%
                                                   unicode     4357     4344   0%
                                             unicode/utf16      583      583   0%
                                              unicode/utf8      970      970   0%
                       vendor/golang.org/x/net/http2/hpack     4105     4012  -1%
                                                   average  1524284  1509610   0%
      
      Change-Id: Ibe1ce098c7c575965389c1cad368c62c2cea256a
      Reviewed-on: https://go-review.googlesource.com/22536
      Run-TryBot: Robert Griesemer <gri@golang.org>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarMatthew Dempsky <mdempsky@google.com>
      Reviewed-by: default avatarAlan Donovan <adonovan@google.com>
      e8d4ffb7
    • Mikio Hara's avatar
      net: fix misrecongnization of IPv6 zone on Windows · c04bc70c
      Mikio Hara authored
      Fixes #15463.
      
      Change-Id: Ic85886861c650ffcb71240d847941534152b92bc
      Reviewed-on: https://go-review.googlesource.com/22540
      Run-TryBot: Mikio Hara <mikioh.mikioh@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      c04bc70c
    • David du Colombier's avatar
      net/http: skip TestTransportRemovesDeadIdleConnections on Plan 9 · cad04e7e
      David du Colombier authored
      Updates #15464.
      
      Change-Id: If3221034bb10751c6fcf1fbeba401a879c18079f
      Reviewed-on: https://go-review.googlesource.com/22513
      Run-TryBot: David du Colombier <0intro@gmail.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      cad04e7e
    • Dave Cheney's avatar
      cmd/compile/internal/gc: unexport {J,S,F,H,B,V}conv · 2da642a9
      Dave Cheney authored
      Updates #15462
      
      Unexport Jconv, Sconv, Fconv, Hconv, Bconv, and VConv as they are
      not referenced outside internal/gc.
      
      Econv was only called by EType.String, so merge it into that method.
      
      Change-Id: Iad9b06078eb513b85a03a43cd9eb9366477643d1
      Reviewed-on: https://go-review.googlesource.com/22531Reviewed-by: default avatarBrad Fitzpatrick <bradfitz@golang.org>
      Run-TryBot: Dave Cheney <dave@cheney.net>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      2da642a9
  2. 27 Apr, 2016 28 commits
  3. 26 Apr, 2016 1 commit
    • Austin Clements's avatar
      runtime: make stack re-scan O(# dirty stacks) · 2a889b9d
      Austin Clements authored
      Currently the stack re-scan during mark termination is O(# stacks)
      because we enqueue a root marking job for every goroutine. It takes
      ~34ns to process this root marking job for a valid (clean) stack, so
      at around 300k goroutines we exceed the 10ms pause goal. A non-trivial
      portion of this time is spent simply taking the cache miss to check
      the gcscanvalid flag, so simply optimizing the path that handles clean
      stacks can only improve this so much.
      
      Fix this by keeping an explicit list of goroutines with dirty stacks
      that need to be rescanned. When a goroutine first transitions to
      running after a stack scan and marks its stack dirty, it adds itself
      to this list. We enqueue root marking jobs only for the goroutines in
      this list, so this improves stack re-scanning asymptotically by
      completely eliminating time spent on clean goroutines.
      
      This reduces mark termination time for 500k idle goroutines from 15ms
      to 238µs. Overall performance effect is negligible.
      
      name \ 95%ile-time/markTerm     old           new         delta
      IdleGs/gs:500000/gomaxprocs:12  15000µs ± 0%  238µs ± 5%  -98.41% (p=0.000 n=10+10)
      
      name              old time/op  new time/op  delta
      XBenchGarbage-12  2.30ms ± 3%  2.29ms ± 1%  -0.43%  (p=0.049 n=17+18)
      
      name                      old time/op    new time/op    delta
      BinaryTree17-12              2.57s ± 3%     2.59s ± 2%    ~     (p=0.141 n=19+20)
      Fannkuch11-12                2.09s ± 0%     2.10s ± 1%  +0.53%  (p=0.000 n=19+19)
      FmtFprintfEmpty-12          45.3ns ± 3%    45.2ns ± 2%    ~     (p=0.845 n=20+20)
      FmtFprintfString-12          129ns ± 0%     127ns ± 0%  -1.55%  (p=0.000 n=16+16)
      FmtFprintfInt-12             123ns ± 0%     119ns ± 1%  -3.24%  (p=0.000 n=19+19)
      FmtFprintfIntInt-12          195ns ± 1%     189ns ± 1%  -3.11%  (p=0.000 n=17+17)
      FmtFprintfPrefixedInt-12     193ns ± 1%     187ns ± 1%  -3.06%  (p=0.000 n=19+19)
      FmtFprintfFloat-12           254ns ± 0%     255ns ± 1%  +0.35%  (p=0.001 n=14+17)
      FmtManyArgs-12               781ns ± 0%     770ns ± 0%  -1.48%  (p=0.000 n=16+19)
      GobDecode-12                7.00ms ± 1%    6.98ms ± 1%    ~     (p=0.563 n=19+19)
      GobEncode-12                5.91ms ± 1%    5.92ms ± 0%    ~     (p=0.118 n=19+18)
      Gzip-12                      219ms ± 1%     215ms ± 1%  -1.81%  (p=0.000 n=18+18)
      Gunzip-12                   37.2ms ± 0%    37.4ms ± 0%  +0.45%  (p=0.000 n=17+19)
      HTTPClientServer-12         76.9µs ± 3%    77.5µs ± 2%  +0.81%  (p=0.030 n=20+19)
      JSONEncode-12               15.0ms ± 0%    14.8ms ± 1%  -0.88%  (p=0.001 n=15+19)
      JSONDecode-12               50.6ms ± 0%    53.2ms ± 2%  +5.07%  (p=0.000 n=17+19)
      Mandelbrot200-12            4.05ms ± 0%    4.05ms ± 1%    ~     (p=0.581 n=16+17)
      GoParse-12                  3.34ms ± 1%    3.30ms ± 1%  -1.21%  (p=0.000 n=15+20)
      RegexpMatchEasy0_32-12      69.6ns ± 1%    69.8ns ± 2%    ~     (p=0.566 n=19+19)
      RegexpMatchEasy0_1K-12       238ns ± 1%     236ns ± 0%  -0.91%  (p=0.000 n=17+13)
      RegexpMatchEasy1_32-12      69.8ns ± 1%    70.0ns ± 1%  +0.23%  (p=0.026 n=17+16)
      RegexpMatchEasy1_1K-12       371ns ± 1%     363ns ± 1%  -2.07%  (p=0.000 n=19+19)
      RegexpMatchMedium_32-12      107ns ± 2%     106ns ± 1%  -0.51%  (p=0.031 n=18+20)
      RegexpMatchMedium_1K-12     33.0µs ± 0%    32.9µs ± 0%  -0.30%  (p=0.004 n=16+16)
      RegexpMatchHard_32-12       1.70µs ± 0%    1.70µs ± 0%  +0.45%  (p=0.000 n=16+17)
      RegexpMatchHard_1K-12       51.1µs ± 2%    51.4µs ± 1%  +0.53%  (p=0.000 n=17+19)
      Revcomp-12                   378ms ± 1%     385ms ± 1%  +1.92%  (p=0.000 n=19+18)
      Template-12                 64.3ms ± 2%    65.0ms ± 2%  +1.09%  (p=0.001 n=19+19)
      TimeParse-12                 315ns ± 1%     317ns ± 2%    ~     (p=0.108 n=18+20)
      TimeFormat-12                360ns ± 1%     337ns ± 0%  -6.30%  (p=0.000 n=18+13)
      [Geo mean]                  51.8µs         51.6µs       -0.48%
      
      Change-Id: Icf8994671476840e3998236e15407a505d4c760c
      Reviewed-on: https://go-review.googlesource.com/20700Reviewed-by: default avatarRick Hudson <rlh@golang.org>
      Run-TryBot: Austin Clements <austin@google.com>
      TryBot-Result: Gobot Gobot <gobot@golang.org>
      2a889b9d